package choonster.testmod3.capability;
import net.minecraft.nbt.NBTBase;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.Capability.IStorage;
import net.minecraftforge.common.capabilities.ICapabilityProvider;
import net.minecraftforge.common.util.INBTSerializable;
import javax.annotation.Nullable;
/**
* A simple implementation of {@link ICapabilityProvider} and {@link INBTSerializable} that supports a single {@link Capability} handler instance.
* <p>
* Uses the {@link Capability}'s {@link IStorage} to serialise/deserialise NBT.
*
* @author Choonster
*/
public class CapabilityProviderSerializable<HANDLER> extends CapabilityProviderSimple<HANDLER> implements INBTSerializable<NBTBase> {
/**
* Create a provider for the default handler instance.
*
* @param capability The Capability instance to provide the handler for
* @param facing The EnumFacing to provide the handler for
*/
public CapabilityProviderSerializable(final Capability<HANDLER> capability, @Nullable final EnumFacing facing) {
this(capability, facing, capability.getDefaultInstance());
}
/**
* Create a provider for the specified handler instance.
*
* @param capability The Capability instance to provide the handler for
* @param facing The EnumFacing to provide the handler for
* @param instance The handler instance to provide
*/
public CapabilityProviderSerializable(final Capability<HANDLER> capability, @Nullable final EnumFacing facing, final HANDLER instance) {
super(instance, capability, facing);
}
@Override
public NBTBase serializeNBT() {
return getCapability().writeNBT(getInstance(), getFacing());
}
@Override
public void deserializeNBT(final NBTBase nbt) {
getCapability().readNBT(getInstance(), getFacing(), nbt);
}
}