Posted September 8, 201312 yr I'm trying to add a new player stat (gold), and when I enter my world, put some coins in, leave, and re-enter the same world, my gold gets reset. Am I doing something wrong? PlayerStatsHandler package terramagna.handlers; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.packet.Packet250CustomPayload; import net.minecraft.world.World; import net.minecraftforge.common.IExtendedEntityProperties; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.network.PacketDispatcher; import cpw.mods.fml.common.network.Player; import cpw.mods.fml.relauncher.Side; public class PlayerStatsHandler implements IExtendedEntityProperties { public final static String EXT_PROP_NAME = "PlayerStats"; private final EntityPlayer player; private int gold; public PlayerStatsHandler(EntityPlayer player) { this.player = player; this.gold = 0; } @Override public void saveNBTData(NBTTagCompound compound) { NBTTagCompound properties = new NBTTagCompound(); properties.setInteger("Gold", this.gold); compound.setTag(EXT_PROP_NAME, properties); } @Override public void loadNBTData(NBTTagCompound compound) { NBTTagCompound properties = (NBTTagCompound) compound.getTag(EXT_PROP_NAME); this.gold = properties.getInteger("Gold"); } @Override public void init(Entity entity, World world) { } public final void syncStatsProperties() { ByteArrayOutputStream bos = new ByteArrayOutputStream(; DataOutputStream outputStream = new DataOutputStream(bos); try { outputStream.writeInt(this.gold); } catch(Exception e) { e.printStackTrace(); } Packet250CustomPayload packet = new Packet250CustomPayload(); packet.channel = "tmchannel"; packet.data = bos.toByteArray(); packet.length = bos.size(); Side side = FMLCommonHandler.instance().getEffectiveSide(); if (side == Side.SERVER) { EntityPlayerMP player1 = (EntityPlayerMP) player; PacketDispatcher.sendPacketToPlayer(packet, (Player) player1); } } public void spendGold(int amount) { if(amount <= this.gold) { this.gold = this.gold - amount; } } public void addGold(int amount) { this.gold = gold + amount; } public void setGold(int amount) { this.gold = amount; } public int getGold() { return this.gold; } } EventHandler package terramagna.handlers; import terramagna.ServerProxy; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import net.minecraftforge.event.ForgeSubscribe; import net.minecraftforge.event.entity.EntityEvent.EntityConstructing; import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.event.entity.living.LivingDeathEvent; public class EventHandler { @ForgeSubscribe public void onEntityConstructing(EntityConstructing event) { if (event.entity instanceof EntityPlayer && event.entity.getExtendedProperties(PlayerStatsHandler.EXT_PROP_NAME) == null) { event.entity.registerExtendedProperties(PlayerStatsHandler.EXT_PROP_NAME, new PlayerStatsHandler((EntityPlayer)event.entity)); } } @ForgeSubscribe public void onEntityJoinWorld(EntityJoinWorldEvent event) { if (!event.entity.worldObj.isRemote && event.entity instanceof EntityPlayer) { NBTTagCompound playerData = ServerProxy.getEntityData(((EntityPlayer) event.entity).username); if (playerData != null) { ((PlayerStatsHandler)(event.entity.getExtendedProperties(PlayerStatsHandler.EXT_PROP_NAME))).loadNBTData(playerData); } ((PlayerStatsHandler)(event.entity.getExtendedProperties(PlayerStatsHandler.EXT_PROP_NAME))).syncStatsProperties(); } } @ForgeSubscribe public void onLivingDeathEvent(LivingDeathEvent event) { if(!event.entity.worldObj.isRemote && event.entity instanceof EntityPlayer) { NBTTagCompound playerData = new NBTTagCompound(); ((PlayerStatsHandler)(event.entity.getExtendedProperties(PlayerStatsHandler.EXT_PROP_NAME))).saveNBTData(playerData); ServerProxy.storeEntityData(((EntityPlayer) event.entity).username, playerData); } } } PacketHandlerC package terramagna.handlers; import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.IOException; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.network.INetworkManager; import net.minecraft.network.packet.Packet250CustomPayload; import cpw.mods.fml.common.network.IPacketHandler; import cpw.mods.fml.common.network.Player; public class PacketHandlerC implements IPacketHandler { public PacketHandlerC() {} @Override public void onPacketData(INetworkManager manager, Packet250CustomPayload packet, Player player) { if(packet.channel.equals("tmchannel")) { handleExtendedProperties(packet, player); } } private void handleExtendedProperties(Packet250CustomPayload packet, Player player) { DataInputStream inputStream = new DataInputStream(new ByteArrayInputStream(packet.data)); PlayerStatsHandler props = ((PlayerStatsHandler)((EntityPlayer) player).getExtendedProperties(PlayerStatsHandler.EXT_PROP_NAME)); try { props.setGold(inputStream.readInt()); } catch (IOException e) { e.printStackTrace(); return; } } } Kain
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.