diff --git a/src/main/java/fr/sushi/charmsnfabrics/common/CnFRegistries.java b/src/main/java/fr/sushi/charmsnfabrics/common/CnFRegistries.java index 33e439b..0fd89b3 100644 --- a/src/main/java/fr/sushi/charmsnfabrics/common/CnFRegistries.java +++ b/src/main/java/fr/sushi/charmsnfabrics/common/CnFRegistries.java @@ -2,8 +2,10 @@ package fr.sushi.charmsnfabrics.common; import fr.sushi.charmsnfabrics.CharmsAndFabrics; import fr.sushi.charmsnfabrics.common.block.FloralWorkbench; +import fr.sushi.charmsnfabrics.common.data.SavedColors; import fr.sushi.charmsnfabrics.common.entities.block.FloralWorkbenchBlockEntity; import fr.sushi.charmsnfabrics.common.item.FlowerCrown; +import net.minecraft.core.component.DataComponentType; import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceKey; @@ -22,6 +24,7 @@ import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredItem; import net.neoforged.neoforge.registries.DeferredRegister; +import java.util.List; import java.util.Set; import java.util.function.Supplier; @@ -33,8 +36,11 @@ public class CnFRegistries DeferredRegister.createItems(CharmsAndFabrics.MODID); public static final DeferredItem FLOWER_CROWN = ITEMS.registerItem("flower_crown", - (properties) -> new FlowerCrown( - properties.stacksTo(1))); + (properties) -> new FlowerCrown(properties.stacksTo(1) + .component( + DataComponents.SAVED_FLOWERS, + new SavedColors( + List.of())))); /* BlockItems */ public static final DeferredItem FLORAL_WORKBENCH = ITEMS.registerItem("floral_workbench", @@ -100,11 +106,26 @@ public class CnFRegistries Set.of(Blocks.FLORAL_WORKBENCH.get()))); } + public static class DataComponents + { + public static final DeferredRegister.DataComponents COMPONENT_TYPES = + DeferredRegister.createDataComponents( + Registries.DATA_COMPONENT_TYPE, CharmsAndFabrics.MODID); + + public static final Supplier> + SAVED_FLOWERS = + COMPONENT_TYPES.registerComponentType("saved_flowers", + builder -> builder.persistent(SavedColors.CODEC) + .networkSynchronized( + SavedColors.STREAM_CODEC)); + } + public static void register(IEventBus bus) { Items.ITEMS.register(bus); Blocks.BLOCKS.register(bus); Tabs.CREATIVE_MODE_TABS.register(bus); Entities.BLOCK_ENTITY_TYPES.register(bus); + DataComponents.COMPONENT_TYPES.register(bus); } } diff --git a/src/main/java/fr/sushi/charmsnfabrics/common/data/SavedColors.java b/src/main/java/fr/sushi/charmsnfabrics/common/data/SavedColors.java new file mode 100644 index 0000000..5eb10b5 --- /dev/null +++ b/src/main/java/fr/sushi/charmsnfabrics/common/data/SavedColors.java @@ -0,0 +1,24 @@ +package fr.sushi.charmsnfabrics.common.data; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import io.netty.buffer.ByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.world.item.DyeColor; + +import java.util.List; + +public record SavedColors(List flowers) +{ + public static final Codec CODEC = RecordCodecBuilder.create( + instance -> instance + .group(DyeColor.CODEC.listOf().fieldOf("flowers") + .forGetter(SavedColors::flowers)) + .apply(instance, SavedColors::new)); + + public static final StreamCodec STREAM_CODEC = + StreamCodec.composite( + DyeColor.STREAM_CODEC.apply(ByteBufCodecs.list(256)), + SavedColors::flowers, SavedColors::new); +}