package ru.octol1ttle.knockdowns.common.data; import javax.annotation.Nonnull; import javax.annotation.Nullable; import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.LazyLoadBase; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.CapabilityInject; import net.minecraftforge.common.capabilities.CapabilityManager; import net.minecraftforge.common.capabilities.ICapabilitySerializable; import ru.octol1ttle.knockdowns.Tags; public class KnockdownsCapability implements ICapabilitySerializable { @CapabilityInject(IKnockdownsPlayerData.class) public static Capability CAPABILITY; public static final ResourceLocation ID = new ResourceLocation(Tags.MOD_ID, "data"); private KnockdownsPlayerData playerData = null; private final LazyLoadBase lazy = new LazyLoadBase() { @Override protected KnockdownsPlayerData load() { return playerData == null ? (playerData = new KnockdownsPlayerData()) : playerData; } }; public static void register() { CapabilityManager.INSTANCE.register(IKnockdownsPlayerData.class, new Capability.IStorage() { @Nullable @Override public NBTBase writeNBT(Capability capability, IKnockdownsPlayerData instance, EnumFacing side) { return instance.serializeNBT(); } @Override public void readNBT(Capability capability, IKnockdownsPlayerData instance, EnumFacing side, NBTBase nbt) { instance.deserializeNBT((NBTTagCompound) nbt); } }, KnockdownsPlayerData::new); } @Override public boolean hasCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) { return capability == CAPABILITY; } @SuppressWarnings("unchecked") @Nullable @Override public T getCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) { return capability == CAPABILITY ? (T) lazy.getValue() : null; } @Override public NBTTagCompound serializeNBT() { return lazy.getValue().serializeNBT(); } @Override public void deserializeNBT(NBTTagCompound nbt) { lazy.getValue().deserializeNBT(nbt); } }