package mekanism.common.capabilities; import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.Capability.IStorage; import net.minecraftforge.common.util.INBTSerializable; /** * Created by ben on 03/05/16. */ public class DefaultStorageHelper { public static class DefaultStorage<T> implements IStorage<T> { @Override public NBTBase writeNBT(Capability<T> capability, T instance, EnumFacing side) { if(instance instanceof INBTSerializable) return ((INBTSerializable)instance).serializeNBT(); return new NBTTagCompound(); } @Override public void readNBT(Capability<T> capability, T instance, EnumFacing side, NBTBase nbt) { if(instance instanceof INBTSerializable) { Class<? extends NBTBase> nbtClass = ((INBTSerializable)instance).serializeNBT().getClass(); if(nbtClass.isInstance(nbt)) { ((INBTSerializable)instance).deserializeNBT(nbtClass.cast(nbt)); } } } } public static class NullStorage<T> implements IStorage<T> { @Override public NBTBase writeNBT(Capability<T> capability, T instance, EnumFacing side) { return new NBTTagCompound(); } @Override public void readNBT(Capability<T> capability, T instance, EnumFacing side, NBTBase nbt) {} } }