Нужна помощь с НБТ

Мне нужно сделать так чтоб за игроком закреплялась его переменная по типу голода или опыта,Но не совсем понимаю как. Знаю только лишь то что такое можно сделать в классе по типу
Код:
public final class PlayerInfo implements IExtendedEntityProperties {

    @Override
    public void saveNBTData(NBTTagCompound compound) {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void loadNBTData(NBTTagCompound compound) {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void init(Entity entity, World world) {
        // TODO Auto-generated method stub
        
    }
  }
 
Йопана, ну гугл же, ребята!
Просто вводишь название интерфейса и все!
rlXJxGs.png
 
Окей, объясняю на пальцах.
Есть интерфейс, собственно, IExtendedEntityProperties.
В нем есть три метода: saveNBTData, loadNBTData и init.
saveNBTData - метод, в котором ты ЗАПИСЫВАЕШЬ свои данные в нбт энтити.
loadNBTData - метод, в котором ты СЧИТЫВАЕШЬ свои данные из нбт энтити.
init - метод, который вызывается в конструкторе энтити.
Окей, нам нужно хранить значения, например, выносливости. Это целое число(int).
Вот так будет выглядеть наш класс:
Код:
public class PlayerInfo implements IExtendedEntityProperties {

    private EntityPlayer player; //Игрок, с которым мы работаем.
    public int stamina;

    public PlayerInfo(EntityPlayer plr){
        player = plr;
    }

    public void saveNBTData(NBTTagCompound compound){
        compound.setInteger("stamina", stamina); //Записываем нашу переменную в нбт
    }

    public void loadNBTData(NBTTagCompound compound){
        stamina = compound.getInteger("stamina"); //Считываем нашу переменную из нбт 
    }

    public void init(Entity entity, World world){}
  }

Окей, это есть. Теперь нужно всю эту бабуйню зарегистрировать.
Код:
@SubsctibeEvent
public void registerProps(EntityConstructingEvent e){
    if(e.entity instanceof EntityPlayer){ //Регаем только игроку!
        e.entity.registerExtendedProperties("STAMINAPROPS", new PlayerInfo((EntityPlayer)e.entity)); //Регаем
    }
}
Ну вот, собственно, и все. Свои данные еще нужно синхронизировать с клиентом, но это уже совсем другая история.
Теперь получаем это дело вот так и меняем нашу переменную как хотим:
Код:
PlayerInfo props = (PlayerInfo)Entity#getExtendedProperties("STAMINAPROPS");
props.stamina += 10; //Меняем значение переменной
Вот и все. Конечно же, лучше сделать константы на имя данных(STAMINAPROPS) и т.д.
Разве это сложно?
 
Тэкс. А если у нас например есть метод rightClick в предмете. Как например прибавить к переменной число в этом методе?
 
в 1.7.10 он не знает таких методов как  @SubsctibeEvent и EntityConstructingEvent

Все понял это @SubscribeEvent и EntityConstructing
[merge_posts_bbcode]Добавлено: 06.08.2015 16:23:15[/merge_posts_bbcode]

А как понять синхронизировать с клиентом ?
 
Как должен выглядеть пакет ?

public class PaketStamina implements IMessage {

    public int button;

    public PaketStamina() {}

    public PaketStamina(int button) {
        this.button = button;
    }

    @Override
    public void toBytes(ByteBuf buf) {
        buf.writeInt(button);
    }

    @Override
    public void fromBytes(ByteBuf buf) {
        button = buf.readInt();
    }
    //----------------------------------------------------------------------------------
    public static class Handler implements IMessageHandler<PaketStamina, IMessage> {

        @Override
        public IMessage onMessage(PaketStamina packet, MessageContext message) {
            int button = packet.button;
            EntityPlayerMP player = message.getServerHandler().playerEntity;

            switch(button) {
      
            case 3:    //Я знаю что писать сюда но что ?
              
              
             ;break;
            }

            return null;
        }

    }
    //----------------------------------------------------------------------------------
}
[merge_posts_bbcode]Добавлено: 06.08.2015 17:22:41[/merge_posts_bbcode]

Код не работает крашит при 
public ItemStack onItemRightClick(ItemStack p_77659_1_, World p_77659_2_, EntityPlayer p_77659_3_)
    {

PlayerInfo props = (PlayerInfo)p_77659_3_.getExtendedProperties("STAMINAPROPS");
props.stamina += 10; //из-за этого



        return p_77659_1_;
    }


}
 
Назад
Сверху