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++))); + } + } + } } diff --git a/src/main/java/gregtech/api/items/metaitem/MetaItem.java b/src/main/java/gregtech/api/items/metaitem/MetaItem.java index 52b94672421..655a78a3bd6 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 capabilityNBT) { + return new ItemStack(MetaItem.this, amount, metaItemOffset + metaValue, capabilityNBT); + } + public boolean isItemEqual(ItemStack itemStack) { return itemStack.getItem() == MetaItem.this && itemStack.getItemDamage() == (metaItemOffset + metaValue); }