From 6de1d59c1091b65c3eab6739835d10ceda1fe773 Mon Sep 17 00:00:00 2001 From: Zorbatron <46525467+Zorbatron@users.noreply.github.com> Date: Tue, 16 Sep 2025 16:37:44 -0400 Subject: [PATCH 1/3] Add method to MetaValueItem to create an ItemStack with NBT --- src/main/java/gregtech/api/items/metaitem/MetaItem.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/gregtech/api/items/metaitem/MetaItem.java b/src/main/java/gregtech/api/items/metaitem/MetaItem.java index 52b94672421..5916b33d539 100644 --- a/src/main/java/gregtech/api/items/metaitem/MetaItem.java +++ b/src/main/java/gregtech/api/items/metaitem/MetaItem.java @@ -1011,6 +1011,10 @@ public ItemStack getStackForm(int amount) { return new ItemStack(MetaItem.this, amount, metaItemOffset + metaValue); } + public ItemStack getStackForm(int amount, @Nullable NBTTagCompound withNBT) { + return new ItemStack(MetaItem.this, amount, metaItemOffset + metaValue, withNBT); + } + public boolean isItemEqual(ItemStack itemStack) { return itemStack.getItem() == MetaItem.this && itemStack.getItemDamage() == (metaItemOffset + metaValue); } From 08e4979855416ea5cd2fb97df583fc31d83b873a Mon Sep 17 00:00:00 2001 From: Zorbatron <46525467+Zorbatron@users.noreply.github.com> Date: Tue, 16 Sep 2025 17:17:57 -0400 Subject: [PATCH 2/3] Rename withNBT to capabilityNBT --- src/main/java/gregtech/api/items/metaitem/MetaItem.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/api/items/metaitem/MetaItem.java b/src/main/java/gregtech/api/items/metaitem/MetaItem.java index 5916b33d539..655a78a3bd6 100644 --- a/src/main/java/gregtech/api/items/metaitem/MetaItem.java +++ b/src/main/java/gregtech/api/items/metaitem/MetaItem.java @@ -1011,8 +1011,8 @@ public ItemStack getStackForm(int amount) { return new ItemStack(MetaItem.this, amount, metaItemOffset + metaValue); } - public ItemStack getStackForm(int amount, @Nullable NBTTagCompound withNBT) { - return new ItemStack(MetaItem.this, amount, metaItemOffset + metaValue, withNBT); + public ItemStack getStackForm(int amount, @Nullable NBTTagCompound capabilityNBT) { + return new ItemStack(MetaItem.this, amount, metaItemOffset + metaValue, capabilityNBT); } public boolean isItemEqual(ItemStack itemStack) { From 28ff647f0e7ba4691496d5774f845d47ea7edb9e Mon Sep 17 00:00:00 2001 From: Zorbatron <46525467+Zorbatron@users.noreply.github.com> Date: Tue, 16 Sep 2025 17:31:25 -0400 Subject: [PATCH 3/3] Make CombinedCapabilityProvider serializable --- .../impl/CombinedCapabilityProvider.java | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/capability/impl/CombinedCapabilityProvider.java b/src/main/java/gregtech/api/capability/impl/CombinedCapabilityProvider.java index 3f5f7dbf2e9..fa157beed75 100644 --- a/src/main/java/gregtech/api/capability/impl/CombinedCapabilityProvider.java +++ b/src/main/java/gregtech/api/capability/impl/CombinedCapabilityProvider.java @@ -1,15 +1,17 @@ package gregtech.api.capability.impl; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.common.util.INBTSerializable; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.List; -public class CombinedCapabilityProvider implements ICapabilityProvider { +public class CombinedCapabilityProvider implements ICapabilityProvider, INBTSerializable { private final ICapabilityProvider[] providers; @@ -42,4 +44,33 @@ public T getCapability(@NotNull Capability capability, @Nullable EnumFaci } return null; } + + @Override + public NBTTagCompound serializeNBT() { + NBTTagCompound tag = new NBTTagCompound(); + + int index = 0; + for (ICapabilityProvider provider : providers) { + if (provider instanceof INBTSerializableserializable) { + tag.setTag(String.valueOf(index++), serializable.serializeNBT()); + } + } + + return tag; + } + + @Override + public void deserializeNBT(NBTTagCompound tag) { + int index = 0; + for (ICapabilityProvider provider : providers) { + // Me when no runtime generic type information :joy: + // This will probably not explode since it'll deserialize in the same order it was serialized so the types + // should match up. + // noinspection rawtypes + if (provider instanceof INBTSerializable serializable) { + // noinspection unchecked + serializable.deserializeNBT(tag.getTag(String.valueOf(index++))); + } + } + } }