diff --git a/gradle.properties b/gradle.properties index 4cf77839d5..499bd97246 100644 --- a/gradle.properties +++ b/gradle.properties @@ -25,7 +25,7 @@ registrate_version = MC1.21-1.3.0+62 flywheel_minecraft_version = 1.21.1 flywheel_version = 1.0.0-beta-6 flywheel_version_range = [1.0.0-alpha,2.0) -ponder_version = 1.0.32 +ponder_version = 1.0.34 jei_minecraft_version = 1.21.1 jei_version = 19.21.0.247 curios_minecraft_version = 1.21.1 diff --git a/src/main/java/com/simibubi/create/AllDataComponents.java b/src/main/java/com/simibubi/create/AllDataComponents.java index 4b2ad1505f..476a468262 100644 --- a/src/main/java/com/simibubi/create/AllDataComponents.java +++ b/src/main/java/com/simibubi/create/AllDataComponents.java @@ -129,10 +129,9 @@ public class AllDataComponents { builder -> builder.persistent(AttributeFilterWhitelistMode.CODEC).networkSynchronized(AttributeFilterWhitelistMode.STREAM_CODEC) ); - // TODO - Make a stream codec for this public static final DataComponentType> ATTRIBUTE_FILTER_MATCHED_ATTRIBUTES = register( "attribute_filter_matched_attributes", - builder -> builder.persistent(ItemAttributeEntry.CODEC.listOf()) + builder -> builder.persistent(ItemAttributeEntry.CODEC.listOf()).networkSynchronized(CatnipStreamCodecBuilders.list(ItemAttributeEntry.STREAM_CODEC)) ); public static final DataComponentType CLIPBOARD_TYPE = register( diff --git a/src/main/java/com/simibubi/create/content/contraptions/MountedStorageSyncPacket.java b/src/main/java/com/simibubi/create/content/contraptions/MountedStorageSyncPacket.java index 4df5577f00..dbc31e3a06 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/MountedStorageSyncPacket.java +++ b/src/main/java/com/simibubi/create/content/contraptions/MountedStorageSyncPacket.java @@ -11,14 +11,13 @@ import net.createmod.catnip.net.base.ClientboundPacketPayload; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; -import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.entity.Entity; public record MountedStorageSyncPacket(int contraptionId, Map items, Map fluids) implements ClientboundPacketPayload { - public static StreamCodec STREAM_CODEC = StreamCodec.composite( + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( ByteBufCodecs.INT, MountedStorageSyncPacket::contraptionId, ByteBufCodecs.map(HashMap::new, BlockPos.STREAM_CODEC, MountedItemStorage.STREAM_CODEC), MountedStorageSyncPacket::items, ByteBufCodecs.map(HashMap::new, BlockPos.STREAM_CODEC, MountedFluidStorage.STREAM_CODEC), MountedStorageSyncPacket::fluids, diff --git a/src/main/java/com/simibubi/create/content/fluids/particle/FluidParticleData.java b/src/main/java/com/simibubi/create/content/fluids/particle/FluidParticleData.java index 7108b13e81..ac4632b253 100644 --- a/src/main/java/com/simibubi/create/content/fluids/particle/FluidParticleData.java +++ b/src/main/java/com/simibubi/create/content/fluids/particle/FluidParticleData.java @@ -5,7 +5,6 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import com.simibubi.create.AllParticleTypes; import com.simibubi.create.foundation.particle.ICustomParticleData; -import net.createmod.catnip.platform.CatnipServices; import net.minecraft.client.particle.ParticleProvider; import net.minecraft.core.particles.ParticleOptions; import net.minecraft.core.particles.ParticleType; @@ -47,30 +46,25 @@ public class FluidParticleData implements ParticleOptions, ICustomParticleData p.fluid)) .apply(i, fs -> new FluidParticleData(AllParticleTypes.FLUID_PARTICLE.get(), fs))); - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - FluidStack.STREAM_CODEC, - p -> p.fluid, - fs -> new FluidParticleData(AllParticleTypes.FLUID_PARTICLE.get(), fs)); + public static final StreamCodec STREAM_CODEC = FluidStack.STREAM_CODEC + .map(fs -> new FluidParticleData(AllParticleTypes.FLUID_PARTICLE.get(), fs), p -> p.fluid); + public static final MapCodec BASIN_CODEC = RecordCodecBuilder.mapCodec(i -> i .group(FluidStack.CODEC.fieldOf("fluid") .forGetter(p -> p.fluid)) .apply(i, fs -> new FluidParticleData(AllParticleTypes.BASIN_FLUID.get(), fs))); - public static final StreamCodec BASIN_STREAM_CODEC = StreamCodec.composite( - FluidStack.STREAM_CODEC, - p -> p.fluid, - fs -> new FluidParticleData(AllParticleTypes.BASIN_FLUID.get(), fs)); + public static final StreamCodec BASIN_STREAM_CODEC = FluidStack.STREAM_CODEC + .map(fs -> new FluidParticleData(AllParticleTypes.BASIN_FLUID.get(), fs), p -> p.fluid); public static final MapCodec DRIP_CODEC = RecordCodecBuilder.mapCodec(i -> i .group(FluidStack.CODEC.fieldOf("fluid") .forGetter(p -> p.fluid)) .apply(i, fs -> new FluidParticleData(AllParticleTypes.FLUID_DRIP.get(), fs))); - public static final StreamCodec DRIP_STREAM_CODEC = StreamCodec.composite( - FluidStack.STREAM_CODEC, - p -> p.fluid, - fs -> new FluidParticleData(AllParticleTypes.FLUID_DRIP.get(), fs)); + public static final StreamCodec DRIP_STREAM_CODEC = FluidStack.STREAM_CODEC + .map(fs -> new FluidParticleData(AllParticleTypes.FLUID_DRIP.get(), fs), p -> p.fluid); @Override public MapCodec getCodec(ParticleType type) { diff --git a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamJetParticleData.java b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamJetParticleData.java index d67c00aa98..e05012f562 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamJetParticleData.java +++ b/src/main/java/com/simibubi/create/content/kinetics/steamEngine/SteamJetParticleData.java @@ -12,8 +12,8 @@ import net.minecraft.core.particles.ParticleOptions; import net.minecraft.core.particles.ParticleType; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; - import net.minecraft.network.codec.StreamCodec; + import net.neoforged.api.distmarker.Dist; import net.neoforged.api.distmarker.OnlyIn; @@ -24,11 +24,8 @@ public class SteamJetParticleData implements ParticleOptions, ICustomParticleDat .forGetter(p -> p.speed)) .apply(i, SteamJetParticleData::new)); - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ByteBufCodecs.FLOAT, - p -> p.speed, - SteamJetParticleData::new - ); + public static final StreamCodec STREAM_CODEC = ByteBufCodecs.FLOAT.map( + SteamJetParticleData::new, p -> p.speed); float speed; diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/AllItemAttributeTypes.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/AllItemAttributeTypes.java index 65db9fd00b..3d6fccb4f9 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/AllItemAttributeTypes.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/AllItemAttributeTypes.java @@ -20,6 +20,8 @@ import com.simibubi.create.content.logistics.item.filter.attribute.attributes.In import com.simibubi.create.content.logistics.item.filter.attribute.attributes.ItemNameAttribute; import com.simibubi.create.content.logistics.item.filter.attribute.attributes.ShulkerFillLevelAttribute; +import it.unimi.dsi.fastutil.objects.Object2IntMap; +import net.minecraft.core.Holder; import net.minecraft.core.component.DataComponents; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.item.BlockItem; @@ -28,6 +30,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Recipe; import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.item.crafting.SingleRecipeInput; +import net.minecraft.world.item.enchantment.Enchantment; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.ComposterBlock; import net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity; @@ -83,13 +86,13 @@ public class AllItemAttributeTypes { .isPresent(); } - // TODO - Move away from stream() private static boolean maxEnchanted(ItemStack s) { - return s.getTagEnchantments() - .entrySet() - .stream() - .anyMatch(e -> e.getKey().value() - .getMaxLevel() <= e.getIntValue()); + for (Object2IntMap.Entry> entry : s.getTagEnchantments().entrySet()) { + if (entry.getKey().value().getMaxLevel() <= entry.getIntValue()) + return true; + } + + return false; } private static ItemAttributeType singleton(String id, Predicate predicate) { diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ItemAttribute.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ItemAttribute.java index 4225a9fa55..dd7b614d1d 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ItemAttribute.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ItemAttribute.java @@ -8,12 +8,16 @@ import org.jetbrains.annotations.Nullable; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.simibubi.create.AllRegistries; +import com.simibubi.create.AllRegistries.Keys; import com.simibubi.create.foundation.utility.CreateLang; import net.createmod.catnip.codecs.CatnipCodecUtils; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; @@ -22,6 +26,7 @@ import net.neoforged.api.distmarker.OnlyIn; public interface ItemAttribute { Codec CODEC = AllRegistries.ITEM_ATTRIBUTE_TYPES.byNameCodec().dispatch(ItemAttribute::getType, ItemAttributeType::codec); + StreamCodec STREAM_CODEC = ByteBufCodecs.registry(Keys.ITEM_ATTRIBUTE_TYPES).dispatch(ItemAttribute::getType, ItemAttributeType::streamCodec); static CompoundTag saveStatic(ItemAttribute attribute, HolderLookup.Provider registries) { CompoundTag nbt = new CompoundTag(); @@ -59,9 +64,15 @@ public interface ItemAttribute { } record ItemAttributeEntry(ItemAttribute attribute, boolean inverted) { - public static final Codec CODEC = RecordCodecBuilder.create(i -> i.group( - ItemAttribute.CODEC.fieldOf("attribute").forGetter(ItemAttribute.ItemAttributeEntry::attribute), - Codec.BOOL.fieldOf("inverted").forGetter(ItemAttribute.ItemAttributeEntry::inverted) - ).apply(i, ItemAttribute.ItemAttributeEntry::new)); + public static final Codec CODEC = RecordCodecBuilder.create(i -> i.group( + ItemAttribute.CODEC.fieldOf("attribute").forGetter(ItemAttributeEntry::attribute), + Codec.BOOL.fieldOf("inverted").forGetter(ItemAttributeEntry::inverted) + ).apply(i, ItemAttributeEntry::new)); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ItemAttribute.STREAM_CODEC, ItemAttributeEntry::attribute, + ByteBufCodecs.BOOL, ItemAttributeEntry::inverted, + ItemAttributeEntry::new + ); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ItemAttributeType.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ItemAttributeType.java index f6c3156e16..ea59baf983 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ItemAttributeType.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ItemAttributeType.java @@ -3,8 +3,11 @@ package com.simibubi.create.content.logistics.item.filter.attribute; import java.util.List; import org.jetbrains.annotations.NotNull; + import com.mojang.serialization.MapCodec; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; @@ -14,4 +17,6 @@ public interface ItemAttributeType { List getAllAttributes(ItemStack stack, Level level); MapCodec codec(); + + StreamCodec streamCodec(); } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/AddedByAttribute.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/AddedByAttribute.java index d9fb475546..10afcde4bd 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/AddedByAttribute.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/AddedByAttribute.java @@ -13,8 +13,13 @@ import com.simibubi.create.content.logistics.item.filter.attribute.AllItemAttrib import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttribute; import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttributeType; +import io.netty.buffer.ByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; + import net.neoforged.fml.ModContainer; import net.neoforged.fml.ModList; import net.neoforged.neoforgespi.language.IModInfo; @@ -24,6 +29,9 @@ public record AddedByAttribute(String modId) implements ItemAttribute { .xmap(AddedByAttribute::new, AddedByAttribute::modId) .fieldOf("value"); + public static final StreamCodec STREAM_CODEC = ByteBufCodecs.STRING_UTF8 + .map(AddedByAttribute::new, AddedByAttribute::modId); + @Override public boolean appliesTo(ItemStack stack, Level world) { return modId.equals(stack.getItem() @@ -67,5 +75,10 @@ public record AddedByAttribute(String modId) implements ItemAttribute { public MapCodec codec() { return CODEC; } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } } } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/BookAuthorAttribute.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/BookAuthorAttribute.java index e66cc0d1c0..859bac9ce2 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/BookAuthorAttribute.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/BookAuthorAttribute.java @@ -11,7 +11,11 @@ import com.simibubi.create.content.logistics.item.filter.attribute.AllItemAttrib import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttribute; import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttributeType; +import io.netty.buffer.ByteBuf; import net.minecraft.core.component.DataComponents; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; @@ -20,6 +24,9 @@ public record BookAuthorAttribute(String author) implements ItemAttribute { .xmap(BookAuthorAttribute::new, BookAuthorAttribute::author) .fieldOf("value"); + public static final StreamCodec STREAM_CODEC = ByteBufCodecs.STRING_UTF8 + .map(BookAuthorAttribute::new, BookAuthorAttribute::author); + private static String extractAuthor(ItemStack stack) { if (stack.has(DataComponents.WRITTEN_BOOK_CONTENT)) { return stack.get(DataComponents.WRITTEN_BOOK_CONTENT).author(); @@ -70,5 +77,10 @@ public record BookAuthorAttribute(String author) implements ItemAttribute { public MapCodec codec() { return CODEC; } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } } } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/BookCopyAttribute.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/BookCopyAttribute.java index 941bbe0e18..9b370c081f 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/BookCopyAttribute.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/BookCopyAttribute.java @@ -10,10 +10,13 @@ import com.simibubi.create.content.logistics.item.filter.attribute.AllItemAttrib import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttribute; import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttributeType; +import io.netty.buffer.ByteBuf; import net.minecraft.core.component.DataComponents; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.util.ExtraCodecs; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.WrittenBookItem; import net.minecraft.world.level.Level; public record BookCopyAttribute(int generation) implements ItemAttribute { @@ -21,6 +24,9 @@ public record BookCopyAttribute(int generation) implements ItemAttribute { .xmap(BookCopyAttribute::new, BookCopyAttribute::generation) .fieldOf("value"); + public static final StreamCodec STREAM_CODEC = ByteBufCodecs.INT + .map(BookCopyAttribute::new, BookCopyAttribute::generation); + private static int extractGeneration(ItemStack stack) { if (stack.has(DataComponents.WRITTEN_BOOK_CONTENT)) { return stack.get(DataComponents.WRITTEN_BOOK_CONTENT).generation(); @@ -71,5 +77,10 @@ public record BookCopyAttribute(int generation) implements ItemAttribute { public MapCodec codec() { return CODEC; } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } } } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/ColorAttribute.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/ColorAttribute.java index eb9a4670fd..4c00afc878 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/ColorAttribute.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/ColorAttribute.java @@ -15,9 +15,12 @@ import com.simibubi.create.content.logistics.item.filter.attribute.AllItemAttrib import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttribute; import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttributeType; +import io.netty.buffer.ByteBuf; import net.createmod.catnip.registry.RegisteredObjectsHelper; import net.minecraft.client.resources.language.I18n; import net.minecraft.core.component.DataComponents; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.FireworkRocketItem; import net.minecraft.world.item.FireworkStarItem; @@ -30,6 +33,9 @@ public record ColorAttribute(DyeColor color) implements ItemAttribute { .xmap(ColorAttribute::new, ColorAttribute::color) .fieldOf("value"); + public static final StreamCodec STREAM_CODEC = DyeColor.STREAM_CODEC + .map(ColorAttribute::new, ColorAttribute::color); + private static Collection findMatchingDyeColors(ItemStack stack) { DyeColor color = DyeColor.getColor(stack); if (color != null) @@ -98,5 +104,10 @@ public record ColorAttribute(DyeColor color) implements ItemAttribute { public MapCodec codec() { return CODEC; } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } } } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/EnchantAttribute.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/EnchantAttribute.java index 51368135cd..02990ed0a6 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/EnchantAttribute.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/EnchantAttribute.java @@ -13,6 +13,8 @@ import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttribute import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttributeType; import net.minecraft.core.Holder; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.enchantment.Enchantment; import net.minecraft.world.item.enchantment.EnchantmentHelper; @@ -23,6 +25,9 @@ public record EnchantAttribute(@Nullable Holder enchantment) implem .xmap(EnchantAttribute::new, EnchantAttribute::enchantment) .fieldOf("value"); + public static final StreamCodec STREAM_CODEC = Enchantment.STREAM_CODEC + .map(EnchantAttribute::new, EnchantAttribute::enchantment); + @Override public boolean appliesTo(ItemStack itemStack, Level level) { return EnchantmentHelper.getEnchantmentsForCrafting(itemStack).keySet().contains(enchantment); @@ -67,5 +72,10 @@ public record EnchantAttribute(@Nullable Holder enchantment) implem public MapCodec codec() { return CODEC; } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } } } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/FluidContentsAttribute.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/FluidContentsAttribute.java index 2fd54e2731..b829ae749c 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/FluidContentsAttribute.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/FluidContentsAttribute.java @@ -12,10 +12,15 @@ import com.simibubi.create.content.logistics.item.filter.attribute.AllItemAttrib import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttribute; import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttributeType; +import net.createmod.catnip.codecs.stream.CatnipStreamCodecBuilders; +import net.createmod.catnip.codecs.stream.CatnipStreamCodecs; import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.material.Fluid; + import net.neoforged.neoforge.capabilities.Capabilities; import net.neoforged.neoforge.fluids.capability.IFluidHandlerItem; @@ -24,6 +29,9 @@ public record FluidContentsAttribute(@Nullable Fluid fluid) implements ItemAttri .xmap(FluidContentsAttribute::new, FluidContentsAttribute::fluid) .fieldOf("value"); + public static final StreamCodec STREAM_CODEC = CatnipStreamCodecBuilders.nullable(CatnipStreamCodecs.FLUID) + .map(FluidContentsAttribute::new, FluidContentsAttribute::fluid); + private static List extractFluids(ItemStack stack) { List fluids = new ArrayList<>(); @@ -82,5 +90,10 @@ public record FluidContentsAttribute(@Nullable Fluid fluid) implements ItemAttri public MapCodec codec() { return CODEC; } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } } } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/InItemGroupAttribute.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/InItemGroupAttribute.java index 1bc23cdff2..b9694e60c9 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/InItemGroupAttribute.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/InItemGroupAttribute.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Objects; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import com.mojang.serialization.MapCodec; import com.simibubi.create.Create; @@ -12,7 +13,12 @@ import com.simibubi.create.content.logistics.item.filter.attribute.AllItemAttrib import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttribute; import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttributeType; +import net.createmod.catnip.codecs.stream.CatnipStreamCodecBuilders; import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.CreativeModeTabs; import net.minecraft.world.item.ItemStack; @@ -23,9 +29,13 @@ public class InItemGroupAttribute implements ItemAttribute { .xmap(InItemGroupAttribute::new, i -> i.group) .fieldOf("value"); + public static final StreamCodec STREAM_CODEC = CatnipStreamCodecBuilders.nullable(ByteBufCodecs.registry(Registries.CREATIVE_MODE_TAB)) + .map(InItemGroupAttribute::new, i -> i.group); + + @Nullable private CreativeModeTab group; - public InItemGroupAttribute(CreativeModeTab group) { + public InItemGroupAttribute(@Nullable CreativeModeTab group) { this.group = group; } @@ -109,5 +119,10 @@ public class InItemGroupAttribute implements ItemAttribute { public MapCodec codec() { return CODEC; } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } } } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/InTagAttribute.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/InTagAttribute.java index 6b112ebd73..867b0aeb19 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/InTagAttribute.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/InTagAttribute.java @@ -3,9 +3,6 @@ package com.simibubi.create.content.logistics.item.filter.attribute.attributes; import java.util.List; import java.util.stream.Collectors; -import net.createmod.catnip.nbt.NBTHelper; - -import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import com.mojang.serialization.MapCodec; @@ -13,7 +10,11 @@ import com.simibubi.create.content.logistics.item.filter.attribute.AllItemAttrib import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttribute; import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttributeType; +import io.netty.buffer.ByteBuf; +import net.createmod.catnip.codecs.stream.CatnipStreamCodecBuilders; import net.minecraft.core.registries.Registries; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.tags.ItemTags; import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; @@ -25,6 +26,9 @@ public record InTagAttribute(TagKey tag) implements ItemAttribute { .xmap(InTagAttribute::new, InTagAttribute::tag) .fieldOf("value"); + public static final StreamCodec STREAM_CODEC = CatnipStreamCodecBuilders.tagKey(Registries.ITEM) + .map(InTagAttribute::new, InTagAttribute::tag); + @Override public boolean appliesTo(ItemStack stack, Level level) { return stack.is(tag); @@ -62,5 +66,10 @@ public record InTagAttribute(TagKey tag) implements ItemAttribute { public MapCodec codec() { return CODEC; } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } } } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/ItemNameAttribute.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/ItemNameAttribute.java index 1d5596c300..4b6fa05e7e 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/ItemNameAttribute.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/ItemNameAttribute.java @@ -12,9 +12,13 @@ import com.simibubi.create.content.logistics.item.filter.attribute.AllItemAttrib import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttribute; import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttributeType; +import io.netty.buffer.ByteBuf; import net.minecraft.core.RegistryAccess; import net.minecraft.core.component.DataComponents; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; @@ -23,6 +27,9 @@ public record ItemNameAttribute(String itemName) implements ItemAttribute { .xmap(ItemNameAttribute::new, ItemNameAttribute::itemName) .fieldOf("value"); + public static final StreamCodec STREAM_CODEC = ByteBufCodecs.STRING_UTF8 + .map(ItemNameAttribute::new, ItemNameAttribute::itemName); + private static String extractCustomName(ItemStack stack) { if (stack.has(DataComponents.CUSTOM_NAME)) { try { @@ -78,5 +85,10 @@ public record ItemNameAttribute(String itemName) implements ItemAttribute { public MapCodec codec() { return CODEC; } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } } } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/ShulkerFillLevelAttribute.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/ShulkerFillLevelAttribute.java index 5100c748d8..c63b1adafa 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/ShulkerFillLevelAttribute.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/ShulkerFillLevelAttribute.java @@ -15,9 +15,13 @@ import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttribute import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttributeType; import com.simibubi.create.foundation.utility.CreateLang; +import io.netty.buffer.ByteBuf; +import net.createmod.catnip.codecs.stream.CatnipStreamCodecBuilders; import net.createmod.catnip.lang.Lang; import net.minecraft.core.NonNullList; import net.minecraft.core.component.DataComponents; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.util.StringRepresentable; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.component.ItemContainerContents; @@ -30,6 +34,9 @@ public record ShulkerFillLevelAttribute(ShulkerLevels levels) implements ItemAtt .xmap(ShulkerFillLevelAttribute::new, ShulkerFillLevelAttribute::levels) .fieldOf("value"); + public static final StreamCodec STREAM_CODEC = ShulkerLevels.STREAM_CODEC + .map(ShulkerFillLevelAttribute::new, ShulkerFillLevelAttribute::levels); + @Override public boolean appliesTo(ItemStack stack, Level level) { return levels != null && levels.canApply(stack); @@ -59,6 +66,7 @@ public record ShulkerFillLevelAttribute(ShulkerLevels levels) implements ItemAtt FULL("full", amount -> amount == Integer.MAX_VALUE); public static final Codec CODEC = StringRepresentable.fromValues(ShulkerLevels::values); + public static final StreamCodec STREAM_CODEC = CatnipStreamCodecBuilders.ofEnum(ShulkerLevels.class); private final Predicate requiredSize; private final String key; @@ -127,5 +135,10 @@ public record ShulkerFillLevelAttribute(ShulkerLevels levels) implements ItemAtt public MapCodec codec() { return CODEC; } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } } } diff --git a/src/main/java/com/simibubi/create/content/logistics/packagePort/PackagePortPlacementPacket.java b/src/main/java/com/simibubi/create/content/logistics/packagePort/PackagePortPlacementPacket.java index c9325fe64d..e62c14f1fe 100644 --- a/src/main/java/com/simibubi/create/content/logistics/packagePort/PackagePortPlacementPacket.java +++ b/src/main/java/com/simibubi/create/content/logistics/packagePort/PackagePortPlacementPacket.java @@ -52,10 +52,8 @@ public record PackagePortPlacementPacket(PackagePortTarget target, BlockPos pos) } public record ClientBoundRequest(BlockPos pos) implements ClientboundPacketPayload { - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - BlockPos.STREAM_CODEC, ClientBoundRequest::pos, - ClientBoundRequest::new - ); + public static final StreamCodec STREAM_CODEC = BlockPos.STREAM_CODEC + .map(ClientBoundRequest::new, ClientBoundRequest::pos); @Override public PacketTypeProvider getTypeProvider() { diff --git a/src/main/java/com/simibubi/create/content/logistics/packagePort/PackagePortTarget.java b/src/main/java/com/simibubi/create/content/logistics/packagePort/PackagePortTarget.java index bade98b3d8..9f41c25af3 100644 --- a/src/main/java/com/simibubi/create/content/logistics/packagePort/PackagePortTarget.java +++ b/src/main/java/com/simibubi/create/content/logistics/packagePort/PackagePortTarget.java @@ -5,26 +5,23 @@ import java.util.Optional; import javax.annotation.Nullable; -import com.simibubi.create.AllRegistries; - -import com.simibubi.create.AllRegistries.Keys; - -import io.netty.buffer.ByteBuf; -import net.minecraft.network.RegistryFriendlyByteBuf; - import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllRegistries; +import com.simibubi.create.AllRegistries.Keys; import com.simibubi.create.content.kinetics.chainConveyor.ChainConveyorBlockEntity; import com.simibubi.create.content.kinetics.chainConveyor.ChainConveyorBlockEntity.ConnectedPort; import com.simibubi.create.content.kinetics.chainConveyor.ChainConveyorBlockEntity.ConnectionStats; import com.simibubi.create.content.kinetics.chainConveyor.ChainConveyorPackage; import com.simibubi.create.content.trains.station.StationBlockEntity; +import io.netty.buffer.ByteBuf; import net.createmod.catnip.codecs.stream.CatnipStreamCodecBuilders; import net.minecraft.core.BlockPos; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.item.ItemStack; @@ -210,10 +207,8 @@ public abstract class PackagePortTarget { BlockPos.CODEC.fieldOf("relative_pos").forGetter(i -> i.relativePos) ).apply(instance, TrainStationFrogportTarget::new)); - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - BlockPos.STREAM_CODEC, i -> i.relativePos, - TrainStationFrogportTarget::new - ); + public static final StreamCodec STREAM_CODEC = BlockPos.STREAM_CODEC + .map(TrainStationFrogportTarget::new, i -> i.relativePos); public TrainStationFrogportTarget(BlockPos relativePos) { super(relativePos); diff --git a/src/main/java/com/simibubi/create/content/logistics/packagerLink/WiFiEffectPacket.java b/src/main/java/com/simibubi/create/content/logistics/packagerLink/WiFiEffectPacket.java index 38d0283138..aa7243179f 100644 --- a/src/main/java/com/simibubi/create/content/logistics/packagerLink/WiFiEffectPacket.java +++ b/src/main/java/com/simibubi/create/content/logistics/packagerLink/WiFiEffectPacket.java @@ -18,10 +18,8 @@ import net.neoforged.api.distmarker.Dist; import net.neoforged.api.distmarker.OnlyIn; public record WiFiEffectPacket(BlockPos pos) implements ClientboundPacketPayload { - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - BlockPos.STREAM_CODEC, WiFiEffectPacket::pos, - WiFiEffectPacket::new - ); + public static final StreamCodec STREAM_CODEC = BlockPos.STREAM_CODEC + .map(WiFiEffectPacket::new, WiFiEffectPacket::pos); @Override public PacketTypeProvider getTypeProvider() { diff --git a/src/main/java/com/simibubi/create/content/logistics/stockTicker/LogisticalStockRequestPacket.java b/src/main/java/com/simibubi/create/content/logistics/stockTicker/LogisticalStockRequestPacket.java index c39edb35d7..3e122b71a5 100644 --- a/src/main/java/com/simibubi/create/content/logistics/stockTicker/LogisticalStockRequestPacket.java +++ b/src/main/java/com/simibubi/create/content/logistics/stockTicker/LogisticalStockRequestPacket.java @@ -9,10 +9,8 @@ import net.minecraft.network.codec.StreamCodec; import net.minecraft.server.level.ServerPlayer; public class LogisticalStockRequestPacket extends BlockEntityConfigurationPacket { - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - BlockPos.STREAM_CODEC, packet -> packet.pos, - LogisticalStockRequestPacket::new - ); + public static final StreamCodec STREAM_CODEC = BlockPos.STREAM_CODEC + .map(LogisticalStockRequestPacket::new, packet -> packet.pos); public LogisticalStockRequestPacket(BlockPos pos) { super(pos); diff --git a/src/main/java/com/simibubi/create/content/logistics/stockTicker/PackageOrder.java b/src/main/java/com/simibubi/create/content/logistics/stockTicker/PackageOrder.java index 39b5ceed63..93cda9eaf2 100644 --- a/src/main/java/com/simibubi/create/content/logistics/stockTicker/PackageOrder.java +++ b/src/main/java/com/simibubi/create/content/logistics/stockTicker/PackageOrder.java @@ -16,10 +16,8 @@ public record PackageOrder(List stacks) { Codec.list(BigItemStack.CODEC).fieldOf("entries").forGetter(PackageOrder::stacks) ).apply(instance, PackageOrder::new)); - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - CatnipStreamCodecBuilders.list(BigItemStack.STREAM_CODEC), PackageOrder::stacks, - PackageOrder::new - ); + public static final StreamCodec STREAM_CODEC = CatnipStreamCodecBuilders.list(BigItemStack.STREAM_CODEC) + .map(PackageOrder::new, PackageOrder::stacks); public static PackageOrder empty() { return new PackageOrder(Collections.emptyList()); diff --git a/src/main/java/com/simibubi/create/content/trains/graph/DimensionPalette.java b/src/main/java/com/simibubi/create/content/trains/graph/DimensionPalette.java index a9258955c8..1a3e1c07bf 100644 --- a/src/main/java/com/simibubi/create/content/trains/graph/DimensionPalette.java +++ b/src/main/java/com/simibubi/create/content/trains/graph/DimensionPalette.java @@ -3,10 +3,9 @@ package com.simibubi.create.content.trains.graph; import java.util.ArrayList; import java.util.List; -import net.createmod.catnip.nbt.NBTHelper; - -import net.createmod.catnip.codecs.stream.CatnipStreamCodecBuilders; import io.netty.buffer.ByteBuf; +import net.createmod.catnip.codecs.stream.CatnipStreamCodecBuilders; +import net.createmod.catnip.nbt.NBTHelper; import net.minecraft.core.registries.Registries; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; @@ -17,10 +16,8 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.Level; public class DimensionPalette { - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - CatnipStreamCodecBuilders.list(ResourceKey.streamCodec(Registries.DIMENSION)), packet -> packet.gatheredDims, - DimensionPalette::new - ); + public static final StreamCodec STREAM_CODEC = CatnipStreamCodecBuilders.list(ResourceKey.streamCodec(Registries.DIMENSION)) + .map(DimensionPalette::new, i -> i.gatheredDims); private final List> gatheredDims;