diff --git a/MobArena.jar b/MobArena.jar index a33f604..65a9960 100644 Binary files a/MobArena.jar and b/MobArena.jar differ diff --git a/src/com/garbagemule/MobArena/Arena.java b/src/com/garbagemule/MobArena/Arena.java index 47f23de..67ea8f9 100644 --- a/src/com/garbagemule/MobArena/Arena.java +++ b/src/com/garbagemule/MobArena/Arena.java @@ -1065,6 +1065,11 @@ public class Arena return spawnThread.getPlayerCount(); } + public void addBlock(Block b) + { + blocks.add(b); + } + public void addMonster(LivingEntity e) { monsters.add(e); @@ -1091,6 +1096,11 @@ public class Arena return result; } + public Set getArenaPlayers() + { + return arenaPlayers; + } + public List getNonreadyPlayers() { List result = new LinkedList(); diff --git a/src/com/garbagemule/MobArena/MAUtils.java b/src/com/garbagemule/MobArena/MAUtils.java index 998553b..a2df7be 100644 --- a/src/com/garbagemule/MobArena/MAUtils.java +++ b/src/com/garbagemule/MobArena/MAUtils.java @@ -535,12 +535,18 @@ public class MAUtils if (stacks == null) return; + // If the player isn't online, write directly to their data file. if (!p.isOnline()) { ItemStack[] items = readInventoryData(p); int currentSlot = 0; for (ItemStack stack : stacks) { + // Skip money rewards for now. TODO: Make this work as well + if (stack.getTypeId() == MobArena.ECONOMY_MONEY_ID) + continue; + + // Find the first available slot while (currentSlot < items.length && items[currentSlot] != null) currentSlot++; @@ -550,10 +556,12 @@ public class MAUtils items[currentSlot] = stack; } + // Write the data writeInventoryData(p, items); return; } + // Otherwise, give the player some items! PlayerInventory inv = p.getInventory(); for (ItemStack stack : stacks) { @@ -572,7 +580,6 @@ public class MAUtils // If these are rewards, don't tamper with them. if (rewards) { - //inv.addItem(stack); giveItem(inv, stack); continue; } diff --git a/src/com/garbagemule/MobArena/waves/BossAbility.java b/src/com/garbagemule/MobArena/waves/BossAbility.java index d407e3c..af38be1 100644 --- a/src/com/garbagemule/MobArena/waves/BossAbility.java +++ b/src/com/garbagemule/MobArena/waves/BossAbility.java @@ -1,11 +1,13 @@ package com.garbagemule.MobArena.waves; +import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Random; import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.block.Block; import org.bukkit.entity.Creature; import org.bukkit.entity.Entity; import org.bukkit.entity.Fireball; @@ -14,6 +16,7 @@ import org.bukkit.entity.Player; import org.bukkit.util.Vector; import com.garbagemule.MobArena.Arena; +import com.garbagemule.MobArena.MobArena; import com.garbagemule.MobArena.util.WaveUtils; @@ -60,46 +63,6 @@ public enum BossAbility arena.getWorld().strikeLightning(sw); } }, - DISORIENTTARGET("Disorient Target") - { - public void run(Arena arena, LivingEntity boss) - { - LivingEntity target = getTarget(boss); - if (target == null) return; - - Location loc = target.getLocation(); - loc.setYaw(target.getLocation().getYaw() + 45 + (new Random()).nextInt(270)); - target.teleport(loc); - } - }, - ROOTTARGET("Root Target") - { - public void run(final Arena arena, LivingEntity boss) - { - final LivingEntity target = getTarget(boss); - if (target == null) return; - - final Location loc = target.getLocation(); - final int freezeTaskId = Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(arena.getPlugin(), - new Runnable() - { - public void run() - { - if (arena.getLivingPlayers().contains(target)) - target.teleport(loc); - } - }, 3, 3); - - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(arena.getPlugin(), - new Runnable() - { - public void run() - { - Bukkit.getServer().getScheduler().cancelTask(freezeTaskId); - } - }, 45); - } - }, LIVINGBOMB("Living Bomb") { public void run(final Arena arena, LivingEntity boss) @@ -163,6 +126,46 @@ public enum BossAbility }, 8); } }, + DISORIENTTARGET("Disorient Target") + { + public void run(Arena arena, LivingEntity boss) + { + LivingEntity target = getTarget(boss); + if (target == null) return; + + Location loc = target.getLocation(); + loc.setYaw(target.getLocation().getYaw() + 45 + MobArena.random.nextInt(270)); + target.teleport(loc); + } + }, + ROOTTARGET("Root Target") + { + public void run(final Arena arena, LivingEntity boss) + { + final LivingEntity target = getTarget(boss); + if (target == null) return; + + final Location loc = target.getLocation(); + final int freezeTaskId = Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(arena.getPlugin(), + new Runnable() + { + public void run() + { + if (arena.getLivingPlayers().contains(target)) + target.teleport(loc); + } + }, 3, 3); + + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(arena.getPlugin(), + new Runnable() + { + public void run() + { + Bukkit.getServer().getScheduler().cancelTask(freezeTaskId); + } + }, 45); + } + }, WARPTOPLAYER("Warp") { public void run(Arena arena, LivingEntity boss) @@ -171,6 +174,38 @@ public enum BossAbility boss.teleport(list.get((new Random()).nextInt(list.size()))); } }, + SHUFFLEPOSITIONS("Shuffle Positions") + { + public void run(Arena arena, LivingEntity boss) + { + // Grab the players and add the boss + List entities = new LinkedList(arena.getArenaPlayers()); + entities.add(boss); + + // Grab the locations + List locations = new LinkedList(); + for (LivingEntity e : entities) + locations.add(e.getLocation()); + + // Shuffle the entities, and then begin warping. + Collections.shuffle(entities); + while (!entities.isEmpty() && !locations.isEmpty()) + entities.remove(0).teleport(locations.remove(0)); + } + }, + FLOOD("Flood") + { + public void run(Arena arena, LivingEntity boss) + { + List players = arena.getLivingPlayers(); + Block block = players.get(MobArena.random.nextInt(players.size())).getLocation().getBlock(); + if (block.getTypeId() == 0) + { + block.setTypeId(8); + arena.addBlock(block); + } + } + }, THROWTARGET("Throw Target") { public void run(Arena arena, LivingEntity boss) diff --git a/src/com/garbagemule/register/payment/methods/BOSE6.java b/src/com/garbagemule/register/payment/methods/BOSE6.java index efd6053..5dfdf3b 100644 --- a/src/com/garbagemule/register/payment/methods/BOSE6.java +++ b/src/com/garbagemule/register/payment/methods/BOSE6.java @@ -76,35 +76,35 @@ public class BOSE6 implements Method { } public double balance() { - return (double) this.BOSEconomy.getPlayerMoneyDouble(this.name); + return (double) this.BOSEconomy.getPlayerMoney(this.name); } public boolean set(double amount) { int IntAmount = (int)Math.ceil(amount); - return this.BOSEconomy.setPlayerMoney(this.name, (double) IntAmount, false); + return this.BOSEconomy.setPlayerMoney(this.name, IntAmount, false); } public boolean add(double amount) { int IntAmount = (int)Math.ceil(amount); - return this.BOSEconomy.addPlayerMoney(this.name, (double) IntAmount, false); + return this.BOSEconomy.addPlayerMoney(this.name, IntAmount, false); } public boolean subtract(double amount) { int IntAmount = (int)Math.ceil(amount); int balance = (int)this.balance(); - return this.BOSEconomy.setPlayerMoney(this.name, (double) (balance - IntAmount), false); + return this.BOSEconomy.setPlayerMoney(this.name, (balance - IntAmount), false); } public boolean multiply(double amount) { int IntAmount = (int)Math.ceil(amount); int balance = (int)this.balance(); - return this.BOSEconomy.setPlayerMoney(this.name, (double) (balance * IntAmount), false); + return this.BOSEconomy.setPlayerMoney(this.name, (balance * IntAmount), false); } public boolean divide(double amount) { int IntAmount = (int)Math.ceil(amount); int balance = (int)this.balance(); - return this.BOSEconomy.setPlayerMoney(this.name, (double) (balance / IntAmount), false); + return this.BOSEconomy.setPlayerMoney(this.name, (balance / IntAmount), false); } public boolean hasEnough(double amount) { @@ -146,36 +146,36 @@ public class BOSE6 implements Method { } public double balance() { - return (double) this.BOSEconomy.getBankMoneyDouble(bank); + return (double) this.BOSEconomy.getBankMoney(bank); } public boolean set(double amount) { int IntAmount = (int)Math.ceil(amount); - return this.BOSEconomy.setBankMoney(bank, (double) IntAmount, true); + return this.BOSEconomy.setBankMoney(bank, IntAmount, true); } public boolean add(double amount) { int IntAmount = (int)Math.ceil(amount); int balance = (int)this.balance(); - return this.BOSEconomy.setBankMoney(bank, (double) (balance + IntAmount), false); + return this.BOSEconomy.setBankMoney(bank, (balance + IntAmount), false); } public boolean subtract(double amount) { int IntAmount = (int)Math.ceil(amount); int balance = (int)this.balance(); - return this.BOSEconomy.setBankMoney(bank, (double) (balance - IntAmount), false); + return this.BOSEconomy.setBankMoney(bank, (balance - IntAmount), false); } public boolean multiply(double amount) { int IntAmount = (int)Math.ceil(amount); int balance = (int)this.balance(); - return this.BOSEconomy.setBankMoney(bank, (double) (balance * IntAmount), false); + return this.BOSEconomy.setBankMoney(bank, (balance * IntAmount), false); } public boolean divide(double amount) { int IntAmount = (int)Math.ceil(amount); int balance = (int)this.balance(); - return this.BOSEconomy.setBankMoney(bank, (double) (balance / IntAmount), false); + return this.BOSEconomy.setBankMoney(bank, (balance / IntAmount), false); } public boolean hasEnough(double amount) {