Мне говорили что capabilities сохраняется после выхода из игры в определенном мире. НО я сдлеал у себя capabilities, а он не сохранил после выходя из игры данные. Быстрее всего я тупой и что-то неправильно сделал. Но как можно сохранить capabilities привязанную к игроку в мире ?
Вот все классы:
Вот все классы:
Вот все классы:
Вот все классы:
Imana:
package com.example.examplemod.capabilities;
public interface IMana {
public void setMana(int mana);
public int getMana();
}
Mana:
package com.example.examplemod.capabilities;
public class Mana implements IMana{
private int mana = 1;
@Override
public void setMana(int mana) {
this.mana = mana;
}
@Override
public int getMana() {
return this.mana;
}
}
ManaProvider:
package com.example.examplemod.capabilities;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.CapabilityInject;
import net.minecraftforge.common.capabilities.ICapabilitySerializable;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class ManaProvider implements ICapabilitySerializable<NBTTagCompound> {
@CapabilityInject(IMana.class)
public static final Capability<IMana> MANA_CAPABILITY = null;
private final IMana capability = new Mana();
@Override
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
return capability == MANA_CAPABILITY;
}
@Nullable
@Override
@SuppressWarnings("unchecked")
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) {
if ((MANA_CAPABILITY != null) && (capability == MANA_CAPABILITY)) return (T) this.capability;
return null;
}
@Override
public NBTTagCompound serializeNBT() {
return (NBTTagCompound) ManaStorage.INSTANCE.writeNBT(ManaProvider.MANA_CAPABILITY, new Mana(), null);
}
@Override
public void deserializeNBT(NBTTagCompound nbt) {
ManaStorage.INSTANCE.readNBT(ManaProvider.MANA_CAPABILITY, new Mana(), null, nbt);
}
}
ManaStorage:
package com.example.examplemod.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 javax.annotation.Nullable;
public class ManaStorage implements IStorage<IMana> {
public static final ManaStorage INSTANCE = new ManaStorage();
@Nullable
@Override
public NBTBase writeNBT(Capability<IMana> capability, IMana instance, EnumFacing side) {
NBTTagCompound nbt = new NBTTagCompound();
nbt.setInteger("maxMana",instance.getMana());
return null;
}
@Override
public void readNBT(Capability<IMana> capability, IMana instance, EnumFacing side, NBTBase nbt) {
NBTTagCompound tag = (NBTTagCompound) nbt;
instance.setMana(tag.getInteger("maxMana"));
}
}
Handler:
package com.example.examplemod.util.handlers;
import com.example.examplemod.capabilities.ManaProvider;
import com.example.examplemod.util.Reference;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.event.AttachCapabilitiesEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import java.util.Locale;
@Mod.EventBusSubscriber
public class Handler {
@SubscribeEvent
public static void attachEntity(AttachCapabilitiesEvent<Entity> event) {
if (event.getObject() instanceof EntityPlayer) {
ManaProvider manaCap = new ManaProvider();
event.addCapability(new ResourceLocation(Reference.MODID, "mana_capability"), manaCap);
}
}
}