From 98b334e6d72d6a10b14e61980cfc90f083991dcd Mon Sep 17 00:00:00 2001 From: Electroblob77 <35599699+Electroblob77@users.noreply.github.com> Date: Fri, 4 Jan 2019 20:04:43 +0000 Subject: [PATCH] Add condition to only write magic projectile thrower to spawn data if the thrower exists and tweak overrides so it is always written/read last, fixes #71 --- .../wizardry/entity/projectile/EntityBomb.java | 4 ++-- .../entity/projectile/EntityMagicProjectile.java | 13 +++++++++---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/main/java/electroblob/wizardry/entity/projectile/EntityBomb.java b/src/main/java/electroblob/wizardry/entity/projectile/EntityBomb.java index 11cb8562..d7ae1a3b 100644 --- a/src/main/java/electroblob/wizardry/entity/projectile/EntityBomb.java +++ b/src/main/java/electroblob/wizardry/entity/projectile/EntityBomb.java @@ -36,14 +36,14 @@ public abstract class EntityBomb extends EntityMagicProjectile { @Override public void writeSpawnData(ByteBuf buffer){ - super.writeSpawnData(buffer); buffer.writeFloat(blastMultiplier); + super.writeSpawnData(buffer); } @Override public void readSpawnData(ByteBuf buffer){ - super.readSpawnData(buffer); blastMultiplier = buffer.readFloat(); + super.readSpawnData(buffer); } @Override diff --git a/src/main/java/electroblob/wizardry/entity/projectile/EntityMagicProjectile.java b/src/main/java/electroblob/wizardry/entity/projectile/EntityMagicProjectile.java index 3aad3978..337776ac 100644 --- a/src/main/java/electroblob/wizardry/entity/projectile/EntityMagicProjectile.java +++ b/src/main/java/electroblob/wizardry/entity/projectile/EntityMagicProjectile.java @@ -107,15 +107,20 @@ public abstract class EntityMagicProjectile extends EntityThrowable implements I } @Override + // For now, we're only writing when the thrower exists, so subclasses MUST CALL SUPER LAST. + // TODO: Figure out whether there's a default value we can write that is never used as an entity id (0? -1? +/-MAX_VALUE?) public void writeSpawnData(ByteBuf data){ - data.writeInt(this.getThrower().getEntityId()); + if(this.getThrower() != null) data.writeInt(this.getThrower().getEntityId()); } @Override + // For now, we're only writing when the thrower exists, so subclasses MUST CALL SUPER LAST. public void readSpawnData(ByteBuf data){ - Entity entity = this.world.getEntityByID(data.readInt()); - if(entity instanceof EntityLivingBase) this.thrower = (EntityLivingBase)entity; - this.ignoreEntity = this.thrower; + if(data.isReadable()){ + Entity entity = this.world.getEntityByID(data.readInt()); + if(entity instanceof EntityLivingBase) this.thrower = (EntityLivingBase)entity; + this.ignoreEntity = this.thrower; + } } }