Как создать Capability на 1.11.2 или же IEEP на 1.11.2
Элементарный пример с маной.
Использовать - сохранение/загрузка - serializeNBT/deserializeNBT.
(c)
Офф ссылка + больше комментов:
http://tutorials.darkhax.net/tutorials/custom_entity_data/
Элементарный пример с маной.
Код:
public interface IManaHandler {
int getMana();
void setMana(int mana);
void addMana(int mana);
void removeMana(int mana);
}
Код:
@CapabilityInject(IManaHandler.class)
public static final Capability<IManaHandler> CAPABILITY_MANA = null;
Код:
public class DefaultManaHandler implements IManaHandler {
private int mana;
@Override
public int getMana () {
return this.mana;
}
@Override
public void setMana (int mana) {
this.mana = mana;
}
@Override
public void addMana (int mana) {
this.mana += mana;
}
@Override
public void removeMana (int mana) {
this.mana -= mana;
if (this.mana < 0)
this.mana = 0;
}
}
Код:
public class Storage implements Capability.IStorage<IManaHandler> {
@Override
public NBTBase writeNBT (Capability<IManaHandler> capability, IManaHandler instance, EnumFacing side) {
final NBTTagCompound tag = new NBTTagCompound();
tag.setInteger("mana", instance.getMana());
return tag;
}
@Override
public void readNBT (Capability<IManaHandler> capability, IManaHandler instance, EnumFacing side, NBTBase nbt) {
final NBTTagCompound tag = (NBTTagCompound) nbt;
instance.setMana(tag.getInteger("mana"));
}
}
Код:
public class Provider implements ICapabilitySerializable<NBTTagCompound> {
IManaHandler instance = CAPABILITY_MANA.getDefaultInstance();
@Override
public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
return capability == CAPABILITY_MANA;
}
@Override
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
return hasCapability(capability, facing) ? CAPABILITY_MANA.<T>cast(instance) : null;
}
@Override
public NBTTagCompound serializeNBT() {
return (NBTTagCompound) CAPABILITY_MANA.getStorage().writeNBT(CAPABILITY_MANA, instance, null);
}
@Override
public void deserializeNBT(NBTTagCompound nbt) {
CAPABILITY_MANA.getStorage().readNBT(CAPABILITY_MANA, instance, null, nbt);
}
}
Код:
CapabilityManager.INSTANCE.register(IManaHandler.class, new Storage(), DefaultManaHandler.class);
Код:
@SubscribeEvent
public void attachCapabilities(AttachCapabilitiesEvent<Entity> event) {
if (event.getObject() instanceof EntityPlayer)
event.addCapability(new ResourceLocation("MODID", "NAME"), new Provider());
}
Код:
@SubscribeEvent
public void clonePlayer(PlayerEvent.Clone event) {
final IManaHandler original = getHandler(event.getOriginal());
final IManaHandler clone = getHandler(event.getEntity());
clone.setMana(original.getMana());
}
Использовать - сохранение/загрузка - serializeNBT/deserializeNBT.
Код:
public static IManaHandler getHandler(Entity entity) {
if (entity.hasCapability(CAPABILITY_MANA, EnumFacing.DOWN))
return entity.getCapability(CAPABILITY_MANA, EnumFacing.DOWN);
return null;
}
(c)
Офф ссылка + больше комментов:
http://tutorials.darkhax.net/tutorials/custom_entity_data/