From 4a3dcbf642878329d1e1f4b70e93fe99659f0c7b Mon Sep 17 00:00:00 2001 From: DM <83300800+mak8427@users.noreply.github.com> Date: Sat, 18 Jan 2025 19:41:12 +0000 Subject: [PATCH] Add Kill Count Tracking and GUI Updates for TurretBase (#9) Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../client/gui/TurretBaseTierFiveGui.java | 3 + .../client/gui/TurretBaseTierFourGui.java | 2 + .../client/gui/TurretBaseTierOneGui.java | 2 + .../client/gui/TurretBaseTierThreeGui.java | 2 + .../client/gui/TurretBaseTierTwoGui.java | 2 + .../projectiles/BlazingClayProjectile.java | 33 +++++++---- .../entity/projectiles/BulletProjectile.java | 57 ++++++++++++------- .../DisposableTurretProjectile.java | 37 ++++++------ .../projectiles/FerroSlugProjectile.java | 30 ++++++---- .../entity/projectiles/GrenadeProjectile.java | 32 ++++++----- .../entity/projectiles/LaserProjectile.java | 43 ++++++++------ .../entity/projectiles/RocketProjectile.java | 26 ++++----- .../entity/projectiles/TurretProjectile.java | 2 +- .../network/messages/MessageTurretBase.java | 8 ++- .../tileentity/turretbase/TurretBase.java | 16 ++++++ 15 files changed, 189 insertions(+), 106 deletions(-) diff --git a/src/main/java/openmodularturrets/client/gui/TurretBaseTierFiveGui.java b/src/main/java/openmodularturrets/client/gui/TurretBaseTierFiveGui.java index b89acbc3..e7c63ac3 100644 --- a/src/main/java/openmodularturrets/client/gui/TurretBaseTierFiveGui.java +++ b/src/main/java/openmodularturrets/client/gui/TurretBaseTierFiveGui.java @@ -63,6 +63,9 @@ protected void drawGuiContainerForegroundLayer(int param1, int param2) { targetInfo.add("\u00A77Attack Neutrals: \u00A7b" + base.isAttacksNeutrals()); targetInfo.add("\u00A77Attack Players: \u00A7b" + base.isAttacksPlayers()); + targetInfo.add(""); + targetInfo.add("\u00A77Kill Count: \u00A7b" + base.getKillCount()); + this.drawHoveringText(targetInfo, -128, 17, fontRenderer); } diff --git a/src/main/java/openmodularturrets/client/gui/TurretBaseTierFourGui.java b/src/main/java/openmodularturrets/client/gui/TurretBaseTierFourGui.java index 424a8bc8..88b551fc 100644 --- a/src/main/java/openmodularturrets/client/gui/TurretBaseTierFourGui.java +++ b/src/main/java/openmodularturrets/client/gui/TurretBaseTierFourGui.java @@ -62,6 +62,8 @@ protected void drawGuiContainerForegroundLayer(int param1, int param2) { targetInfo.add("\u00A77Attack Mobs: \u00A7b" + base.isAttacksMobs()); targetInfo.add("\u00A77Attack Neutrals: \u00A7b" + base.isAttacksNeutrals()); targetInfo.add("\u00A77Attack Players: \u00A7b" + base.isAttacksPlayers()); + targetInfo.add(""); + targetInfo.add("\u00A77Kill Count: \u00A7b" + base.getKillCount()); this.drawHoveringText(targetInfo, -128, 17, fontRenderer); } diff --git a/src/main/java/openmodularturrets/client/gui/TurretBaseTierOneGui.java b/src/main/java/openmodularturrets/client/gui/TurretBaseTierOneGui.java index c0f87d3d..45bbae3e 100644 --- a/src/main/java/openmodularturrets/client/gui/TurretBaseTierOneGui.java +++ b/src/main/java/openmodularturrets/client/gui/TurretBaseTierOneGui.java @@ -61,6 +61,8 @@ protected void drawGuiContainerForegroundLayer(int param1, int param2) { targetInfo.add("\u00A77Attack Mobs: \u00A7b" + base.isAttacksMobs()); targetInfo.add("\u00A77Attack Neutrals: \u00A7b" + base.isAttacksNeutrals()); targetInfo.add("\u00A77Attack Players: \u00A7b" + base.isAttacksPlayers()); + targetInfo.add(""); + targetInfo.add("\u00A77Kill Count: \u00A7b" + base.getKillCount()); this.drawHoveringText(targetInfo, -128, 17, fontRenderer); } diff --git a/src/main/java/openmodularturrets/client/gui/TurretBaseTierThreeGui.java b/src/main/java/openmodularturrets/client/gui/TurretBaseTierThreeGui.java index fd16589a..3448410f 100644 --- a/src/main/java/openmodularturrets/client/gui/TurretBaseTierThreeGui.java +++ b/src/main/java/openmodularturrets/client/gui/TurretBaseTierThreeGui.java @@ -62,6 +62,8 @@ protected void drawGuiContainerForegroundLayer(int param1, int param2) { targetInfo.add("\u00A77Attack Mobs: \u00A7b" + base.isAttacksMobs()); targetInfo.add("\u00A77Attack Neutrals: \u00A7b" + base.isAttacksNeutrals()); targetInfo.add("\u00A77Attack Players: \u00A7b" + base.isAttacksPlayers()); + targetInfo.add(""); + targetInfo.add("\u00A77Kill Count: \u00A7b" + base.getKillCount()); this.drawHoveringText(targetInfo, -128, 17, fontRenderer); } diff --git a/src/main/java/openmodularturrets/client/gui/TurretBaseTierTwoGui.java b/src/main/java/openmodularturrets/client/gui/TurretBaseTierTwoGui.java index a517fe82..d70357df 100644 --- a/src/main/java/openmodularturrets/client/gui/TurretBaseTierTwoGui.java +++ b/src/main/java/openmodularturrets/client/gui/TurretBaseTierTwoGui.java @@ -62,6 +62,8 @@ protected void drawGuiContainerForegroundLayer(int param1, int param2) { targetInfo.add("\u00A77Attack Mobs: \u00A7b" + base.isAttacksMobs()); targetInfo.add("\u00A77Attack Neutrals: \u00A7b" + base.isAttacksNeutrals()); targetInfo.add("\u00A77Attack Players: \u00A7b" + base.isAttacksPlayers()); + targetInfo.add(""); + targetInfo.add("\u00A77Kill Count: \u00A7b" + base.getKillCount()); this.drawHoveringText(targetInfo, -128, 17, fontRenderer); } diff --git a/src/main/java/openmodularturrets/entity/projectiles/BlazingClayProjectile.java b/src/main/java/openmodularturrets/entity/projectiles/BlazingClayProjectile.java index d3050c6e..4ce9d425 100644 --- a/src/main/java/openmodularturrets/entity/projectiles/BlazingClayProjectile.java +++ b/src/main/java/openmodularturrets/entity/projectiles/BlazingClayProjectile.java @@ -68,25 +68,38 @@ protected void onImpact(MovingObjectPosition movingobjectposition) { int damage = ConfigHandler.getIncendiary_turret().getDamage(); - if (isAmped) { - if (movingobjectposition.entityHit instanceof EntityLivingBase) { - EntityLivingBase elb = (EntityLivingBase) movingobjectposition.entityHit; - damage += ((int) elb.getHealth() * (0.05 * amp_level)); - } + if (isAmped && movingobjectposition.entityHit instanceof EntityLivingBase) { + EntityLivingBase elb = (EntityLivingBase) movingobjectposition.entityHit; + damage += ((int) elb.getHealth() * (0.05 * amp_level)); } for (Entity mob : targets) { + boolean wasAlive = !mob.isDead; + float healthBefore = 0; + + if (mob instanceof EntityLivingBase) { + EntityLivingBase elb = (EntityLivingBase) mob; + healthBefore = elb.getHealth(); + + if (!(mob instanceof EntityPlayer) || canDamagePlayer((EntityPlayer) mob)) { + elb.attackEntityFrom(new NormalDamageSource("bullet"), damage); + elb.hurtResistantTime = 0; + elb.setFire(5); + } - if (mob instanceof EntityPlayer) { - if (canDamagePlayer((EntityPlayer) mob)) { - mob.attackEntityFrom(new NormalDamageSource("bullet"), damage); - mob.hurtResistantTime = 0; - mob.setFire(5); + float healthAfter = elb.getHealth(); + if (wasAlive && healthBefore > 0 && healthAfter <= 0) { + turretBase.onKill(mob); } } else { + // Handle non-living base entities mob.attackEntityFrom(new NormalDamageSource("bullet"), damage); mob.hurtResistantTime = 0; mob.setFire(5); + + if (wasAlive && mob.isDead) { + turretBase.onKill(mob); + } } } } diff --git a/src/main/java/openmodularturrets/entity/projectiles/BulletProjectile.java b/src/main/java/openmodularturrets/entity/projectiles/BulletProjectile.java index a8e0fbd9..b040b20f 100644 --- a/src/main/java/openmodularturrets/entity/projectiles/BulletProjectile.java +++ b/src/main/java/openmodularturrets/entity/projectiles/BulletProjectile.java @@ -6,6 +6,7 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; @@ -35,46 +36,62 @@ public void onEntityUpdate() { @Override protected void onImpact(MovingObjectPosition movingobjectposition) { + EntityPlayer player = worldObj.getClosestPlayerToEntity(this, 50); // Closest player (if needed) + if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { Block hitBlock = worldObj .getBlock(movingobjectposition.blockX, movingobjectposition.blockY, movingobjectposition.blockZ); if (hitBlock != null && (!hitBlock.getMaterial().isSolid() || hitBlock instanceof BlockAbstractTurretHead)) { - // Go through non-solid block or turrets - return; + if (player != null) { + player.addChatMessage(new ChatComponentText("Hit non-solid block or turret head")); + } + return; // Stop if hitting a non-solid block or turret head } } + // Check if we hit an entity and we're on the server side if (movingobjectposition.entityHit != null && !worldObj.isRemote) { - if (movingobjectposition.typeOfHit.equals(0)) { - if (worldObj.isAirBlock( - movingobjectposition.blockX, - movingobjectposition.blockY, - movingobjectposition.blockZ)) { + // Determine final damage + int damage = ConfigHandler.getGunTurretSettings().getDamage(); + boolean wasAlive = !movingobjectposition.entityHit.isDead; + + if (isAmped && movingobjectposition.entityHit instanceof EntityLivingBase) { + EntityLivingBase elb = (EntityLivingBase) movingobjectposition.entityHit; + damage += ((int) elb.getHealth() * (0.1 * amp_level)); + } + + // Check if it's a player and if we can damage them + if (movingobjectposition.entityHit instanceof EntityPlayer) { + if (!canDamagePlayer((EntityPlayer) movingobjectposition.entityHit)) { + // If we can't damage the player, exit early return; } } - int damage = ConfigHandler.getGunTurretSettings().getDamage(); + // Single damage call + if (movingobjectposition.entityHit instanceof EntityLivingBase) { + EntityLivingBase elb = (EntityLivingBase) movingobjectposition.entityHit; + // Track health before dealing damage + float healthBefore = elb.getHealth(); - if (isAmped) { - if (movingobjectposition.entityHit instanceof EntityLivingBase) { - EntityLivingBase elb = (EntityLivingBase) movingobjectposition.entityHit; - damage += ((int) elb.getHealth() * (0.1 * amp_level)); - } - } + // Deal damage once + elb.attackEntityFrom(new NormalDamageSource("bullet"), damage); + elb.hurtResistantTime = 0; - if (movingobjectposition.entityHit instanceof EntityPlayer) { - if (canDamagePlayer((EntityPlayer) movingobjectposition.entityHit)) { - movingobjectposition.entityHit.attackEntityFrom(new NormalDamageSource("bullet"), damage); - movingobjectposition.entityHit.hurtResistantTime = 0; + // Check if the entity was killed + float healthAfter = elb.getHealth(); + if (wasAlive && healthBefore > 0 && healthAfter <= 0) { + // If final blow, increment kill count or handle kill logic + turretBase.onKill(elb); } } else { + // If the hit entity is not a LivingEntity, just deal damage once movingobjectposition.entityHit.attackEntityFrom(new NormalDamageSource("bullet"), damage); - movingobjectposition.entityHit.hurtResistantTime = 0; } } + // If we didn't hit an entity, play a sound (optional) if (movingobjectposition.entityHit == null && !worldObj.isRemote) { Random random = new Random(); worldObj.playSoundEffect( @@ -85,6 +102,8 @@ protected void onImpact(MovingObjectPosition movingobjectposition) { ConfigHandler.getTurretSoundVolume(), random.nextFloat() + 0.5F); } + + // Destroy the projectile after impact this.setDead(); } diff --git a/src/main/java/openmodularturrets/entity/projectiles/DisposableTurretProjectile.java b/src/main/java/openmodularturrets/entity/projectiles/DisposableTurretProjectile.java index 47ba355c..2999ac09 100644 --- a/src/main/java/openmodularturrets/entity/projectiles/DisposableTurretProjectile.java +++ b/src/main/java/openmodularturrets/entity/projectiles/DisposableTurretProjectile.java @@ -3,7 +3,6 @@ import net.minecraft.block.Block; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; @@ -58,32 +57,32 @@ protected void onImpact(MovingObjectPosition movingobjectposition) { } if (movingobjectposition.entityHit != null && !worldObj.isRemote) { - if (movingobjectposition.typeOfHit.equals(0)) { - if (worldObj.isAirBlock( - movingobjectposition.blockX, - movingobjectposition.blockY, - movingobjectposition.blockZ)) { - return; - } - } - int damage = ConfigHandler.getDisposableTurretSettings().getDamage(); + boolean wasAlive = !movingobjectposition.entityHit.isDead; - if (isAmped) { - if (movingobjectposition.entityHit instanceof EntityLivingBase) { - EntityLivingBase elb = (EntityLivingBase) movingobjectposition.entityHit; - damage += ((int) elb.getHealth() * (0.05 * amp_level)); - } + if (isAmped && movingobjectposition.entityHit instanceof EntityLivingBase) { + EntityLivingBase elb = (EntityLivingBase) movingobjectposition.entityHit; + damage += ((int) elb.getHealth() * (0.05 * amp_level)); } - if (movingobjectposition.entityHit instanceof EntityPlayer) { - if (canDamagePlayer((EntityPlayer) movingobjectposition.entityHit)) { - movingobjectposition.entityHit.attackEntityFrom(new NormalDamageSource("disposable"), damage); - movingobjectposition.entityHit.hurtResistantTime = 0; + if (movingobjectposition.entityHit instanceof EntityLivingBase) { + EntityLivingBase elb = (EntityLivingBase) movingobjectposition.entityHit; + float healthBefore = elb.getHealth(); + + elb.attackEntityFrom(new NormalDamageSource("disposable"), damage); + elb.hurtResistantTime = 0; + + float healthAfter = elb.getHealth(); + if (wasAlive && healthBefore > 0 && healthAfter <= 0) { + turretBase.onKill(elb); } } else { movingobjectposition.entityHit.attackEntityFrom(new NormalDamageSource("disposable"), damage); movingobjectposition.entityHit.hurtResistantTime = 0; + + if (wasAlive && movingobjectposition.entityHit.isDead) { + turretBase.onKill(movingobjectposition.entityHit); + } } } diff --git a/src/main/java/openmodularturrets/entity/projectiles/FerroSlugProjectile.java b/src/main/java/openmodularturrets/entity/projectiles/FerroSlugProjectile.java index 242c8524..9ec3e3ed 100644 --- a/src/main/java/openmodularturrets/entity/projectiles/FerroSlugProjectile.java +++ b/src/main/java/openmodularturrets/entity/projectiles/FerroSlugProjectile.java @@ -4,7 +4,6 @@ import net.minecraft.block.Block; import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; @@ -46,7 +45,7 @@ protected void onImpact(MovingObjectPosition movingobjectposition) { } if (movingobjectposition.entityHit != null && !worldObj.isRemote) { - if (movingobjectposition.typeOfHit.equals(0)) { + if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { if (worldObj.isAirBlock( movingobjectposition.blockX, movingobjectposition.blockY, @@ -56,12 +55,11 @@ protected void onImpact(MovingObjectPosition movingobjectposition) { } int damage = ConfigHandler.getRailgun_turret().getDamage(); + boolean wasAlive = !movingobjectposition.entityHit.isDead; - if (isAmped) { - if (movingobjectposition.entityHit instanceof EntityLivingBase) { - EntityLivingBase elb = (EntityLivingBase) movingobjectposition.entityHit; - damage += ((int) elb.getHealth() * (0.25 * amp_level)); - } + if (isAmped && movingobjectposition.entityHit instanceof EntityLivingBase) { + EntityLivingBase elb = (EntityLivingBase) movingobjectposition.entityHit; + damage += ((int) elb.getHealth() * (0.25 * amp_level)); } Random random = new Random(); @@ -73,14 +71,24 @@ protected void onImpact(MovingObjectPosition movingobjectposition) { ConfigHandler.getTurretSoundVolume(), random.nextFloat() + 0.5F); - if (movingobjectposition.entityHit instanceof EntityPlayer) { - if (canDamagePlayer((EntityPlayer) movingobjectposition.entityHit)) { - movingobjectposition.entityHit.attackEntityFrom(new ArmorBypassDamageSource("ferroslug"), damage); - movingobjectposition.entityHit.hurtResistantTime = 0; + if (movingobjectposition.entityHit instanceof EntityLivingBase) { + EntityLivingBase elb = (EntityLivingBase) movingobjectposition.entityHit; + float healthBefore = elb.getHealth(); + + elb.attackEntityFrom(new ArmorBypassDamageSource("ferroslug"), damage); + elb.hurtResistantTime = 0; + + float healthAfter = elb.getHealth(); + if (wasAlive && healthBefore > 0 && healthAfter <= 0) { + turretBase.onKill(elb); } } else { movingobjectposition.entityHit.attackEntityFrom(new ArmorBypassDamageSource("ferroslug"), damage); movingobjectposition.entityHit.hurtResistantTime = 0; + + if (wasAlive && movingobjectposition.entityHit.isDead) { + turretBase.onKill(movingobjectposition.entityHit); + } } } diff --git a/src/main/java/openmodularturrets/entity/projectiles/GrenadeProjectile.java b/src/main/java/openmodularturrets/entity/projectiles/GrenadeProjectile.java index a942529a..9c2f456a 100644 --- a/src/main/java/openmodularturrets/entity/projectiles/GrenadeProjectile.java +++ b/src/main/java/openmodularturrets/entity/projectiles/GrenadeProjectile.java @@ -4,7 +4,6 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MovingObjectPosition; @@ -44,28 +43,35 @@ public void onEntityUpdate() { List targets = worldObj.getEntitiesWithinAABB(EntityLivingBase.class, axis); for (Entity mob : targets) { - int damage = ConfigHandler.getGrenadeTurretSettings().getDamage(); + boolean wasAlive = !mob.isDead; - if (isAmped) { - if (mob instanceof EntityLivingBase) { - EntityLivingBase elb = (EntityLivingBase) mob; - damage += ((int) elb.getHealth() * (0.25 * amp_level)); - } + if (isAmped && mob instanceof EntityLivingBase) { + EntityLivingBase elb = (EntityLivingBase) mob; + damage += ((int) elb.getHealth() * (0.25 * amp_level)); } - if (mob instanceof EntityPlayer) { - if (canDamagePlayer((EntityPlayer) mob)) { - mob.attackEntityFrom(new NormalDamageSource("grenade"), damage * 0.9F); - mob.attackEntityFrom(new ArmorBypassDamageSource("grenade"), damage * 0.1F); - mob.hurtResistantTime = 0; + if (mob instanceof EntityLivingBase) { + EntityLivingBase elb = (EntityLivingBase) mob; + float healthBefore = elb.getHealth(); + + mob.attackEntityFrom(new NormalDamageSource("grenade"), damage * 0.9F); + mob.attackEntityFrom(new ArmorBypassDamageSource("grenade"), damage * 0.1F); + mob.hurtResistantTime = 0; + + float healthAfter = elb.getHealth(); + if (wasAlive && healthBefore > 0 && healthAfter <= 0) { + turretBase.onKill(elb); } } else { mob.attackEntityFrom(new NormalDamageSource("grenade"), damage * 0.9F); mob.attackEntityFrom(new ArmorBypassDamageSource("grenade"), damage * 0.1F); mob.hurtResistantTime = 0; - } + if (wasAlive && mob.isDead) { + turretBase.onKill(mob); + } + } } } this.setDead(); diff --git a/src/main/java/openmodularturrets/entity/projectiles/LaserProjectile.java b/src/main/java/openmodularturrets/entity/projectiles/LaserProjectile.java index a1b83f2e..ae7936aa 100644 --- a/src/main/java/openmodularturrets/entity/projectiles/LaserProjectile.java +++ b/src/main/java/openmodularturrets/entity/projectiles/LaserProjectile.java @@ -62,26 +62,33 @@ protected void onImpact(MovingObjectPosition movingobjectposition) { ConfigHandler.getTurretSoundVolume(), random.nextFloat() + 0.5F); - if (movingobjectposition.entityHit != null && !worldObj.isRemote) { - int damage = ConfigHandler.getLaserTurretSettings().getDamage(); - - if (isAmped) { - if (movingobjectposition.entityHit instanceof EntityLivingBase) { - EntityLivingBase elb = (EntityLivingBase) movingobjectposition.entityHit; - damage += ((int) elb.getHealth() * (0.1 * amp_level)); - } + int damage = ConfigHandler.getLaserTurretSettings().getDamage(); + boolean wasAlive = !movingobjectposition.entityHit.isDead; + + if (isAmped && movingobjectposition.entityHit instanceof EntityLivingBase) { + EntityLivingBase elb = (EntityLivingBase) movingobjectposition.entityHit; + damage += ((int) elb.getHealth() * (0.1 * amp_level)); + } + + if (movingobjectposition.entityHit instanceof EntityLivingBase) { + EntityLivingBase elb = (EntityLivingBase) movingobjectposition.entityHit; + float healthBefore = elb.getHealth(); + + elb.setFire(2); + elb.attackEntityFrom(new NormalDamageSource("laser"), damage); + elb.hurtResistantTime = 0; + + float healthAfter = elb.getHealth(); + if (wasAlive && healthBefore > 0 && healthAfter <= 0) { + turretBase.onKill(elb); } + } else { + movingobjectposition.entityHit.setFire(2); + movingobjectposition.entityHit.attackEntityFrom(new NormalDamageSource("laser"), damage); + movingobjectposition.entityHit.hurtResistantTime = 0; - if (movingobjectposition.entityHit instanceof EntityPlayer) { - if (canDamagePlayer((EntityPlayer) movingobjectposition.entityHit)) { - movingobjectposition.entityHit.setFire(2); - movingobjectposition.entityHit.attackEntityFrom(new NormalDamageSource("laser"), damage); - movingobjectposition.entityHit.hurtResistantTime = 0; - } - } else { - movingobjectposition.entityHit.setFire(2); - movingobjectposition.entityHit.attackEntityFrom(new NormalDamageSource("laser"), damage); - movingobjectposition.entityHit.hurtResistantTime = 0; + if (wasAlive && movingobjectposition.entityHit.isDead) { + turretBase.onKill(movingobjectposition.entityHit); } } } diff --git a/src/main/java/openmodularturrets/entity/projectiles/RocketProjectile.java b/src/main/java/openmodularturrets/entity/projectiles/RocketProjectile.java index 6596ec58..dc823bcc 100644 --- a/src/main/java/openmodularturrets/entity/projectiles/RocketProjectile.java +++ b/src/main/java/openmodularturrets/entity/projectiles/RocketProjectile.java @@ -73,7 +73,6 @@ public void onEntityUpdate() { @Override protected void onImpact(MovingObjectPosition movingobjectposition) { - if (ConfigHandler.canRocketsHome && this.ticksExisted <= 5) { return; } @@ -85,17 +84,16 @@ protected void onImpact(MovingObjectPosition movingobjectposition) { if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { Block hitBlock = worldObj .getBlock(movingobjectposition.blockX, movingobjectposition.blockY, movingobjectposition.blockZ); - if (hitBlock != null && !hitBlock.getMaterial().isSolid() || worldObj.isAirBlock( + if (hitBlock != null && (!hitBlock.getMaterial().isSolid() || worldObj.isAirBlock( movingobjectposition.blockX, movingobjectposition.blockY, - movingobjectposition.blockZ)) { - // Go through non solid block + movingobjectposition.blockZ))) { + // Go through non-solid block return; } } if (!worldObj.isRemote) { - worldObj.createExplosion(null, posX, posY, posZ, 0.1F, true); AxisAlignedBB axis = AxisAlignedBB.getBoundingBox( this.posX - 5, @@ -107,14 +105,12 @@ protected void onImpact(MovingObjectPosition movingobjectposition) { List targets = worldObj.getEntitiesWithinAABB(EntityLivingBase.class, axis); for (Entity mob : targets) { - int damage = ConfigHandler.getRocketTurretSettings().getDamage(); + boolean wasAlive = !mob.isDead; - if (isAmped) { - if (mob instanceof EntityLivingBase) { - EntityLivingBase elb = (EntityLivingBase) mob; - damage += ((int) elb.getHealth() * (0.25 * amp_level)); - } + if (isAmped && mob instanceof EntityLivingBase) { + EntityLivingBase elb = (EntityLivingBase) mob; + damage += ((int) elb.getHealth() * (0.25 * amp_level)); } if (mob instanceof EntityPlayer) { @@ -122,15 +118,17 @@ protected void onImpact(MovingObjectPosition movingobjectposition) { mob.attackEntityFrom(new NormalDamageSource("rocket"), damage); mob.hurtResistantTime = 0; } - } - - if (ConfigHandler.isCanRocketsHurtEnderDragon() && mob instanceof EntityDragon) { + } else if (ConfigHandler.isCanRocketsHurtEnderDragon() && mob instanceof EntityDragon) { ((EntityDragon) mob).setHealth(((EntityDragon) mob).getHealth() - damage); mob.hurtResistantTime = 0; } else { mob.attackEntityFrom(new NormalDamageSource("rocket"), damage); mob.hurtResistantTime = 0; } + + if (wasAlive && mob.isDead) { + turretBase.onKill(mob); + } } } this.setDead(); diff --git a/src/main/java/openmodularturrets/entity/projectiles/TurretProjectile.java b/src/main/java/openmodularturrets/entity/projectiles/TurretProjectile.java index 63414023..06de2b80 100644 --- a/src/main/java/openmodularturrets/entity/projectiles/TurretProjectile.java +++ b/src/main/java/openmodularturrets/entity/projectiles/TurretProjectile.java @@ -17,7 +17,7 @@ public abstract class TurretProjectile extends EntityThrowable { boolean isAmped; int amp_level; ItemStack ammo; - private TurretBase turretBase; + protected TurretBase turretBase; TurretProjectile(World p_i1776_1_) { super(p_i1776_1_); diff --git a/src/main/java/openmodularturrets/network/messages/MessageTurretBase.java b/src/main/java/openmodularturrets/network/messages/MessageTurretBase.java index 202a24fc..05cf31e5 100644 --- a/src/main/java/openmodularturrets/network/messages/MessageTurretBase.java +++ b/src/main/java/openmodularturrets/network/messages/MessageTurretBase.java @@ -22,7 +22,7 @@ */ public class MessageTurretBase implements IMessage { - private int x, y, z, rfStorage, yAxisDetect; + private int x, y, z, rfStorage, yAxisDetect, killCount; private boolean attacksMobs, attacksNeutrals, attacksPlayers, multiTargeting, waitForTrustedPlayer; private String owner, ownerName; private List trustedPlayers = new ArrayList<>(); @@ -45,7 +45,9 @@ public IMessage onMessage(MessageTurretBase message, MessageContext ctx) { ((TurretBase) tileEntity).setAttacksPlayers(message.attacksPlayers); ((TurretBase) tileEntity).setMultiTargeting(message.multiTargeting); ((TurretBase) tileEntity).setTrustedPlayers(message.trustedPlayers); + ((TurretBase) tileEntity).setKillCount(message.killCount); ((TurretBase) tileEntity).waitForTrustedPlayer = message.waitForTrustedPlayer; + ((TurretBase) tileEntity).camoStack = message.camoStack; } return null; @@ -67,7 +69,9 @@ public MessageTurretBase(TileEntity tileEntity) { this.attacksPlayers = TurretBase.isAttacksPlayers(); this.multiTargeting = TurretBase.isMultiTargeting(); this.trustedPlayers = TurretBase.getTrustedPlayers(); + this.killCount = TurretBase.getKillCount(); this.waitForTrustedPlayer = TurretBase.waitForTrustedPlayer; + this.camoStack = TurretBase.camoStack; } } @@ -88,6 +92,7 @@ public void fromBytes(ByteBuf buf) { this.attacksPlayers = buf.readBoolean(); this.multiTargeting = buf.readBoolean(); this.waitForTrustedPlayer = buf.readBoolean(); + this.killCount = buf.readInt(); this.camoStack = ByteBufUtils.readItemStack(buf); int lengthOfTPList = buf.readInt(); if (lengthOfTPList > 0) { @@ -121,6 +126,7 @@ public void toBytes(ByteBuf buf) { buf.writeBoolean(attacksPlayers); buf.writeBoolean(multiTargeting); buf.writeBoolean(waitForTrustedPlayer); + buf.writeInt(killCount); ByteBufUtils.writeItemStack(buf, camoStack); buf.writeInt(trustedPlayers.size()); if (trustedPlayers.size() > 0) { diff --git a/src/main/java/openmodularturrets/tileentity/turretbase/TurretBase.java b/src/main/java/openmodularturrets/tileentity/turretbase/TurretBase.java index 8f656196..4846da61 100644 --- a/src/main/java/openmodularturrets/tileentity/turretbase/TurretBase.java +++ b/src/main/java/openmodularturrets/tileentity/turretbase/TurretBase.java @@ -8,6 +8,7 @@ import java.util.UUID; import java.util.logging.Logger; +import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; @@ -82,6 +83,7 @@ public abstract class TurretBase extends TileEntityContainer implements IEnergyH private double storageEU; private boolean wasAddedToEnergyNet = false; public boolean waitForTrustedPlayer = false; + private int killCount = 0; public TurretBase(int MaxEnergyStorage, int MaxIO) { super(); @@ -97,6 +99,10 @@ public TurretBase(int MaxEnergyStorage, int MaxIO) { this.ticks = 0; } + public void onKill(Entity entity) { + this.killCount++; + } + private static void updateRedstoneReactor(TurretBase base) { if (!TurretHeadUtil.hasRedstoneReactor(base)) { return; @@ -313,6 +319,7 @@ public void writeToNBT(NBTTagCompound par1) { par1.setBoolean("shouldConcealTurrets", shouldConcealTurrets); par1.setBoolean("multiTargeting", multiTargeting); par1.setDouble("storageEU", storageEU); + par1.setInteger("killCount", killCount); NBTTagList itemList = new NBTTagList(); @@ -348,6 +355,7 @@ public void readFromNBT(NBTTagCompound par1) { this.attacksPlayers = par1.getBoolean("attacksPlayers"); this.shouldConcealTurrets = par1.getBoolean("shouldConcealTurrets"); this.multiTargeting = par1.getBoolean("multiTargeting"); + this.killCount = par1.getInteger("killCount"); if (getPlayerUIDUnstable(par1.getString("owner")) != null) { this.owner = getPlayerUIDUnstable(par1.getString("owner")).toString(); @@ -625,6 +633,14 @@ public boolean isMultiTargeting() { return multiTargeting; } + public int getKillCount() { + return killCount; + } + + public void setKillCount(int killCount) { + this.killCount = killCount; + } + public void setMultiTargeting(boolean multiTargeting) { this.multiTargeting = multiTargeting; }