Skip to content

Commit

Permalink
Add Kill Count Tracking and GUI Updates for TurretBase (#9)
Browse files Browse the repository at this point in the history
Co-authored-by: Maya <[email protected]>
  • Loading branch information
mak8427 and serenibyss authored Jan 18, 2025
1 parent fc1da87 commit 4a3dcbf
Show file tree
Hide file tree
Showing 15 changed files with 189 additions and 106 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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(
Expand All @@ -85,6 +102,8 @@ protected void onImpact(MovingObjectPosition movingobjectposition) {
ConfigHandler.getTurretSoundVolume(),
random.nextFloat() + 0.5F);
}

// Destroy the projectile after impact
this.setDead();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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,
Expand All @@ -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();
Expand All @@ -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);
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -44,28 +43,35 @@ public void onEntityUpdate() {
List<Entity> 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();
Expand Down
Loading

0 comments on commit 4a3dcbf

Please sign in to comment.