Steamed Codecs

- Rewrite codecs using StreamCodec#composite(codec, getter, factory) to use StreamCodec#map instead
- Require StreamCodec's for ItemAttribute's
This commit is contained in:
IThundxr 2025-02-17 10:56:19 -05:00
parent f66d29e34c
commit 3bcabaf18e
Failed to generate hash of commit
24 changed files with 184 additions and 73 deletions

View file

@ -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

View file

@ -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<List<ItemAttributeEntry>> 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<ClipboardType> CLIPBOARD_TYPE = register(

View file

@ -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<BlockPos, MountedItemStorage> items, Map<BlockPos, MountedFluidStorage> fluids) implements ClientboundPacketPayload {
public static StreamCodec<RegistryFriendlyByteBuf, MountedStorageSyncPacket> STREAM_CODEC = StreamCodec.composite(
public static final StreamCodec<RegistryFriendlyByteBuf, MountedStorageSyncPacket> 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,

View file

@ -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<F
.forGetter(p -> p.fluid))
.apply(i, fs -> new FluidParticleData(AllParticleTypes.FLUID_PARTICLE.get(), fs)));
public static final StreamCodec<RegistryFriendlyByteBuf, FluidParticleData> STREAM_CODEC = StreamCodec.composite(
FluidStack.STREAM_CODEC,
p -> p.fluid,
fs -> new FluidParticleData(AllParticleTypes.FLUID_PARTICLE.get(), fs));
public static final StreamCodec<RegistryFriendlyByteBuf, FluidParticleData> STREAM_CODEC = FluidStack.STREAM_CODEC
.map(fs -> new FluidParticleData(AllParticleTypes.FLUID_PARTICLE.get(), fs), p -> p.fluid);
public static final MapCodec<FluidParticleData> 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<RegistryFriendlyByteBuf, FluidParticleData> BASIN_STREAM_CODEC = StreamCodec.composite(
FluidStack.STREAM_CODEC,
p -> p.fluid,
fs -> new FluidParticleData(AllParticleTypes.BASIN_FLUID.get(), fs));
public static final StreamCodec<RegistryFriendlyByteBuf, FluidParticleData> BASIN_STREAM_CODEC = FluidStack.STREAM_CODEC
.map(fs -> new FluidParticleData(AllParticleTypes.BASIN_FLUID.get(), fs), p -> p.fluid);
public static final MapCodec<FluidParticleData> 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<RegistryFriendlyByteBuf, FluidParticleData> DRIP_STREAM_CODEC = StreamCodec.composite(
FluidStack.STREAM_CODEC,
p -> p.fluid,
fs -> new FluidParticleData(AllParticleTypes.FLUID_DRIP.get(), fs));
public static final StreamCodec<RegistryFriendlyByteBuf, FluidParticleData> DRIP_STREAM_CODEC = FluidStack.STREAM_CODEC
.map(fs -> new FluidParticleData(AllParticleTypes.FLUID_DRIP.get(), fs), p -> p.fluid);
@Override
public MapCodec<FluidParticleData> getCodec(ParticleType<FluidParticleData> type) {

View file

@ -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<ByteBuf, SteamJetParticleData> STREAM_CODEC = StreamCodec.composite(
ByteBufCodecs.FLOAT,
p -> p.speed,
SteamJetParticleData::new
);
public static final StreamCodec<ByteBuf, SteamJetParticleData> STREAM_CODEC = ByteBufCodecs.FLOAT.map(
SteamJetParticleData::new, p -> p.speed);
float speed;

View file

@ -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<Holder<Enchantment>> entry : s.getTagEnchantments().entrySet()) {
if (entry.getKey().value().getMaxLevel() <= entry.getIntValue())
return true;
}
return false;
}
private static ItemAttributeType singleton(String id, Predicate<ItemStack> predicate) {

View file

@ -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<ItemAttribute> CODEC = AllRegistries.ITEM_ATTRIBUTE_TYPES.byNameCodec().dispatch(ItemAttribute::getType, ItemAttributeType::codec);
StreamCodec<RegistryFriendlyByteBuf, ItemAttribute> 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<ItemAttribute.ItemAttributeEntry> 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<ItemAttributeEntry> 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<RegistryFriendlyByteBuf, ItemAttributeEntry> STREAM_CODEC = StreamCodec.composite(
ItemAttribute.STREAM_CODEC, ItemAttributeEntry::attribute,
ByteBufCodecs.BOOL, ItemAttributeEntry::inverted,
ItemAttributeEntry::new
);
}
}

View file

@ -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<ItemAttribute> getAllAttributes(ItemStack stack, Level level);
MapCodec<? extends ItemAttribute> codec();
StreamCodec<? super RegistryFriendlyByteBuf, ? extends ItemAttribute> streamCodec();
}

View file

@ -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<ByteBuf, AddedByAttribute> 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<? extends ItemAttribute> codec() {
return CODEC;
}
@Override
public StreamCodec<? super RegistryFriendlyByteBuf, ? extends ItemAttribute> streamCodec() {
return STREAM_CODEC;
}
}
}

View file

@ -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<ByteBuf, BookAuthorAttribute> 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<? extends ItemAttribute> codec() {
return CODEC;
}
@Override
public StreamCodec<? super RegistryFriendlyByteBuf, ? extends ItemAttribute> streamCodec() {
return STREAM_CODEC;
}
}
}

View file

@ -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<ByteBuf, BookCopyAttribute> 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<? extends ItemAttribute> codec() {
return CODEC;
}
@Override
public StreamCodec<? super RegistryFriendlyByteBuf, ? extends ItemAttribute> streamCodec() {
return STREAM_CODEC;
}
}
}

View file

@ -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<ByteBuf, ColorAttribute> STREAM_CODEC = DyeColor.STREAM_CODEC
.map(ColorAttribute::new, ColorAttribute::color);
private static Collection<DyeColor> findMatchingDyeColors(ItemStack stack) {
DyeColor color = DyeColor.getColor(stack);
if (color != null)
@ -98,5 +104,10 @@ public record ColorAttribute(DyeColor color) implements ItemAttribute {
public MapCodec<? extends ItemAttribute> codec() {
return CODEC;
}
@Override
public StreamCodec<? super RegistryFriendlyByteBuf, ? extends ItemAttribute> streamCodec() {
return STREAM_CODEC;
}
}
}

View file

@ -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> enchantment) implem
.xmap(EnchantAttribute::new, EnchantAttribute::enchantment)
.fieldOf("value");
public static final StreamCodec<RegistryFriendlyByteBuf, EnchantAttribute> 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> enchantment) implem
public MapCodec<? extends ItemAttribute> codec() {
return CODEC;
}
@Override
public StreamCodec<? super RegistryFriendlyByteBuf, ? extends ItemAttribute> streamCodec() {
return STREAM_CODEC;
}
}
}

View file

@ -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<RegistryFriendlyByteBuf, FluidContentsAttribute> STREAM_CODEC = CatnipStreamCodecBuilders.nullable(CatnipStreamCodecs.FLUID)
.map(FluidContentsAttribute::new, FluidContentsAttribute::fluid);
private static List<Fluid> extractFluids(ItemStack stack) {
List<Fluid> fluids = new ArrayList<>();
@ -82,5 +90,10 @@ public record FluidContentsAttribute(@Nullable Fluid fluid) implements ItemAttri
public MapCodec<? extends ItemAttribute> codec() {
return CODEC;
}
@Override
public StreamCodec<? super RegistryFriendlyByteBuf, ? extends ItemAttribute> streamCodec() {
return STREAM_CODEC;
}
}
}

View file

@ -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<RegistryFriendlyByteBuf, InItemGroupAttribute> 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<? extends ItemAttribute> codec() {
return CODEC;
}
@Override
public StreamCodec<? super RegistryFriendlyByteBuf, ? extends ItemAttribute> streamCodec() {
return STREAM_CODEC;
}
}
}

View file

@ -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<Item> tag) implements ItemAttribute {
.xmap(InTagAttribute::new, InTagAttribute::tag)
.fieldOf("value");
public static final StreamCodec<ByteBuf, InTagAttribute> 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<Item> tag) implements ItemAttribute {
public MapCodec<? extends ItemAttribute> codec() {
return CODEC;
}
@Override
public StreamCodec<? super RegistryFriendlyByteBuf, ? extends ItemAttribute> streamCodec() {
return STREAM_CODEC;
}
}
}

View file

@ -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<ByteBuf, ItemNameAttribute> 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<? extends ItemAttribute> codec() {
return CODEC;
}
@Override
public StreamCodec<? super RegistryFriendlyByteBuf, ? extends ItemAttribute> streamCodec() {
return STREAM_CODEC;
}
}
}

View file

@ -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<ByteBuf, ShulkerFillLevelAttribute> 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<ShulkerLevels> CODEC = StringRepresentable.fromValues(ShulkerLevels::values);
public static final StreamCodec<ByteBuf, ShulkerLevels> STREAM_CODEC = CatnipStreamCodecBuilders.ofEnum(ShulkerLevels.class);
private final Predicate<Integer> requiredSize;
private final String key;
@ -127,5 +135,10 @@ public record ShulkerFillLevelAttribute(ShulkerLevels levels) implements ItemAtt
public MapCodec<? extends ItemAttribute> codec() {
return CODEC;
}
@Override
public StreamCodec<? super RegistryFriendlyByteBuf, ? extends ItemAttribute> streamCodec() {
return STREAM_CODEC;
}
}
}

View file

@ -52,10 +52,8 @@ public record PackagePortPlacementPacket(PackagePortTarget target, BlockPos pos)
}
public record ClientBoundRequest(BlockPos pos) implements ClientboundPacketPayload {
public static final StreamCodec<ByteBuf, ClientBoundRequest> STREAM_CODEC = StreamCodec.composite(
BlockPos.STREAM_CODEC, ClientBoundRequest::pos,
ClientBoundRequest::new
);
public static final StreamCodec<ByteBuf, ClientBoundRequest> STREAM_CODEC = BlockPos.STREAM_CODEC
.map(ClientBoundRequest::new, ClientBoundRequest::pos);
@Override
public PacketTypeProvider getTypeProvider() {

View file

@ -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<ByteBuf, TrainStationFrogportTarget> STREAM_CODEC = StreamCodec.composite(
BlockPos.STREAM_CODEC, i -> i.relativePos,
TrainStationFrogportTarget::new
);
public static final StreamCodec<ByteBuf, TrainStationFrogportTarget> STREAM_CODEC = BlockPos.STREAM_CODEC
.map(TrainStationFrogportTarget::new, i -> i.relativePos);
public TrainStationFrogportTarget(BlockPos relativePos) {
super(relativePos);

View file

@ -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<ByteBuf, WiFiEffectPacket> STREAM_CODEC = StreamCodec.composite(
BlockPos.STREAM_CODEC, WiFiEffectPacket::pos,
WiFiEffectPacket::new
);
public static final StreamCodec<ByteBuf, WiFiEffectPacket> STREAM_CODEC = BlockPos.STREAM_CODEC
.map(WiFiEffectPacket::new, WiFiEffectPacket::pos);
@Override
public PacketTypeProvider getTypeProvider() {

View file

@ -9,10 +9,8 @@ import net.minecraft.network.codec.StreamCodec;
import net.minecraft.server.level.ServerPlayer;
public class LogisticalStockRequestPacket extends BlockEntityConfigurationPacket<StockCheckingBlockEntity> {
public static final StreamCodec<ByteBuf, LogisticalStockRequestPacket> STREAM_CODEC = StreamCodec.composite(
BlockPos.STREAM_CODEC, packet -> packet.pos,
LogisticalStockRequestPacket::new
);
public static final StreamCodec<ByteBuf, LogisticalStockRequestPacket> STREAM_CODEC = BlockPos.STREAM_CODEC
.map(LogisticalStockRequestPacket::new, packet -> packet.pos);
public LogisticalStockRequestPacket(BlockPos pos) {
super(pos);

View file

@ -16,10 +16,8 @@ public record PackageOrder(List<BigItemStack> stacks) {
Codec.list(BigItemStack.CODEC).fieldOf("entries").forGetter(PackageOrder::stacks)
).apply(instance, PackageOrder::new));
public static final StreamCodec<RegistryFriendlyByteBuf, PackageOrder> STREAM_CODEC = StreamCodec.composite(
CatnipStreamCodecBuilders.list(BigItemStack.STREAM_CODEC), PackageOrder::stacks,
PackageOrder::new
);
public static final StreamCodec<RegistryFriendlyByteBuf, PackageOrder> STREAM_CODEC = CatnipStreamCodecBuilders.list(BigItemStack.STREAM_CODEC)
.map(PackageOrder::new, PackageOrder::stacks);
public static PackageOrder empty() {
return new PackageOrder(Collections.emptyList());

View file

@ -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<ByteBuf, DimensionPalette> STREAM_CODEC = StreamCodec.composite(
CatnipStreamCodecBuilders.list(ResourceKey.streamCodec(Registries.DIMENSION)), packet -> packet.gatheredDims,
DimensionPalette::new
);
public static final StreamCodec<ByteBuf, DimensionPalette> STREAM_CODEC = CatnipStreamCodecBuilders.list(ResourceKey.streamCodec(Registries.DIMENSION))
.map(DimensionPalette::new, i -> i.gatheredDims);
private final List<ResourceKey<Level>> gatheredDims;