From 1f03436f401cfe487ded6a9d6566a39ee7db92a1 Mon Sep 17 00:00:00 2001 From: Brian Date: Thu, 3 Jan 2013 21:32:21 -0500 Subject: [PATCH 1/4] update boss health using new Entity Max Health API/fix health-multiplier values > 1 on default style waves --- resources/plugin.yml | 2 +- .../garbagemule/MobArena/ArenaListener.java | 22 ++------ .../garbagemule/MobArena/MASpawnThread.java | 4 +- .../MobArena/leaderboards/Leaderboard.java | 17 +++--- .../garbagemule/MobArena/waves/MABoss.java | 53 ++----------------- 5 files changed, 20 insertions(+), 78 deletions(-) diff --git a/resources/plugin.yml b/resources/plugin.yml index d24c9ed..b449a42 100644 --- a/resources/plugin.yml +++ b/resources/plugin.yml @@ -1,7 +1,7 @@ name: MobArena author: garbagemule main: com.garbagemule.MobArena.MobArena -version: 0.94.4.91 +version: 0.94.4.92 softdepend: [Spout,MultiVerse,MultiWorld,XcraftGate,Towny,Heroes,MagicSpells,Vault] commands: ma: diff --git a/src/com/garbagemule/MobArena/ArenaListener.java b/src/com/garbagemule/MobArena/ArenaListener.java index e6b4160..f54b8f0 100644 --- a/src/com/garbagemule/MobArena/ArenaListener.java +++ b/src/com/garbagemule/MobArena/ArenaListener.java @@ -499,7 +499,7 @@ public class ArenaListener } // Boss else if (monsters.getBossMonsters().contains(damagee)) { - onBossDamage(event, (LivingEntity) damagee, damager); + onBossDamage(event, (LivingEntity) damagee, damager); // Now an emtpy method } // Regular monster else if (monsters.getMonsters().contains(damagee)) { @@ -519,7 +519,7 @@ public class ArenaListener } // If PvP is disabled and damager is a player, cancel damage else if (arena.inArena(player)) { - if (!pvpEnabled && damager instanceof Player) { + if (!pvpEnabled && (damager instanceof Player || damager instanceof Wolf)) { event.setCancelled(true); return; } @@ -549,8 +549,8 @@ public class ArenaListener Player p = (Player) ((Wolf) damager).getOwner(); ArenaPlayerStatistics aps = arena.getArenaPlayer(p).getStats(); aps.add("dmgDone", event.getDamage()); - // arena.getArenaPlayer(p).getStats().dmgDone += event.getDamage(); } + //TODO add in check for player made golems doing damage else if (damager instanceof LivingEntity) { if (!monsterInfight) event.setCancelled(true); @@ -573,21 +573,7 @@ public class ArenaListener } private void onBossDamage(EntityDamageEvent event, LivingEntity monster, Entity damager) { - // Health the boss back up. - monster.setHealth(monster.getMaxHealth()); - - // Damage the underlying MABoss. - MABoss boss = monsters.getBoss(monster); - boss.damage(event.getDamage()); - - // If it died, remove it from the arena. - if (boss.isDead()) { - monsters.removeBoss(monster); - monster.damage(10000); - } - - // And "cancel out" the damage. - event.setDamage(1); + //TODO useless method as of Entity Max Health API, maybe add in some stat tracking for leaderboards instead? } public void onEntityCombust(EntityCombustEvent event) { diff --git a/src/com/garbagemule/MobArena/MASpawnThread.java b/src/com/garbagemule/MobArena/MASpawnThread.java index dce4397..cc88d9b 100644 --- a/src/com/garbagemule/MobArena/MASpawnThread.java +++ b/src/com/garbagemule/MobArena/MASpawnThread.java @@ -156,8 +156,10 @@ public class MASpawnThread implements Runnable monsterManager.addMonster(e); // Set the health. + e.resetMaxHealth(); // Avoid conflicts/enormous multiplications from other plugins handling Mob health int health = (int) Math.max(1D, e.getMaxHealth() * mul); - e.setHealth(Math.min(health, e.getMaxHealth())); + e.setMaxHealth(health); + e.setHealth(health); // Switch on the type. switch (w.getType()){ diff --git a/src/com/garbagemule/MobArena/leaderboards/Leaderboard.java b/src/com/garbagemule/MobArena/leaderboards/Leaderboard.java index c39ab4c..1c15621 100644 --- a/src/com/garbagemule/MobArena/leaderboards/Leaderboard.java +++ b/src/com/garbagemule/MobArena/leaderboards/Leaderboard.java @@ -71,9 +71,8 @@ public class Leaderboard */ public void initialize() { - if (!isGridWellFormed()) { + if (!isGridWellFormed()) return; - } initializeBoards(); initializeStats(); @@ -117,9 +116,8 @@ public class Leaderboard */ private boolean isGridWellFormed() { - if (topLeft == null) { + if (topLeft == null) return false; - } BlockState state = topLeft.getBlock().getState(); @@ -139,9 +137,8 @@ public class Leaderboard this.cols = getSignCount(current, direction); // Require at least 2x2 to be valid - if (rows <= 1 || cols <= 1) { + if (rows <= 1 || cols <= 1) return false; - } // Get the left-most sign in the current row. Sign first = getAdjacentSign(current, BlockFace.DOWN); @@ -242,10 +239,10 @@ public class Leaderboard { byte data = s.getRawData(); - if (data == 2) return BlockFace.WEST;//BlockFace.NORTH; - if (data == 3) return BlockFace.EAST;//BlockFace.SOUTH; - if (data == 4) return BlockFace.SOUTH;//BlockFace.WEST; - if (data == 5) return BlockFace.NORTH;//BlockFace.EAST; + if (data == 2) return BlockFace.NORTH; + if (data == 3) return BlockFace.SOUTH; + if (data == 4) return BlockFace.WEST; + if (data == 5) return BlockFace.EAST; return null; } diff --git a/src/com/garbagemule/MobArena/waves/MABoss.java b/src/com/garbagemule/MobArena/waves/MABoss.java index 1d6e087..31cbab9 100644 --- a/src/com/garbagemule/MobArena/waves/MABoss.java +++ b/src/com/garbagemule/MobArena/waves/MABoss.java @@ -5,8 +5,7 @@ import org.bukkit.entity.LivingEntity; public class MABoss { private LivingEntity entity; - private int health, health25, maxHealth; - private boolean dead, lowHealth; + private boolean dead; /** * Create an MABoss from the given entity with the given max health. @@ -14,12 +13,10 @@ public class MABoss * @param maxHealth a max health value */ public MABoss(LivingEntity entity, int maxHealth) { + entity.setMaxHealth(maxHealth); + entity.setHealth(maxHealth); this.entity = entity; this.dead = false; - this.lowHealth = false; - - this.health = this.maxHealth = maxHealth; - this.health25 = maxHealth / 4; } /** @@ -35,7 +32,7 @@ public class MABoss * @return the current health of the boss */ public int getHealth() { - return health; + return entity.getHealth(); } /** @@ -43,47 +40,7 @@ public class MABoss * @return the maximum health of the boss */ public int getMaxHealth() { - return maxHealth; - } - - /** - * Set the health of this boss as a percentage between 1 and 100. - * @param percentage an integer percentage - */ - public void setHealth(int percentage) { - if (percentage < 1) { - percentage = 1; - } - else if (percentage > 100) { - percentage = 100; - } - - health = maxHealth * percentage / 100; - } - - /** - * Heal the boss for the given amount. Useful for "siphon life"-like abilities. - * @param amount the health amount - */ - public void heal(int amount) { - health = Math.min(maxHealth, health + amount); - } - - /** - * Damage the boss for the given amount. Used internally by MobArena. - * @param amount the amount. - */ - public void damage(int amount) { - health -= amount; - - if (health <= health25 && !lowHealth) { - lowHealth = true; - //System.out.println("Boss is at 25%!"); - } - - if (health <= 0) { - dead = true; - } + return entity.getMaxHealth(); } /** From 051c058c1a1aea88fe5435ddc69d65fdad04c9b0 Mon Sep 17 00:00:00 2001 From: Brian Date: Thu, 3 Jan 2013 21:37:18 -0500 Subject: [PATCH 2/4] dont revert upstream fixes! whoops! --- .../MobArena/leaderboards/Leaderboard.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/com/garbagemule/MobArena/leaderboards/Leaderboard.java b/src/com/garbagemule/MobArena/leaderboards/Leaderboard.java index 1c15621..e7d0468 100644 --- a/src/com/garbagemule/MobArena/leaderboards/Leaderboard.java +++ b/src/com/garbagemule/MobArena/leaderboards/Leaderboard.java @@ -71,8 +71,9 @@ public class Leaderboard */ public void initialize() { - if (!isGridWellFormed()) + if (!isGridWellFormed()) { return; + } initializeBoards(); initializeStats(); @@ -137,8 +138,9 @@ public class Leaderboard this.cols = getSignCount(current, direction); // Require at least 2x2 to be valid - if (rows <= 1 || cols <= 1) + if (rows <= 1 || cols <= 1) { return false; + } // Get the left-most sign in the current row. Sign first = getAdjacentSign(current, BlockFace.DOWN); @@ -239,10 +241,10 @@ public class Leaderboard { byte data = s.getRawData(); - if (data == 2) return BlockFace.NORTH; - if (data == 3) return BlockFace.SOUTH; - if (data == 4) return BlockFace.WEST; - if (data == 5) return BlockFace.EAST; + if (data == 2) return BlockFace.WEST;//BlockFace.NORTH; + if (data == 3) return BlockFace.EAST;//BlockFace.SOUTH; + if (data == 4) return BlockFace.SOUTH;//BlockFace.WEST; + if (data == 5) return BlockFace.NORTH;//BlockFace.EAST; return null; } From b012d9c0c05862415421b0e6e43d0d133dad9d1d Mon Sep 17 00:00:00 2001 From: Brian Date: Thu, 3 Jan 2013 21:53:00 -0500 Subject: [PATCH 3/4] Wolves are wolves, not players --- resources/plugin.yml | 2 +- src/com/garbagemule/MobArena/ArenaListener.java | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/resources/plugin.yml b/resources/plugin.yml index b449a42..61b15af 100644 --- a/resources/plugin.yml +++ b/resources/plugin.yml @@ -1,7 +1,7 @@ name: MobArena author: garbagemule main: com.garbagemule.MobArena.MobArena -version: 0.94.4.92 +version: 0.94.4.93 softdepend: [Spout,MultiVerse,MultiWorld,XcraftGate,Towny,Heroes,MagicSpells,Vault] commands: ma: diff --git a/src/com/garbagemule/MobArena/ArenaListener.java b/src/com/garbagemule/MobArena/ArenaListener.java index f54b8f0..10e1354 100644 --- a/src/com/garbagemule/MobArena/ArenaListener.java +++ b/src/com/garbagemule/MobArena/ArenaListener.java @@ -480,9 +480,6 @@ public class ArenaListener if (damager instanceof Projectile) { damager = ((Projectile) damager).getShooter(); } - else if (damager instanceof Wolf && arena.hasPet(damager)) { - damager = (Player) ((Wolf) damager).getOwner(); - } } // Pet wolf @@ -545,7 +542,7 @@ public class ArenaListener aps.inc("hits"); } else if (damager instanceof Wolf && arena.hasPet(damager)) { - event.setDamage(1); + //event.setDamage(1); Player p = (Player) ((Wolf) damager).getOwner(); ArenaPlayerStatistics aps = arena.getArenaPlayer(p).getStats(); aps.add("dmgDone", event.getDamage()); From 4548152a277b95cbbd65b0192342c32b03215f61 Mon Sep 17 00:00:00 2001 From: Brian Date: Thu, 3 Jan 2013 22:31:56 -0500 Subject: [PATCH 4/4] finish unreverting leaderboard fix/clean up --- src/com/garbagemule/MobArena/leaderboards/Leaderboard.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/garbagemule/MobArena/leaderboards/Leaderboard.java b/src/com/garbagemule/MobArena/leaderboards/Leaderboard.java index e7d0468..c39ab4c 100644 --- a/src/com/garbagemule/MobArena/leaderboards/Leaderboard.java +++ b/src/com/garbagemule/MobArena/leaderboards/Leaderboard.java @@ -117,8 +117,9 @@ public class Leaderboard */ private boolean isGridWellFormed() { - if (topLeft == null) + if (topLeft == null) { return false; + } BlockState state = topLeft.getBlock().getState();