Dont serialise empty transfer variant components ()

This commit is contained in:
modmuss 2024-03-04 09:44:01 +00:00 committed by GitHub
parent fc9addbd3c
commit a93ecdadf3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 25 additions and 3 deletions
fabric-transfer-api-v1/src
main/java/net/fabricmc/fabric/impl/transfer
test/java/net/fabricmc/fabric/test/transfer/unittests

View file

@ -25,6 +25,7 @@ import net.minecraft.network.codec.PacketCodec;
import net.minecraft.network.codec.PacketCodecs;
import net.minecraft.registry.Registries;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.util.dynamic.Codecs;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant;
import net.fabricmc.fabric.api.transfer.v1.item.ItemVariant;
@ -34,7 +35,7 @@ import net.fabricmc.fabric.impl.transfer.item.ItemVariantImpl;
public class VariantCodecs {
public static final Codec<ItemVariant> ITEM_CODEC = RecordCodecBuilder.create(instance -> instance.group(
Registries.ITEM.getEntryCodec().fieldOf("item").forGetter(ItemVariant::getRegistryEntry),
ComponentChanges.CODEC.fieldOf("components").forGetter(ItemVariant::getComponents)
Codecs.createStrictOptionalFieldCodec(ComponentChanges.CODEC, "components", ComponentChanges.EMPTY).forGetter(ItemVariant::getComponents)
).apply(instance, ItemVariantImpl::of)
);
public static final PacketCodec<RegistryByteBuf, ItemVariant> ITEM_PACKET_CODEC = PacketCodec.tuple(
@ -45,7 +46,7 @@ public class VariantCodecs {
public static final Codec<FluidVariant> FLUID_CODEC = RecordCodecBuilder.create(instance -> instance.group(
Registries.FLUID.getEntryCodec().fieldOf("fluid").forGetter(FluidVariant::getRegistryEntry),
ComponentChanges.CODEC.fieldOf("components").forGetter(FluidVariant::getComponents)
Codecs.createStrictOptionalFieldCodec(ComponentChanges.CODEC, "components", ComponentChanges.EMPTY).forGetter(FluidVariant::getComponents)
).apply(instance, FluidVariantImpl::of)
);
public static final PacketCodec<RegistryByteBuf, FluidVariant> FLUID_PACKET_CODEC = PacketCodec.tuple(

View file

@ -130,7 +130,28 @@ public class SingleVariantItemStorageTests extends AbstractTransferApiTest {
NbtCompound nbt = new NbtCompound();
storage.writeNbt(nbt, staticDrm());
assertEquals("{amount:1L,variant:{components:{},item:\"minecraft:diamond\"}}", nbt.toString());
assertEquals("{amount:1L,variant:{item:\"minecraft:diamond\"}}", nbt.toString());
}
@Test
public void writeNbtWithComponentTest() {
SingleItemStorage storage = new SingleItemStorage() {
@Override
protected long getCapacity(ItemVariant variant) {
return 10;
}
};
try (Transaction tx = Transaction.openOuter()) {
ItemStack stack = new ItemStack(Items.DIAMOND);
stack.set(DataComponentTypes.CUSTOM_NAME, Text.literal("test name"));
storage.insert(ItemVariant.of(stack), 1, tx);
tx.commit();
}
NbtCompound nbt = new NbtCompound();
storage.writeNbt(nbt, staticDrm());
assertEquals("{amount:1L,variant:{components:{\"minecraft:custom_name\":'\"test name\"'},item:\"minecraft:diamond\"}}", nbt.toString());
}
@Test