diff --git a/resources/plugin.yml b/resources/plugin.yml index d24c9ed..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.91 +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 e6b4160..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 @@ -499,7 +496,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 +516,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; } @@ -545,12 +542,12 @@ 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()); - // 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 +570,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/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(); } /**