игрок на playerconstructing = null

Версия Minecraft
1.7.10
API
Forge
есть эвент:
код:
@SubscribeEvent
    public void onPlayerConstructing(EntityEvent.EntityConstructing event) {
        if(event.entity instanceof EntityPlayer) {
            EntityPlayer p = (EntityPlayer) event.entity;
            if(p.getExtendedProperties(PlayerInfo.PROPERTIES_NAME) == null) {
                p.registerExtendedProperties(PlayerInfo.PROPERTIES_NAME, new PlayerInfo(p));
            }
        }
    }
вставил после регистра System.out.println("debug");
каждый раз когда захожу его пишет и переменные в пропсах дефолтные. с чем может быть связано?
upd: данные точно пишутся, во время игры отображаются и тратятся некоторые переменные, но после перезахода они сбрасываются до тех что в конструкторе класса
 
Решение
А ты зачем пакет sync на сервер шлёшь? Ты должен НА клиент синхронизировать из сохранённых данных сервера. Я полагаю у тебя данные не сбрасваются, а просто клиент не знает об их значениях на сервере
code:
@SubscribeEvent
    public void onEntityJoinWorld(EntityJoinWorldEvent event) {
        if (event.entity instanceof EntityPlayer && !event.entity.worldObj.isRemote) {
            PlayerInfo.get((EntityPlayer) event.entity).sync();
        }
    }
playerinfo:
package dayz.info;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import dayz.DayZ;
import dayz.network.SPacketHeal;
import dayz.network.SPacketSync;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemFood;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.DamageSource;
import net.minecraft.world.EnumDifficulty;
import net.minecraft.world.World;
import net.minecraftforge.common.IExtendedEntityProperties;

public class PlayerInfo implements IExtendedEntityProperties {
    public final static String PROPERTIES_NAME = "DayZPlayer";
    private int money,
                zkills,
                pkills,
                hours,
                deaths,
                water,
                waterTickTimer;
    private float waterSaturationLevel,
                  waterExhaustionLevel;
    private int prevWaterLevel, waterTimer;
    private EntityPlayer player;
    public PlayerInfo(EntityPlayer p) {
        this.player = p;
        this.pkills = 0;
        this.zkills = 0;
        this.hours = 0;
        this.money = 0;
        this.deaths = 0;
        this.water = 20;
        this.waterTickTimer = 0;
        this.waterSaturationLevel = 5.0F;
        this.waterExhaustionLevel = 0.0F;
       
    }
    public static PlayerInfo get(EntityPlayer player) {
        return (PlayerInfo) player.getExtendedProperties(PROPERTIES_NAME);
    }
    @Override
    public void saveNBTData(NBTTagCompound tag) {
        NBTTagCompound props = new NBTTagCompound();
        props.setInteger("pkills", pkills);
        props.setInteger("zkills", zkills);
        props.setInteger("hours", hours);
        props.setInteger("money", money);
        props.setInteger("deaths", deaths);
        props.setInteger("waterTickTimer", waterTickTimer);
        props.setFloat("waterSaturationLevel", waterSaturationLevel);
        props.setFloat("waterExhaustionLevel", waterExhaustionLevel);
        props.setInteger("water", water);
        tag.setTag(PROPERTIES_NAME, props);
    }
    @Override
    public void loadNBTData(NBTTagCompound tag) {
        NBTTagCompound props = (NBTTagCompound)tag.getTag(PROPERTIES_NAME);
        zkills = props.getInteger("zkills");
        pkills = props.getInteger("pkills");
        hours = props.getInteger("hours");
        money = props.getInteger("money");
        deaths = props.getInteger("deaths");
        water = props.getInteger("water");
        waterTickTimer = props.getInteger("waterTickTimer");
        waterSaturationLevel = props.getFloat("waterSaturationLevel");
        waterExhaustionLevel = props.getFloat("waterExhaustionLevel");
    }
    @Override
    public void init(Entity e, World w) {}
    public void sync() {
        NBTTagCompound shit = new NBTTagCompound();
        NBTTagCompound props = new NBTTagCompound();
        props.setInteger("pkills", pkills);
        props.setInteger("zkills", zkills);
        props.setInteger("hours", hours);
        props.setInteger("money", money);
        props.setInteger("deaths", deaths);
        props.setInteger("water", water);
        props.setInteger("waterTickTimer", waterTickTimer);
        props.setFloat("waterSaturationLevel", waterSaturationLevel);
        props.setFloat("waterExhaustionLevel", waterExhaustionLevel);
        shit.setTag(PROPERTIES_NAME, props);
        DayZ.network.NETWORK.sendToServer(new SPacketSync(shit));
    }
    public void copyNBT(PlayerInfo props) {
        zkills = props.zkills;
        pkills = props.pkills;
        hours = props.hours;
        deaths = props.deaths;
        money = props.money;
        water = props.water;
        waterTickTimer = props.waterTickTimer;
        waterSaturationLevel = props.waterSaturationLevel;
        waterExhaustionLevel = props.waterExhaustionLevel;
    }
    // различные геттеры и сеттеры
}
upd: SPacketSync делает loadNBTData
 
627
72
178
А ты зачем пакет sync на сервер шлёшь? Ты должен НА клиент синхронизировать из сохранённых данных сервера. Я полагаю у тебя данные не сбрасваются, а просто клиент не знает об их значениях на сервере
 
348
26
96
Чё за кринж, нельзя так делать IEEP, это не будет работать. Вот тебе пример использования:

IExtendedEntityProperties Example:
public class CustomPlayerNBT implements IExtendedEntityProperties {
    public String someString = "abobus";

    @Override
    public void saveNBTData(NBTTagCompound compound) {
        NBTTagCompound nbt = new NBTTagCompound();
        nbt.setString("myCustomStringNBT", someString);
        compound.setTag(Main.MOD_ID, nbt);
    }

    @Override
    public void loadNBTData(NBTTagCompound compound) {
        NBTTagCompound nbt = compound.getCompoundTag(Main.MOD_ID);
        someString = nbt.getString("myCustomStringNBT");
    }

    @Override
    public void init(Entity entity, World world) {
        // NO-OP
    }

    public static CustomPlayerNBT get(EntityPlayer player) {
        return (CustomPlayerNBT) player.getExtendedProperties(Main.MOD_ID);
    }

    public static void clone(EntityPlayer original, EntityPlayer current) {
        if (original != null && current != null) {
            NBTTagCompound nbt = new NBTTagCompound();
            get(original).saveNBTData(nbt);
            get(current).loadNBTData(nbt);
        }
    }

    public static void register(EntityPlayer player) {
        player.registerExtendedProperties(Main.MOD_ID, new CustomPlayerNBT());
    }

    @SubscribeEvent
    public void registerNBT(EntityEvent.EntityConstructing e) {
        if (e.entity instanceof EntityPlayer && CustomPlayerNBT.get((EntityPlayer) e.entity) == null)
            CustomPlayerNBT.register((EntityPlayer) e.entity);
    }

    @SubscribeEvent
    public void copyNBT(PlayerEvent.Clone e) {
        CustomPlayerNBT.clone(e.original, e.entityPlayer);
    }
}
 
Сверху