From bd025ff7a650ec33055074a2e59ab46aed8d66ce Mon Sep 17 00:00:00 2001 From: Andreas Troelsen Date: Mon, 10 Jun 2013 00:25:53 +0200 Subject: [PATCH] Add reward-node to boss waves. --- .../garbagemule/MobArena/ArenaListener.java | 22 +++++++++++++++++-- .../garbagemule/MobArena/MASpawnThread.java | 1 + .../garbagemule/MobArena/waves/MABoss.java | 10 +++++++++ .../MobArena/waves/WaveParser.java | 7 ++++++ .../MobArena/waves/types/BossWave.java | 12 ++++++++++ 5 files changed, 50 insertions(+), 2 deletions(-) diff --git a/src/com/garbagemule/MobArena/ArenaListener.java b/src/com/garbagemule/MobArena/ArenaListener.java index d97ccad..1dd5894 100644 --- a/src/com/garbagemule/MobArena/ArenaListener.java +++ b/src/com/garbagemule/MobArena/ArenaListener.java @@ -461,12 +461,30 @@ public class ArenaListener // If the damager was a player, add to kills. if (damager instanceof Player) { - ArenaPlayer ap = arena.getArenaPlayer((Player) damager); + Player p = (Player) damager; + ArenaPlayer ap = arena.getArenaPlayer(p); if (ap != null) { ArenaPlayerStatistics stats = ap.getStats(); if (stats != null) { ap.getStats().inc("kills"); - arena.getScoreboard().addKill((Player) damager); + arena.getScoreboard().addKill(p); + } + MABoss boss = monsters.removeBoss(event.getEntity()); + if (boss != null) { + ItemStack reward = boss.getReward(); + if (reward != null) { + String msg = p.getName() + " killed the boss and won: "; + if (reward.getTypeId() == MobArena.ECONOMY_MONEY_ID) { + plugin.giveMoney(p, reward.getAmount()); + msg += plugin.economyFormat(reward.getAmount()); + } else { + arena.getRewardManager().addReward((Player) damager, reward); + msg += MAUtils.toCamelCase(reward.getType().toString()) + ":" + reward.getAmount(); + } + for (Player q : arena.getPlayersInArena()) { + Messenger.tellPlayer(q, msg); + } + } } } } diff --git a/src/com/garbagemule/MobArena/MASpawnThread.java b/src/com/garbagemule/MobArena/MASpawnThread.java index 296fe1a..0cde9d7 100644 --- a/src/com/garbagemule/MobArena/MASpawnThread.java +++ b/src/com/garbagemule/MobArena/MASpawnThread.java @@ -179,6 +179,7 @@ public class MASpawnThread implements Runnable BossWave bw = (BossWave) w; int maxHealth = bw.getMaxHealth(playerCount); MABoss boss = monsterManager.addBoss(e, maxHealth); + boss.setReward(bw.getReward()); bw.addMABoss(boss); bw.activateAbilities(arena); if (bw.getBossName() != null) { diff --git a/src/com/garbagemule/MobArena/waves/MABoss.java b/src/com/garbagemule/MobArena/waves/MABoss.java index 31cbab9..bb4c110 100644 --- a/src/com/garbagemule/MobArena/waves/MABoss.java +++ b/src/com/garbagemule/MobArena/waves/MABoss.java @@ -1,11 +1,13 @@ package com.garbagemule.MobArena.waves; import org.bukkit.entity.LivingEntity; +import org.bukkit.inventory.ItemStack; public class MABoss { private LivingEntity entity; private boolean dead; + private ItemStack reward; /** * Create an MABoss from the given entity with the given max health. @@ -61,4 +63,12 @@ public class MABoss public void setDead(boolean dead) { this.dead = dead; } + + public void setReward(ItemStack reward) { + this.reward = reward; + } + + public ItemStack getReward() { + return reward; + } } diff --git a/src/com/garbagemule/MobArena/waves/WaveParser.java b/src/com/garbagemule/MobArena/waves/WaveParser.java index 30bfeb3..170b78a 100644 --- a/src/com/garbagemule/MobArena/waves/WaveParser.java +++ b/src/com/garbagemule/MobArena/waves/WaveParser.java @@ -276,6 +276,13 @@ public class WaveParser result.setAbilityInterval(config.getInt("ability-interval", 3) * 20); result.setAbilityAnnounce(config.getBoolean("ability-announce", true)); + // Rewards! + String rew = config.getString("reward"); + if (rew != null) { + ItemStack item = ItemParser.parseItem(rew); + if (item != null) result.setReward(item); + } + return result; } diff --git a/src/com/garbagemule/MobArena/waves/types/BossWave.java b/src/com/garbagemule/MobArena/waves/types/BossWave.java index 6f79c19..011a382 100644 --- a/src/com/garbagemule/MobArena/waves/types/BossWave.java +++ b/src/com/garbagemule/MobArena/waves/types/BossWave.java @@ -7,6 +7,8 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.bukkit.inventory.ItemStack; + import com.garbagemule.MobArena.Messenger; import com.garbagemule.MobArena.Msg; import com.garbagemule.MobArena.framework.Arena; @@ -33,6 +35,8 @@ public class BossWave extends AbstractWave private boolean activated, abilityAnnounce; private int abilityInterval; + + private ItemStack reward; public BossWave(MACreature monster) { this.monster = monster; @@ -113,6 +117,14 @@ public class BossWave extends AbstractWave this.abilityAnnounce = abilityAnnounce; } + public ItemStack getReward() { + return reward; + } + + public void setReward(ItemStack reward) { + this.reward = reward; + } + public void activateAbilities(Arena arena) { if (activated) { return;