From b38cfee5ff63281febc556def515ced33311f21e Mon Sep 17 00:00:00 2001 From: covers1624 Date: Fri, 1 May 2015 01:34:22 +0930 Subject: [PATCH] Fix for #1552 The Server was not syncing the players TPlayerStats to the client until the Armor tab was opened. Added Packet. Send Packet on EntityJoinEvent. Format Derp. Changed to Debug and added Knapsack slot output. --- .../tconstruct/armor/ArmorProxyClient.java | 19 +++++- .../tconstruct/armor/ArmorProxyCommon.java | 45 ++++++++++++++ .../tconstruct/armor/TinkerArmorEvents.java | 18 ++++++ .../util/network/ArmourGuiSyncPacket.java | 62 +++++++++++++++++++ .../util/network/PacketPipeline.java | 2 + 5 files changed, 143 insertions(+), 3 deletions(-) create mode 100644 src/main/java/tconstruct/util/network/ArmourGuiSyncPacket.java diff --git a/src/main/java/tconstruct/armor/ArmorProxyClient.java b/src/main/java/tconstruct/armor/ArmorProxyClient.java index d3ad1915..1dce9516 100644 --- a/src/main/java/tconstruct/armor/ArmorProxyClient.java +++ b/src/main/java/tconstruct/armor/ArmorProxyClient.java @@ -38,6 +38,7 @@ import tconstruct.armor.model.HiddenPlayerModel; import tconstruct.armor.model.WingModel; import tconstruct.armor.player.ArmorExtended; import tconstruct.armor.player.KnapsackInventory; +import tconstruct.armor.player.TPlayerStats; import tconstruct.client.ArmorControls; import tconstruct.client.tabs.InventoryTabArmorExtended; import tconstruct.client.tabs.InventoryTabKnapsack; @@ -58,9 +59,11 @@ public class ArmorProxyClient extends ArmorProxyCommon { public static HiddenPlayerModel glove = new HiddenPlayerModel(0.25F, 4); public static HiddenPlayerModel vest = new HiddenPlayerModel(0.25f, 1); public static BeltModel belt = new BeltModel(); - - public static KnapsackInventory knapsack = new KnapsackInventory(); - public static ArmorExtended armorExtended = new ArmorExtended(); + + public static TPlayerStats playerStats = new TPlayerStats(); + + public static KnapsackInventory knapsack = playerStats.knapsack; + public static ArmorExtended armorExtended = playerStats.armor; @Override public void preInit() { @@ -522,5 +525,15 @@ public class ArmorProxyClient extends ArmorProxyCommon { protected float handleRotationFloat(EntityLivingBase par1EntityLivingBase, float par2) { return (float) par1EntityLivingBase.ticksExisted + par2; } + + @Override + public void updatePlayerStats (TPlayerStats stats) + { + + playerStats.copyFrom(stats, false); + armorExtended = stats.armor; + knapsack = stats.knapsack; + //dumpTPlayerStats(stats); + } } diff --git a/src/main/java/tconstruct/armor/ArmorProxyCommon.java b/src/main/java/tconstruct/armor/ArmorProxyCommon.java index d7df1d28..51d507ee 100644 --- a/src/main/java/tconstruct/armor/ArmorProxyCommon.java +++ b/src/main/java/tconstruct/armor/ArmorProxyCommon.java @@ -2,7 +2,9 @@ package tconstruct.armor; import cpw.mods.fml.common.network.IGuiHandler; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; import net.minecraft.world.World; +import tconstruct.TConstruct; import tconstruct.armor.inventory.*; import tconstruct.armor.player.TPlayerStats; import tconstruct.common.TProxyCommon; @@ -65,4 +67,47 @@ public class ArmorProxyCommon implements IGuiHandler { } + + public void updatePlayerStats(TPlayerStats stats) + { + + } + + public void dumpTPlayerStats(TPlayerStats stats) + { + TConstruct.logger.debug("~~~~~~~~~~~~~~~~~ STATS ~~~~~~~~~~~~~~~~~"); + TConstruct.logger.debug("Player: " + stats.player.get().getCommandSenderName()); + TConstruct.logger.debug("Level: " + stats.level); + TConstruct.logger.debug("BonusHealth: " + stats.bonusHealth); + TConstruct.logger.debug("Damage: " + stats.damage); + TConstruct.logger.debug("Hunger: " + stats.hunger); + TConstruct.logger.debug("Prev Dim: " + stats.previousDimension); + TConstruct.logger.debug("Climb Walls: " + stats.climbWalls); + TConstruct.logger.debug("Activate Goggles: " + stats.activeGoggles); + TConstruct.logger.debug("Beginer Manual: " + stats.beginnerManual); + TConstruct.logger.debug("Material Manual: " + stats.materialManual); + TConstruct.logger.debug("Smeltery Manual: " + stats.smelteryManual); + TConstruct.logger.debug("Weponary Manual: " + stats.weaponryManual); + TConstruct.logger.debug("BattleSign Bonus: " + stats.battlesignBonus); + TConstruct.logger.debug("Derp Level: " + stats.derpLevel); + int i = 0; + for (ItemStack stack : stats.armor.inventory) + { + if (stack != null) + { + TConstruct.logger.debug("Armor Slot: " + i + " Contains: " + stack.getDisplayName()); + } + i++; + } + i = 0; + for (ItemStack stack : stats.knapsack.inventory) + { + if (stack != null) + { + TConstruct.logger.debug("Knapsack Slot: " + i + " Contains: " + stack.getDisplayName()); + } + i++; + } + TConstruct.logger.debug("~~~~~~~~~~~~~~~~~ STATS ~~~~~~~~~~~~~~~~~"); + } } diff --git a/src/main/java/tconstruct/armor/TinkerArmorEvents.java b/src/main/java/tconstruct/armor/TinkerArmorEvents.java index 407b28c5..61fdeebb 100644 --- a/src/main/java/tconstruct/armor/TinkerArmorEvents.java +++ b/src/main/java/tconstruct/armor/TinkerArmorEvents.java @@ -6,8 +6,10 @@ import net.minecraft.entity.boss.*; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.monster.IMob; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.event.entity.living.*; import net.minecraftforge.event.entity.living.LivingEvent.LivingJumpEvent; import tconstruct.TConstruct; @@ -15,6 +17,7 @@ import tconstruct.armor.items.TravelWings; import tconstruct.armor.player.ArmorExtended; import tconstruct.armor.player.TPlayerStats; import tconstruct.library.modifier.IModifyable; +import tconstruct.util.network.ArmourGuiSyncPacket; import tconstruct.world.entity.BlueSlime; public class TinkerArmorEvents @@ -122,4 +125,19 @@ public class TinkerArmorEvents if(dodge > TConstruct.random.nextInt(10)) event.setCanceled(true); } + + @SubscribeEvent + public void joinWorld(EntityJoinWorldEvent event) + { + if (event.entity instanceof EntityPlayerMP) + { + EntityPlayerMP player = (EntityPlayerMP)event.entity; + TPlayerStats stats = TPlayerStats.get(player); + NBTTagCompound tag = new NBTTagCompound(); + stats.saveNBTData(tag); + ArmourGuiSyncPacket syncPacket = new ArmourGuiSyncPacket(tag); + TConstruct.packetPipeline.sendTo(syncPacket, player); + } + + } } diff --git a/src/main/java/tconstruct/util/network/ArmourGuiSyncPacket.java b/src/main/java/tconstruct/util/network/ArmourGuiSyncPacket.java new file mode 100644 index 00000000..e2c56ff0 --- /dev/null +++ b/src/main/java/tconstruct/util/network/ArmourGuiSyncPacket.java @@ -0,0 +1,62 @@ +package tconstruct.util.network; + +import tconstruct.TConstruct; +import tconstruct.armor.TinkerArmor; +import tconstruct.armor.player.TPlayerStats; +import cpw.mods.fml.common.network.ByteBufUtils; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import mantle.common.network.AbstractPacket; +/** + * This Packet is for sending the players TPlayerStats from the server to the client. + * + * @author covers1624 + */ + +public class ArmourGuiSyncPacket extends AbstractPacket +{ + NBTTagCompound playerStats = new NBTTagCompound(); + + public ArmourGuiSyncPacket() + { + } + /** + * For sending the players TPlayerStats to the client. + * @param tag, The players TPlayerStats written to NBT. + */ + public ArmourGuiSyncPacket(NBTTagCompound tag) + { + playerStats = tag; + } + + @Override + public void encodeInto (ChannelHandlerContext ctx, ByteBuf buffer) + { + ByteBufUtils.writeTag(buffer, playerStats); + } + + @Override + public void decodeInto (ChannelHandlerContext ctx, ByteBuf buffer) + { + playerStats = ByteBufUtils.readTag(buffer); + } + + @Override + public void handleClientSide (EntityPlayer player) + { + TConstruct.logger.info("Packet Arrived!"); + TPlayerStats stats = new TPlayerStats(player); + stats.loadNBTData(playerStats); + TinkerArmor.proxy.updatePlayerStats(stats); + + } + + @Override + public void handleServerSide (EntityPlayer player) + { + //NO-OP. this is a Server -> client packet. + } + +} diff --git a/src/main/java/tconstruct/util/network/PacketPipeline.java b/src/main/java/tconstruct/util/network/PacketPipeline.java index c87eaa6b..551213be 100644 --- a/src/main/java/tconstruct/util/network/PacketPipeline.java +++ b/src/main/java/tconstruct/util/network/PacketPipeline.java @@ -135,6 +135,8 @@ public class PacketPipeline extends MessageToMessageCodec