Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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<NBTTagCompound> {

private final ICapabilityProvider[] providers;

Expand Down Expand Up @@ -42,4 +44,33 @@ public <T> T getCapability(@NotNull Capability<T> capability, @Nullable EnumFaci
}
return null;
}

@Override
public NBTTagCompound serializeNBT() {
NBTTagCompound tag = new NBTTagCompound();

int index = 0;
for (ICapabilityProvider provider : providers) {
if (provider instanceof INBTSerializable<?>serializable) {
tag.setTag(String.valueOf(index++), serializable.serializeNBT());
}
}
Comment on lines +52 to +57
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i'd probably use an indexed for loop since that's basically what you're doing anyways


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++)));
}
}
}
}
4 changes: 4 additions & 0 deletions src/main/java/gregtech/api/items/metaitem/MetaItem.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
Loading