65 lines
2.5 KiB
Java
65 lines
2.5 KiB
Java
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<NBTTagCompound> {
|
|
@CapabilityInject(IKnockdownsPlayerData.class)
|
|
public static Capability<IKnockdownsPlayerData> CAPABILITY;
|
|
public static final ResourceLocation ID = new ResourceLocation(Tags.MOD_ID, "data");
|
|
|
|
private KnockdownsPlayerData playerData = null;
|
|
private final LazyLoadBase<KnockdownsPlayerData> lazy = new LazyLoadBase<KnockdownsPlayerData>() {
|
|
@Override
|
|
protected KnockdownsPlayerData load() {
|
|
return playerData == null ? (playerData = new KnockdownsPlayerData()) : playerData;
|
|
}
|
|
};
|
|
|
|
public static void register() {
|
|
CapabilityManager.INSTANCE.register(IKnockdownsPlayerData.class, new Capability.IStorage<IKnockdownsPlayerData>() {
|
|
@Nullable
|
|
@Override
|
|
public NBTBase writeNBT(Capability<IKnockdownsPlayerData> capability, IKnockdownsPlayerData instance, EnumFacing side) {
|
|
return instance.serializeNBT();
|
|
}
|
|
|
|
@Override
|
|
public void readNBT(Capability<IKnockdownsPlayerData> 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> T getCapability(@Nonnull Capability<T> 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);
|
|
}
|
|
}
|