diff --git a/src/main/java/com/gildedgames/the_aether/items/food/ItemLifeShard.java b/src/main/java/com/gildedgames/the_aether/items/food/ItemLifeShard.java index b233230..2bc89bd 100644 --- a/src/main/java/com/gildedgames/the_aether/items/food/ItemLifeShard.java +++ b/src/main/java/com/gildedgames/the_aether/items/food/ItemLifeShard.java @@ -33,7 +33,7 @@ public class ItemLifeShard extends Item { } if (playerAether.getShardsUsed() < playerAether.getMaxShardCount()) { - playerAether.updateShardCount(playerAether.getShardsUsed() + 1); + playerAether.updateShardCount(1); --heldItem.stackSize; diff --git a/src/main/java/com/gildedgames/the_aether/network/AetherNetwork.java b/src/main/java/com/gildedgames/the_aether/network/AetherNetwork.java index 6b29cfc..871f2f1 100644 --- a/src/main/java/com/gildedgames/the_aether/network/AetherNetwork.java +++ b/src/main/java/com/gildedgames/the_aether/network/AetherNetwork.java @@ -56,6 +56,8 @@ public class AetherNetwork { INSTANCE.registerMessage(PacketCheckKey.class, PacketCheckKey.class, discriminant++, Side.SERVER); INSTANCE.registerMessage(PacketSwetJump.class, PacketSwetJump.class, discriminant++, Side.CLIENT); + + INSTANCE.registerMessage(PacketUpdateLifeShardCount.class, PacketUpdateLifeShardCount.class, discriminant++, Side.CLIENT); } public static void sendToAll(IMessage message) { diff --git a/src/main/java/com/gildedgames/the_aether/network/packets/PacketUpdateLifeShardCount.java b/src/main/java/com/gildedgames/the_aether/network/packets/PacketUpdateLifeShardCount.java new file mode 100644 index 0000000..9678ea0 --- /dev/null +++ b/src/main/java/com/gildedgames/the_aether/network/packets/PacketUpdateLifeShardCount.java @@ -0,0 +1,69 @@ +package com.gildedgames.the_aether.network.packets; + +import com.gildedgames.the_aether.api.AetherAPI; +import com.gildedgames.the_aether.api.player.IPlayerAether; +import com.gildedgames.the_aether.player.PlayerAether; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; + +public class PacketUpdateLifeShardCount extends AetherPacket +{ + private int entityID; + + private int count; + + public PacketUpdateLifeShardCount() + { + + } + + public PacketUpdateLifeShardCount(EntityPlayer thePlayer, int count) + { + this.entityID = thePlayer.getEntityId(); + this.count = count; + } + + @Override + public void fromBytes(ByteBuf buf) + { + this.entityID = buf.readInt(); + this.count = buf.readInt(); + } + + @Override + public void toBytes(ByteBuf buf) + { + buf.writeInt(this.entityID); + buf.writeInt(this.count); + } + + @Override + public void handleClient(PacketUpdateLifeShardCount message, EntityPlayer player) + { + if (player != null && player.worldObj != null) + { + Entity entity = player.worldObj.getEntityByID(message.entityID); + + if (entity instanceof EntityPlayer) + { + EntityPlayer parent = (EntityPlayer) entity; + + IPlayerAether iPlayerAether = AetherAPI.get(parent); + + if (iPlayerAether != null) + { + PlayerAether playerAether = (PlayerAether) iPlayerAether; + + playerAether.shardCount = message.count; + } + } + } + } + + @Override + public void handleServer(PacketUpdateLifeShardCount message, EntityPlayer player) + { + + } +} \ No newline at end of file diff --git a/src/main/java/com/gildedgames/the_aether/player/PlayerAether.java b/src/main/java/com/gildedgames/the_aether/player/PlayerAether.java index c70a003..9ad3f98 100644 --- a/src/main/java/com/gildedgames/the_aether/player/PlayerAether.java +++ b/src/main/java/com/gildedgames/the_aether/player/PlayerAether.java @@ -59,7 +59,7 @@ public class PlayerAether implements IPlayerAether { public final ArrayList clouds = new ArrayList(2); - private int shardCount; + public int shardCount; public DonatorMoaSkin donatorMoaSkin = new DonatorMoaSkin(); @@ -99,6 +99,10 @@ public class PlayerAether implements IPlayerAether { public int poisonTime = 0, cureTime = 0; + private UUID uuid = UUID.fromString("df6eabe7-6947-4a56-9099-002f90370706"); + + private AttributeModifier healthModifier; + public PlayerAether() { this.shouldRenderHalo = true; this.shouldRenderGlow = false; @@ -118,6 +122,8 @@ public class PlayerAether implements IPlayerAether { @Override public void onUpdate() { + System.out.println("s " + this.shardCount); + if (!this.player.worldObj.isRemote) { AetherNetwork.sendToAll(new PacketPerkChanged(this.getEntity().getEntityId(), EnumAetherPerkType.Halo, this.shouldRenderHalo)); @@ -502,7 +508,11 @@ public class PlayerAether implements IPlayerAether { this.shouldGetPortal = aetherTag.getBoolean("get_portal"); } - this.updateShardCount(aetherTag.getInteger("shardCount")); + if (aetherTag.hasKey("shardCount")) + { + this. shardCount = aetherTag.getInteger("shardCount"); + } + this.getAccessoryInventory().readFromNBT(aetherTag.getTagList("accessories", 10)); this.setBedLocation(new ChunkCoordinates(aetherTag.getInteger("bedX"), aetherTag.getInteger("bedY"), aetherTag.getInteger("bedZ"))); } @@ -539,16 +549,24 @@ public class PlayerAether implements IPlayerAether { @Override public void updateShardCount(int amount) { - UUID uuid = UUID.fromString("df6eabe7-6947-4a56-9099-002f90370706"); - AttributeModifier healthModifier = new AttributeModifier(uuid, "Aether Health Modifier", amount * 2.0D, 0); - this.shardCount = amount; + if (!this.getEntity().worldObj.isRemote) + { + if (this.getShardsUsed() < this.getMaxShardCount()) + { + this.shardCount += amount; + AetherNetwork.sendToAll(new PacketUpdateLifeShardCount(this.player, this.shardCount)); - if (this.getEntity().getEntityAttribute(SharedMonsterAttributes.maxHealth).getModifier(uuid) != null) { - this.getEntity().getEntityAttribute(SharedMonsterAttributes.maxHealth).removeModifier(healthModifier); + this.healthModifier = new AttributeModifier(uuid, "Aether Health Modifier", (this.shardCount * 2.0D), 0); + + if (this.player.getEntityAttribute(SharedMonsterAttributes.maxHealth).getModifier(this.uuid) != null) + { + this.player.getEntityAttribute(SharedMonsterAttributes.maxHealth).removeModifier(this.healthModifier); + } + + this.player.getEntityAttribute(SharedMonsterAttributes.maxHealth).applyModifier(this.healthModifier); + } } - - this.getEntity().getEntityAttribute(SharedMonsterAttributes.maxHealth).applyModifier(healthModifier); } @Override diff --git a/src/main/java/com/gildedgames/the_aether/player/PlayerAetherEvents.java b/src/main/java/com/gildedgames/the_aether/player/PlayerAetherEvents.java index b76dc0d..5ba3f0a 100644 --- a/src/main/java/com/gildedgames/the_aether/player/PlayerAetherEvents.java +++ b/src/main/java/com/gildedgames/the_aether/player/PlayerAetherEvents.java @@ -49,7 +49,7 @@ public class PlayerAetherEvents { PlayerAether playerAether = PlayerAether.get(event.player); AetherNetwork.sendTo(new PacketAccessory(playerAether), (EntityPlayerMP) event.player); - playerAether.updateShardCount(playerAether.getShardsUsed()); + playerAether.updateShardCount(0); if (!AetherConfig.shouldAetherStart()) { @@ -67,7 +67,7 @@ public class PlayerAetherEvents { PlayerAether original = PlayerAether.get(event.original); PlayerAether playerAether = PlayerAether.get(event.entityPlayer); - playerAether.updateShardCount(original.getShardsUsed()); + playerAether.shardCount = original.shardCount; if (!event.wasDeath || event.entityPlayer.worldObj.getGameRules().getGameRuleBooleanValue("keepInventory")) { playerAether.setAccessoryInventory(original.getAccessoryInventory()); @@ -85,7 +85,9 @@ public class PlayerAetherEvents { PlayerAether playerAether = PlayerAether.get(event.player); AetherNetwork.sendTo(new PacketAccessory(playerAether), (EntityPlayerMP) event.player); - playerAether.updateShardCount(playerAether.getShardsUsed()); + + playerAether.updateShardCount(0); + event.player.setHealth(event.player.getMaxHealth()); playerAether.isPoisoned = false; playerAether.poisonTime = 0; @@ -100,7 +102,7 @@ public class PlayerAetherEvents { PlayerAether playerAether = PlayerAether.get(event.player); AetherNetwork.sendTo(new PacketAccessory(playerAether), (EntityPlayerMP) event.player); - playerAether.updateShardCount(playerAether.getShardsUsed()); + playerAether.updateShardCount(0); } }