Knockdowns-Legacy/src/main/java/ru/octol1ttle/knockdowns/common/data/KnockdownsCapability.java
2024-07-15 11:22:53 +05:00

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);
}
}