crwdns118619:0crwdne118619:0
crwdns118621:0:javadoc:crwdne118621:0
crwdns118623:0:javadoc:crwdnd118623:0:javadoc:crwdnd118623:0:javadoc:crwdnd118623:0:javadoc:crwdnd118623:0:javadoc:crwdnd118623:0:javadoc:crwdne118623:0
crwdns118625:0:javadoc:crwdnd118625:0:javadoc:crwdnd118625:0:ref:crwdnd118625:0:ref:crwdne118625:0
crwdns118627:0:javadoc:crwdnd118627:0:javadoc:crwdne118627:0
Note
crwdns118629:0crwdne118629:0
crwdns118631:0:javadoc:crwdnd118631:0:javadoc:crwdne118631:0
crwdns118633:0crwdne118633:0
crwdns118635:0:javadoc:crwdne118635:0
crwdns118637:0crwdne118637:0
import org.spongepowered.api.Sponge;
import org.spongepowered.api.data.value.ValueFactory;
import org.spongepowered.api.data.value.mutable.Value;
import org.spongepowered.cookbook.myhomes.data.home.Home;
import org.spongepowered.cookbook.myhomes.data.Keys;
@Override
protected Value<Home> defaultHome() {
    return Sponge.getRegistry().getValueFactory()
            .createValue(Keys.DEFAULT_HOME, getValue(), null);
}
crwdns118639:0crwdne118639:0
crwdns118641:0:javadoc:crwdnd118641:0:javadoc:crwdne118641:0
crwdns118643:0:javadoc:crwdne118643:0
crwdns118645:0crwdne118645:0
import org.spongepowered.api.data.DataQuery;
import org.spongepowered.api.data.key.Key;
import org.spongepowered.api.data.key.KeyFactory;
import org.spongepowered.api.data.value.mutable.Value;
import org.spongepowered.api.data.value.mutable.Value;
import com.google.common.reflect.TypeToken;
import org.spongepowered.cookbook.myhomes.data.home.Home;
public static final Key<Value<Home>> DEFAULT_HOME = KeyFactory.makeSingleKey(
        TypeToken.of(Home.class),
        new TypeToken<Value<Home>>() {},
        DataQuery.of("DefaultHome"), "myhomes:default_home", "Default Home");
Note
crwdns118647:0:javadoc:crwdnd118647:0:javadoc:crwdne118647:0
crwdns118649:0crwdne118649:0
- crwdns118651:0crwdne118651:0 
- crwdns118653:0crwdne118653:0 
crwdns118655:0crwdne118655:0
crwdns118657:0:doc:crwdnd118657:0:javadoc:crwdnd118657:0:javadoc:crwdnd118657:0:javadoc:crwdnd118657:0:ref:crwdne118657:0
Note
crwdns118659:0crwdne118659:0
crwdns118661:0crwdne118661:0
import org.spongepowered.api.data.DataContainer;
import org.spongepowered.cookbook.myhomes.data.Keys;
@Override
public DataContainer toContainer() {
    DataContainer container = super.toContainer();
    // This is the simplest, but use whatever structure you want!
    container.set(Keys.DEFAULT_HOME.getQuery(), this.defaultHome);
    container.set(Keys.HOMES, this.homes);
    return container;
}
crwdns118663:0crwdne118663:0
crwdns118665:0crwdne118665:0
crwdns118667:0:javadoc:crwdnd118667:0:javadoc:crwdne118667:0
Note
crwdns118669:0:javadoc:crwdne118669:0
import org.spongepowered.api.event.game.state.GameInitializationEvent;
import org.spongepowered.api.data.DataRegistration;
import org.example.MyCustomData;
import org.example.ImmutableCustomData;
import org.example.CustomDataBuilder;
@Listener
public void onInit(GameInitializationEvent event) {
  DataRegistration.builder()
      .dataClass(MyCustomData.class)
      .immutableClass(ImmutableCustomData.class)
      .builder(new CustomDataBuilder())
      .manipulatorId("my-custom")
      .dataName("My Custom")
      .build();
}
Warning
crwdns118671:0:javadoc:crwdne118671:0
crwdns118673:0crwdne118673:0
crwdns118675:0:javadoc:crwdne118675:0
crwdns118677:0crwdne118677:0
- crwdns118679:0crwdne118679:0 
- crwdns118681:0:javadoc:crwdne118681:0 
- crwdns118683:0crwdne118683:0 
- crwdns118685:0crwdne118685:0 
- crwdns118687:0crwdne118687:0 
- crwdns118689:0crwdne118689:0 
- crwdns118691:0crwdne118691:0 
crwdns118693:0crwdne118693:0
Tip
crwdns118695:0crwdne118695:0
crwdns118697:0crwdne118697:0
crwdns118699:0crwdne118699:0
- crwdns118701:0crwdne118701:0 
- crwdns118703:0crwdne118703:0 
crwdns118705:0:javadoc:crwdnd118705:0:javadoc:crwdne118705:0
Note
crwdns118707:0crwdne118707:0
crwdns118709:0crwdne118709:0
crwdns118711:0crwdne118711:0
import org.spongepowered.api.data.DataHolder;
import org.spongepowered.api.data.merge.MergeFunction;
import org.spongepowered.cookbook.myhomes.data.friends.FriendsData;
import java.util.Optional;
@Override
public Optional<FriendsData> fill(DataHolder dataHolder, MergeFunction overlap) {
    FriendsData merged = overlap.merge(this, dataHolder.get(FriendsData.class).orElse(null));
    setValue(merged.friends().get());
    return Optional.of(this);
}
crwdns118713:0crwdne118713:0
import org.spongepowered.api.data.DataContainer;
import org.spongepowered.api.data.DataQuery;
import org.spongepowered.cookbook.myhomes.data.Keys;
import org.spongepowered.cookbook.myhomes.data.friends.FriendsData;
import org.spongepowered.cookbook.myhomes.data.friends.ImmutableFriendsData;
import com.google.common.collect.Maps;
import java.util.Optional;
import java.util.UUID;
@Override
public Optional<FriendsData> from(DataContainer container) {
    if(container.contains(Keys.FRIENDS)) {
        List<UUID> friends = container.getObjectList(Keys.FRIENDS.getQuery(), UUID.class).get();
        return Optional.of(setValue(friends));
    }
    return Optional.empty();
}
crwdns118715:0crwdne118715:0
import org.spongepowered.cookbook.myhomes.data.friends.FriendsData;
@Override
public FriendsData copy() {
    return new FriendsDataImpl(getValue());
}
crwdns118717:0crwdne118717:0
crwdns118719:0crwdne118719:0
crwdns118721:0crwdne118721:0
crwdns118723:0crwdne118723:0
crwdns118725:0crwdne118725:0
crwdns118727:0:javadoc:crwdne118727:0
crwdns118729:0crwdne118729:0
crwdns118731:0crwdne118731:0
crwdns118733:0:doc:crwdnd118733:0:javadoc:crwdnd118733:0:javadoc:crwdne118733:0
crwdns118735:0crwdne118735:0
- crwdns118737:0crwdne118737:0 
- crwdns118739:0crwdne118739:0 
- crwdns118741:0crwdne118741:0 
crwdns118743:0crwdne118743:0
crwdns118745:0crwdne118745:0
import org.spongepowered.cookbook.myhomes.data.Keys
// registerGetters() for immutable implementation
@Override
protected void registerGettersAndSetters() {
    registerKeyValue(Keys.DEFAULT_HOME, this::defaultHome);
    registerKeyValue(Keys.HOMES, this::homes);
    registerFieldGetter(Keys.DEFAULT_HOME, this::getDefaultHome);
    registerFieldGetter(Keys.HOMES, this::getHomes);
    // Only on mutable implementation
    registerFieldSetter(Keys.DEFAULT_HOME, this::setDefaultHome);
    registerFieldSetter(Keys.HOMES, this::setHomes);
}
crwdns118747:0crwdne118747:0