From c420568cb96753498ece3363c6a2b797735abae9 Mon Sep 17 00:00:00 2001 From: Garbage Mule Date: Sat, 10 Dec 2011 23:49:39 +0100 Subject: [PATCH] JoinCommand and ArenaListCommand somewhat done. --- src/com/garbagemule/MobArena/Arena.java | 2 + src/com/garbagemule/MobArena/ArenaMaster.java | 5 + .../MobArena/ArenaMasterStandard.java | 39 +- .../garbagemule/MobArena/ArenaStandard.java | 64 +- src/com/garbagemule/MobArena/MACommands.java | 12 +- src/com/garbagemule/MobArena/MAListener.java | 1 - src/com/garbagemule/MobArena/MAMessages.java | 235 +---- .../garbagemule/MobArena/MASpawnThread.java | 1 - src/com/garbagemule/MobArena/MAUtils.java | 9 +- src/com/garbagemule/MobArena/MobArena.java | 32 +- .../garbagemule/MobArena/MobArenaPlugin.java | 6 + src/com/garbagemule/MobArena/Msg.java | 167 +++ .../MobArena/commands/CommandHandler.java | 2 +- .../commands/user/ArenaListCommand.java | 35 +- .../MobArena/commands/user/JoinCommand.java | 52 +- .../garbagemule/MobArena/waves/BossWave.java | 2 +- .../MobArena/waves/DefaultWave.java | 2 +- .../MobArena/waves/SpecialWave.java | 2 +- .../garbagemule/MobArena/waves/SwarmWave.java | 2 +- test/config.yml | 111 ++ .../mobarena/standard/TestNewConfig.java | 212 ++++ .../mobarena/standard/TestUserCommands.java | 208 ++++ test/mock/bukkit/MockCommand.java | 19 + test/mock/bukkit/MockPlayer.java | 976 ++++++++++++++++++ test/mock/mobarena/MockArena.java | 540 ++++++++++ test/mock/mobarena/MockArenaMaster.java | 232 +++++ test/mock/mobarena/MockMobArena.java | 39 + test/mock/util/MockLogger.java | 59 ++ 28 files changed, 2723 insertions(+), 343 deletions(-) create mode 100644 src/com/garbagemule/MobArena/Msg.java create mode 100644 test/config.yml create mode 100644 test/garbagemule/mobarena/standard/TestNewConfig.java create mode 100644 test/garbagemule/mobarena/standard/TestUserCommands.java create mode 100644 test/mock/bukkit/MockCommand.java create mode 100644 test/mock/bukkit/MockPlayer.java create mode 100644 test/mock/mobarena/MockArena.java create mode 100644 test/mock/mobarena/MockArenaMaster.java create mode 100644 test/mock/mobarena/MockMobArena.java create mode 100644 test/mock/util/MockLogger.java diff --git a/src/com/garbagemule/MobArena/Arena.java b/src/com/garbagemule/MobArena/Arena.java index 69dba39..d5fcc2e 100644 --- a/src/com/garbagemule/MobArena/Arena.java +++ b/src/com/garbagemule/MobArena/Arena.java @@ -232,6 +232,8 @@ public abstract class Arena public abstract boolean inLobby(Player p); + public abstract boolean isEnabled(); + public abstract boolean isRunning(); public abstract boolean isPvpEnabled(); diff --git a/src/com/garbagemule/MobArena/ArenaMaster.java b/src/com/garbagemule/MobArena/ArenaMaster.java index 601ffff..537fa4b 100644 --- a/src/com/garbagemule/MobArena/ArenaMaster.java +++ b/src/com/garbagemule/MobArena/ArenaMaster.java @@ -1,5 +1,6 @@ package com.garbagemule.MobArena; +import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -51,6 +52,8 @@ public abstract class ArenaMaster //implements Master public abstract List getPermittedArenas(Player p); + public abstract List getEnabledAndPermittedArenas(Player p); + public abstract Arena getArenaAtLocation(Location loc); public abstract List getArenasInWorld(World world); @@ -75,6 +78,8 @@ public abstract class ArenaMaster //implements Master public abstract Arena getArenaWithName(String configName); + public abstract Arena getArenaWithName(Collection arenas, String configName); + /*///////////////////////////////////////////////////////////////////////// diff --git a/src/com/garbagemule/MobArena/ArenaMasterStandard.java b/src/com/garbagemule/MobArena/ArenaMasterStandard.java index 90c0cbd..e89fff6 100644 --- a/src/com/garbagemule/MobArena/ArenaMasterStandard.java +++ b/src/com/garbagemule/MobArena/ArenaMasterStandard.java @@ -1,5 +1,6 @@ package com.garbagemule.MobArena; +import java.util.Collection; import java.util.HashMap; import java.util.LinkedList; import java.util.List; @@ -10,37 +11,13 @@ import org.bukkit.Location; import org.bukkit.World; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; -//import org.bukkit.util.config.Configuration; import com.garbagemule.MobArena.util.Config; -//import com.garbagemule.ArenaPlugin.Master; - public class ArenaMasterStandard extends ArenaMaster { private MobArena plugin; - //private Configuration config; private Config config; - //protected Arena selectedArena; - - // Settings - //protected boolean enabled, updateNotify; - - // Classes - //protected Set classes; - //protected Map> classItems, classArmor; - //protected Map> classPerms; - //protected Map>> classBonuses; - //protected Map arenaMap; - - // Location map - //protected Map locations = new HashMap(); - - // Arena list - //protected List arenas; - - // Listeners - //protected Set listeners = new HashSet(); @@ -81,6 +58,15 @@ public class ArenaMasterStandard extends ArenaMaster return result; } + public List getEnabledAndPermittedArenas(Player p) + { + List result = new LinkedList(); + for (Arena arena : arenas) + if (arena.enabled && plugin.has(p, "mobarena.arenas." + arena.configName())) + result.add(arena); + return result; + } + public Arena getArenaAtLocation(Location loc) { for (Arena arena : arenas) @@ -163,6 +149,11 @@ public class ArenaMasterStandard extends ArenaMaster } public Arena getArenaWithName(String configName) + { + return getArenaWithName(this.arenas, configName); + } + + public Arena getArenaWithName(Collection arenas, String configName) { for (Arena arena : arenas) if (arena.configName().equals(configName)) diff --git a/src/com/garbagemule/MobArena/ArenaStandard.java b/src/com/garbagemule/MobArena/ArenaStandard.java index bb0d87e..bfe1b38 100644 --- a/src/com/garbagemule/MobArena/ArenaStandard.java +++ b/src/com/garbagemule/MobArena/ArenaStandard.java @@ -48,7 +48,6 @@ import org.bukkit.inventory.PlayerInventory; import org.bukkit.permissions.PermissionAttachment; //import org.bukkit.util.config.Configuration; -import com.garbagemule.MobArena.MAMessages.Msg; import com.garbagemule.MobArena.leaderboards.Leaderboard; import com.garbagemule.MobArena.repairable.Repairable; import com.garbagemule.MobArena.repairable.RepairableComparator; @@ -65,65 +64,6 @@ import com.garbagemule.MobArena.waves.Wave.WaveBranch; public class ArenaStandard extends Arena { private MobArena plugin; - /* - // Setup fields - protected String name; - protected World world; - protected boolean enabled, protect, running, setup, lobbySetup, autoEquip, forceRestore, softRestore, softRestoreDrops, emptyInvJoin, emptyInvSpec, pvp, monsterInfight, allowWarp; - - protected boolean edit, waveClear, detCreepers, detDamage, lightning, hellhounds, specOnDeath, shareInArena, spoutSelect; - protected Location p1, p2, l1, l2, arenaLoc, lobbyLoc, spectatorLoc; - protected Map spawnpoints, spawnpointsBoss, containers; - protected String logging; - - // Wave/reward/entryfee fields - protected int spawnTaskId, sheepTaskId, waveDelay, waveInterval, specialModulo, spawnMonstersInt, maxIdleTime, finalWave; - protected MASpawnThread spawnThread; - protected Map> everyWaveMap, afterWaveMap; - protected Map classMap; - protected Map> classItems, classArmor; - protected Map> classPerms; - protected Map attachments; - protected List entryFee; - - // Player sets - protected Set arenaPlayers, lobbyPlayers, readyPlayers, specPlayers; - - // Wave stuff - protected TreeSet singleWaves, singleWavesInstance; - protected TreeSet recurrentWaves; - protected BossWave bossWave; - protected Wave currentWave; - - // Arena sets/maps - protected Set hasPaid, rewardedPlayers, notifyPlayers, randoms; - protected Set monsters, explodingSheep, plaguedPigs, madCows; - protected Set blocks; - protected Set pets; - protected Map petMap; - protected LinkedList repairables, containables; - - // Spawn overriding - protected int spawnMonsters; - protected boolean allowMonsters, allowAnimals; - - // Other settings - protected int minPlayers, maxPlayers, joinDistance; - protected List classes = new LinkedList(); - protected Map locations = new HashMap(); - protected Map healthMap = new HashMap(); - protected Map hungerMap = new HashMap(); - protected Map modeMap = new HashMap(); - - // Logging - protected ArenaLog log; - protected Map arenaPlayerMap; - protected Leaderboard leaderboard; - - protected MAListener eventListener; - - protected PriorityBlockingQueue repairQueue; - */ /** * Primary constructor. Requires a name and a world. @@ -1121,6 +1061,10 @@ public class ArenaStandard extends Arena return lobbyPlayers.contains(p); } + public boolean isEnabled() { + return enabled; + } + public boolean isRunning() { return running; diff --git a/src/com/garbagemule/MobArena/MACommands.java b/src/com/garbagemule/MobArena/MACommands.java index b2fce4c..f5d2992 100644 --- a/src/com/garbagemule/MobArena/MACommands.java +++ b/src/com/garbagemule/MobArena/MACommands.java @@ -18,8 +18,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.command.CommandExecutor; import org.bukkit.command.ConsoleCommandSender; -import com.garbagemule.MobArena.MAMessages.Msg; - public class MACommands implements CommandExecutor { public static List ALLOWED_COMMANDS = new LinkedList(); @@ -187,7 +185,7 @@ public class MACommands implements CommandExecutor MAUtils.tellPlayer(p, Msg.JOIN_PLAYER_JOINED); if (!arena.entryFee.isEmpty()) - MAUtils.tellPlayer(p, Msg.JOIN_FEE_PAID.get(MAUtils.listToString(arena.entryFee, plugin))); + MAUtils.tellPlayer(p, Msg.JOIN_FEE_PAID.toString(MAUtils.listToString(arena.entryFee, plugin))); if (arena.hasPaid.contains(p)) arena.hasPaid.remove(p); @@ -277,7 +275,7 @@ public class MACommands implements CommandExecutor if (base.equals("arenas")) { String list = MAUtils.listToString(player ? am.getPermittedArenas(p) : am.arenas, plugin); - MAUtils.tellPlayer(sender, Msg.MISC_LIST_ARENAS.get(list)); + MAUtils.tellPlayer(sender, Msg.MISC_LIST_ARENAS.toString(list)); return true; } @@ -296,7 +294,7 @@ public class MACommands implements CommandExecutor } String list = MAUtils.listToString(arena.getLivingPlayers(), plugin); - MAUtils.tellPlayer(sender, Msg.MISC_LIST_PLAYERS.get(list)); + MAUtils.tellPlayer(sender, Msg.MISC_LIST_PLAYERS.toString(list)); } else { @@ -305,7 +303,7 @@ public class MACommands implements CommandExecutor for (Arena arena : am.arenas) players.addAll(arena.getLivingPlayers()); buffy.append(MAUtils.listToString(players, plugin)); - MAUtils.tellPlayer(sender, Msg.MISC_LIST_PLAYERS.get(buffy.toString())); + MAUtils.tellPlayer(sender, Msg.MISC_LIST_PLAYERS.toString(buffy.toString())); } return true; } @@ -341,7 +339,7 @@ public class MACommands implements CommandExecutor } String list = MAUtils.listToString(arena.getNonreadyPlayers(), plugin); - MAUtils.tellPlayer(sender, Msg.MISC_LIST_PLAYERS.get(list)); + MAUtils.tellPlayer(sender, Msg.MISC_LIST_PLAYERS.toString(list)); return true; } diff --git a/src/com/garbagemule/MobArena/MAListener.java b/src/com/garbagemule/MobArena/MAListener.java index b0c4346..07e90c2 100644 --- a/src/com/garbagemule/MobArena/MAListener.java +++ b/src/com/garbagemule/MobArena/MAListener.java @@ -53,7 +53,6 @@ import org.bukkit.material.Bed; import org.bukkit.material.Door; import org.bukkit.material.Redstone; -import com.garbagemule.MobArena.MAMessages.Msg; import com.garbagemule.MobArena.leaderboards.Leaderboard; import com.garbagemule.MobArena.repairable.*; diff --git a/src/com/garbagemule/MobArena/MAMessages.java b/src/com/garbagemule/MobArena/MAMessages.java index c5c0b03..3947bc2 100644 --- a/src/com/garbagemule/MobArena/MAMessages.java +++ b/src/com/garbagemule/MobArena/MAMessages.java @@ -7,198 +7,60 @@ import java.io.FileInputStream; import java.io.FileWriter; import java.io.InputStreamReader; -import org.bukkit.Material; - public class MAMessages { - public static enum Msg - { - ARENA_START("Let the slaughter begin!", "Arena started!", Material.REDSTONE_TORCH_ON), - ARENA_END("Arena finished.", "Arena finished.", Material.REDSTONE_TORCH_OFF), - ARENA_DOES_NOT_EXIST("That arena does not exist. Type /ma arenas for a list.", "Can't find arena."), - JOIN_NOT_ENABLED("MobArena is not enabled.", "MobArena disabled.", Material.REDSTONE_TORCH_OFF), - JOIN_IN_OTHER_ARENA("You are already in an arena! Leave that one first.", "In another arena."), - JOIN_ARENA_NOT_ENABLED("This arena is not enabled.", "Arena disabled.", Material.REDSTONE_TORCH_OFF), - JOIN_ARENA_NOT_SETUP("This arena has not been set up yet.", "Arena not set up.", Material.REDSTONE_TORCH_OFF), - JOIN_ARENA_EDIT_MODE("This arena is in edit mode.", "Arena in edit mode.", Material.IRON_SPADE), - JOIN_ARENA_PERMISSION("You don't have permission to join this arena.", "No permission!", Material.FENCE), - JOIN_FEE_REQUIRED("Insufficient funds. Price: %", "Price: %", Material.DIAMOND), - JOIN_FEE_PAID("Price to join was: %", "Paid: %", Material.DIAMOND), - JOIN_ARENA_IS_RUNNING("This arena is in already progress.", "Already running!", Material.GOLD_RECORD), - JOIN_ALREADY_PLAYING("You are already playing!", "Already playing!", Material.GOLD_RECORD), - JOIN_ARG_NEEDED("You must specify an arena. Type /ma arenas for a list."), - JOIN_TOO_FAR("You are too far away from the arena to join/spectate.", "Too far from arena.", Material.COMPASS), - JOIN_EMPTY_INV("You must empty your inventory to join the arena.", "Empty your inventory.", Material.CHEST), - JOIN_PLAYER_LIMIT_REACHED("The player limit of this arena has been reached.", "No spots left.", Material.MILK_BUCKET), - JOIN_STORE_INV_FAIL("Failed to store inventory. Try again."), - JOIN_EXISTING_INV_RESTORED("Your old inventory items have been restored."), - JOIN_PLAYER_JOINED("You joined the arena. Have fun!", "Joined arena.", Material.IRON_SWORD), - LEAVE_NOT_PLAYING("You are not in the arena.", "Not in arena."), - LEAVE_PLAYER_LEFT("You left the arena. Thanks for playing!", "Left arena.", Material.WOOD_DOOR), - PLAYER_DIED("% died!", "% died!", Material.BONE), - SPEC_PLAYER_SPECTATE("Enjoy the show!", "Enjoy the show!"), - SPEC_NOT_RUNNING("This arena isn't running.", "Arena not running.", Material.REDSTONE_TORCH_OFF), - SPEC_ARG_NEEDED("You must specify an arena. Type /ma arenas for a list.", "Arena name required."), - SPEC_EMPTY_INV("Empty your inventory first!", "Empty your inventory.", Material.CHEST), - SPEC_ALREADY_PLAYING("Can't spectate when in the arena!", "Already playing!"), - NOT_READY_PLAYERS("Not ready: %"), - FORCE_START_RUNNING("Arena has already started."), - FORCE_START_NOT_READY("Can't force start, no players are ready."), - FORCE_START_STARTED("Forced arena start."), - FORCE_END_EMPTY("No one is in the arena."), - FORCE_END_ENDED("Forced arena end."), - FORCE_END_IDLE("You weren't quick enough!"), - REWARDS_GIVE("Here are all of your rewards!"), - LOBBY_DROP_ITEM("No sharing allowed at this time!", "Can't drop items here."), - LOBBY_PLAYER_READY("You have been flagged as ready!", "Flagged as ready!"), - LOBBY_PICK_CLASS("You must first pick a class!", "Pick a class first!"), - LOBBY_NOT_ENOUGH_PLAYERS("Not enough players to start. Need at least % players.", "Need more players."), - LOBBY_RIGHT_CLICK("Punch the sign. Don't right-click.", "Punch the sign."), - LOBBY_CLASS_PICKED("You have chosen % as your class!", "%"), - LOBBY_CLASS_RANDOM("You will get a random class on arena start."), - LOBBY_CLASS_PERMISSION("You don't have permission to use this class!", "No permission!", Material.FENCE), - WARP_TO_ARENA("Can't warp to the arena during battle!"), - WARP_FROM_ARENA("Warping not allowed in the arena!"), - WAVE_DEFAULT("Wave #%!", "Wave #%!", Material.YELLOW_FLOWER), - WAVE_SPECIAL("Wave #%! [SPECIAL]", "Wave #%! [SPECIAL]", Material.RED_ROSE), - WAVE_SWARM("Wave #%! [SWARM]", "Wave #%! [SWARM]", Material.LONG_GRASS), - WAVE_BOSS("Wave #%! [BOSS]", "Wave #%! [BOSS]", Material.FIRE), - WAVE_BOSS_ABILITY("Boss used ability: %!", "Boss: %", Material.FIRE), - WAVE_BOSS_LOW_HEALTH("Boss is almost dead!", "Boss almost dead!", Material.FIRE), - WAVE_REWARD("You just earned a reward: %", "Reward: %"), - MISC_LIST_PLAYERS("Live players: %"), - MISC_LIST_ARENAS("Available arenas: %"), - MISC_COMMAND_NOT_ALLOWED("You can't use that command in the arena!"), - MISC_NO_ACCESS("You don't have access to this command."), - MISC_NONE(""); + public static void init(MobArena plugin) { + // Grab the file + File msgFile = new File(MobArena.dir, "anouncements.properties"); - private String msg, spoutMsg; - private Material logo; + // If it couldn't be loaded for some reason + if (!load(msgFile)) + return; - private Msg(String msg) - { - this(msg, null); + // Otherwise, start parsing! + parseFile(msgFile); + } + + private static boolean load(File file) { + // If the file exists, continue on! + if (file.exists()) { + return true; } - private Msg(String msg, String spoutMsg) - { - this(msg, spoutMsg, null); - } - - private Msg(String msg, String spoutMsg, Material logo) - { - this.msg = msg; - this.spoutMsg = spoutMsg; - this.logo = logo; - } - - public String get() - { - return msg; - } - - public String get(String s) - { - return (s != null) ? msg.replace("%", s) : msg; - } - - public String getSpout(String s) - { - if (spoutMsg == null) - return get(s); + // Otherwise, create it, and populate it with the defaults. + try { + file.createNewFile(); + BufferedWriter bw = new BufferedWriter(new FileWriter(file)); - return (s != null) ? spoutMsg.replace("%", s) : spoutMsg; - } - - public void set(String msg) - { - this.msg = msg; - } - - public void setSpout(String spoutMsg) - { - this.spoutMsg = spoutMsg; + for (Msg m : Msg.values()) { + if (m.hasSpoutMsg()) { + bw.write(m.name() + "=" + m + "|" + m.toSpoutString()); + } else { + bw.write(m.name() + "=" + m); + } + bw.newLine(); + } + bw.close(); - if (spoutMsg == null) - logo = null; + return true; } - - public boolean hasSpoutMsg() - { - return spoutMsg != null; - } - - public Material getLogo() - { - return logo == null ? Material.SLIME_BALL : logo; - } - - public static String get(Msg m) - { - return m.msg; - } - - public static String get(Msg m, String s) - { - return m.msg.replace("%", s); - } - - public static void set(Msg m, String msg) - { - m.msg = msg; - } - - public String toString() - { - return msg; + catch (Exception e) { + MobArena.warning("Couldn't initialize announcements-file. Using defaults."); + return false; } } - /** - * Initializes the msgMap by reading from the announcements-file. - */ - public static void init(MobArena plugin) - { - // Grab the announcements-file. - File msgFile = new File(MobArena.dir, "announcements.properties"); - - // If the file doesn't exist, create it and use defaults. - if (!msgFile.exists()) - { - try - { - msgFile.createNewFile(); - BufferedWriter bw = new BufferedWriter(new FileWriter(msgFile)); - - for (Msg m : Msg.values()) - { - if (m.hasSpoutMsg()) - bw.write(m.name() + "=" + m.msg + "|" + m.spoutMsg); - else - bw.write(m.name() + "=" + m.msg); - - bw.newLine(); - } - - bw.close(); - return; - } - catch (Exception e) - { - MobArena.warning("Couldn't initialize announcements-file. Using defaults."); - } - - return; - } - - // Otherwise, read the file's contents. - try - { - BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(msgFile), "UTF-8")); + private static void parseFile(File file) { + try { + FileInputStream fis = new FileInputStream(file); + InputStreamReader isr = new InputStreamReader(fis, "UTF-8"); + BufferedReader br = new BufferedReader(isr); // Check for BOM character. - br.mark(1); int bom = br.read(); - if (bom != 65279) br.reset(); + br.mark(1); + int bom = br.read(); + if (bom != 65279) + br.reset(); String s; while ((s = br.readLine()) != null) @@ -206,8 +68,7 @@ public class MAMessages br.close(); } - catch (Exception e) - { + catch (Exception e) { e.printStackTrace(); MobArena.warning("Problem with announcements-file. Using defaults."); return; @@ -218,15 +79,13 @@ public class MAMessages * Helper-method for parsing the strings from the * announcements-file. */ - private static void process(String s) - { - // If the line ends with =, just add a space + private static void process(String s) { + // If the line ends with = or |, just add a space if (s.endsWith("=") || s.endsWith("|")) s += " "; // Split the string by the equals-sign. String[] split = s.split("="); - if (split.length != 2) - { + if (split.length != 2) { MobArena.warning("Couldn't parse \"" + s + "\". Check announcements-file."); return; } @@ -239,14 +98,12 @@ public class MAMessages String val = vals.length == 2 ? vals[0] : split[1]; String spoutVal = vals.length == 2 ? vals[1] : null; - try - { + try { Msg msg = Msg.valueOf(key); msg.set(val); msg.setSpout(spoutVal); } - catch (Exception e) - { + catch (Exception e) { MobArena.warning(key + " is not a valid key. Check announcements-file."); return; } diff --git a/src/com/garbagemule/MobArena/MASpawnThread.java b/src/com/garbagemule/MobArena/MASpawnThread.java index 348b424..98cb3bb 100644 --- a/src/com/garbagemule/MobArena/MASpawnThread.java +++ b/src/com/garbagemule/MobArena/MASpawnThread.java @@ -15,7 +15,6 @@ import org.bukkit.entity.Creature; import org.bukkit.entity.Entity; import org.bukkit.inventory.ItemStack; -import com.garbagemule.MobArena.MAMessages.Msg; import com.garbagemule.MobArena.util.WaveUtils; import com.garbagemule.MobArena.waves.Wave; diff --git a/src/com/garbagemule/MobArena/MAUtils.java b/src/com/garbagemule/MobArena/MAUtils.java index 999818e..30a7ec1 100644 --- a/src/com/garbagemule/MobArena/MAUtils.java +++ b/src/com/garbagemule/MobArena/MAUtils.java @@ -37,7 +37,6 @@ import org.bukkit.inventory.PlayerInventory; import org.getspout.spoutapi.SpoutManager; import org.getspout.spoutapi.player.SpoutPlayer; -import com.garbagemule.MobArena.MAMessages.Msg; import com.garbagemule.MobArena.util.Config; import com.garbagemule.MobArena.util.EntityPosition; import com.garbagemule.MobArena.util.InventoryItem; @@ -977,7 +976,7 @@ public class MAUtils if (msg.hasSpoutMsg() && sp != null && sp.isSpoutCraftEnabled()) { // Grab the message text. - String text = msg.getSpout(s); + String text = msg.toSpoutString(s); // If more than 26 characters, truncate. if (text.length() > 26) @@ -991,7 +990,7 @@ public class MAUtils sp.sendNotification("MobArena", text, logo, (short) 0, 2000); return true; } - else return tellPlayer(p, msg.get(s)); + else return tellPlayer(p, msg.toString(s)); } public static boolean tellSpoutPlayer(Player p, Msg msg, Material logo) @@ -1025,7 +1024,7 @@ public class MAUtils if (spout && p instanceof Player) return tellSpoutPlayer((Player) p, msg, s, logo); - return tellPlayer(p, msg.get(s)); + return tellPlayer(p, msg.toString(s)); } public static boolean tellPlayer(CommandSender p, Msg msg, String s, Material logo) @@ -1168,7 +1167,7 @@ public class MAUtils if (list == null || list.isEmpty()) { if (none) - return Msg.MISC_NONE.get(); + return Msg.MISC_NONE.toString(); else return ""; } diff --git a/src/com/garbagemule/MobArena/MobArena.java b/src/com/garbagemule/MobArena/MobArena.java index 84d243c..ecbb0c0 100644 --- a/src/com/garbagemule/MobArena/MobArena.java +++ b/src/com/garbagemule/MobArena/MobArena.java @@ -4,6 +4,8 @@ import java.io.File; import java.util.Random; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.bukkit.event.Event.Priority; @@ -39,9 +41,6 @@ public class MobArena extends JavaPlugin implements MobArenaPlugin // Spout stuff public static boolean hasSpout; - // Heroes stuff - //private HeroManager heroManager = null; - // Global variables public static PluginDescriptionFile desc; public static File dir, arenaDir; @@ -69,7 +68,6 @@ public class MobArena extends JavaPlugin implements MobArenaPlugin // Set up soft dependencies setupRegister(); setupSpout(); - //setupHeroes(); setupMagicSpells(); // Set up the ArenaMaster and the announcements @@ -162,6 +160,19 @@ public class MobArena extends JavaPlugin implements MobArenaPlugin public static void warning(String msg) { Bukkit.getServer().getLogger().warning("[MobArena] " + msg); } public static void error(String msg) { Bukkit.getServer().getLogger().severe("[MobArena] " + msg); } + @Override + public void tell(CommandSender sender, String msg) { + if (sender == null || msg.equals("") || msg.equals(" ")) + return; + + sender.sendMessage(ChatColor.GREEN + "[MobArena] " + ChatColor.WHITE + msg); + } + + @Override + public void tell(CommandSender sender, Msg msg) { + tell(sender, msg.toString()); + } + private void setupRegister() { Methods.setMethod(getServer().getPluginManager()); @@ -184,14 +195,6 @@ public class MobArena extends JavaPlugin implements MobArenaPlugin Spouty.registerEvents(this); } - /*private void setupHeroes() - { - Plugin heroes = this.getServer().getPluginManager().getPlugin("Heroes"); - if (heroes == null) return; - - heroManager = ((Heroes) heroes).getHeroManager(); - }*/ - private void setupMagicSpells() { Plugin spells = this.getServer().getPluginManager().getPlugin("MagicSpells"); @@ -208,11 +211,6 @@ public class MobArena extends JavaPlugin implements MobArenaPlugin @Override public ArenaMaster getArenaMaster() { return am; } - /*public HeroManager getHeroManager() - { - return heroManager; - }*/ - private String getHeader() { String sep = System.getProperty("line.separator"); diff --git a/src/com/garbagemule/MobArena/MobArenaPlugin.java b/src/com/garbagemule/MobArena/MobArenaPlugin.java index c15256d..8b7ea94 100644 --- a/src/com/garbagemule/MobArena/MobArenaPlugin.java +++ b/src/com/garbagemule/MobArena/MobArenaPlugin.java @@ -1,6 +1,12 @@ package com.garbagemule.MobArena; +import org.bukkit.command.CommandSender; + public interface MobArenaPlugin { public ArenaMaster getArenaMaster(); + + public void tell(CommandSender sender, String msg); + + public void tell(CommandSender sender, Msg msg); } diff --git a/src/com/garbagemule/MobArena/Msg.java b/src/com/garbagemule/MobArena/Msg.java new file mode 100644 index 0000000..cbe8a61 --- /dev/null +++ b/src/com/garbagemule/MobArena/Msg.java @@ -0,0 +1,167 @@ +package com.garbagemule.MobArena; + +import org.bukkit.Material; + +public enum Msg +{ + ARENA_START("Let the slaughter begin!", "Arena started!", Material.REDSTONE_TORCH_ON), + ARENA_END("Arena finished.", "Arena finished.", Material.REDSTONE_TORCH_OFF), + ARENA_DOES_NOT_EXIST("That arena does not exist. Type /ma arenas for a list.", "Can't find arena."), + JOIN_NOT_ENABLED("MobArena is not enabled.", "MobArena disabled.", Material.REDSTONE_TORCH_OFF), + JOIN_IN_OTHER_ARENA("You are already in an arena! Leave that one first.", "In another arena."), + JOIN_ARENA_NOT_ENABLED("This arena is not enabled.", "Arena disabled.", Material.REDSTONE_TORCH_OFF), + JOIN_ARENA_NOT_SETUP("This arena has not been set up yet.", "Arena not set up.", Material.REDSTONE_TORCH_OFF), + JOIN_ARENA_EDIT_MODE("This arena is in edit mode.", "Arena in edit mode.", Material.IRON_SPADE), + JOIN_ARENA_PERMISSION("You don't have permission to join this arena.", "No permission!", Material.FENCE), + JOIN_FEE_REQUIRED("Insufficient funds. Price: %", "Price: %", Material.DIAMOND), + JOIN_FEE_PAID("Price to join was: %", "Paid: %", Material.DIAMOND), + JOIN_ARENA_IS_RUNNING("This arena is in already progress.", "Already running!", Material.GOLD_RECORD), + JOIN_ALREADY_PLAYING("You are already playing!", "Already playing!", Material.GOLD_RECORD), + JOIN_ARG_NEEDED("You must specify an arena. Type /ma arenas for a list."), + JOIN_TOO_FAR("You are too far away from the arena to join/spectate.", "Too far from arena.", Material.COMPASS), + JOIN_EMPTY_INV("You must empty your inventory to join the arena.", "Empty your inventory.", Material.CHEST), + JOIN_PLAYER_LIMIT_REACHED("The player limit of this arena has been reached.", "No spots left.", Material.MILK_BUCKET), + JOIN_STORE_INV_FAIL("Failed to store inventory. Try again."), + JOIN_EXISTING_INV_RESTORED("Your old inventory items have been restored."), + JOIN_PLAYER_JOINED("You joined the arena. Have fun!", "Joined arena.", Material.IRON_SWORD), + LEAVE_NOT_PLAYING("You are not in the arena.", "Not in arena."), + LEAVE_PLAYER_LEFT("You left the arena. Thanks for playing!", "Left arena.", Material.WOOD_DOOR), + PLAYER_DIED("% died!", "% died!", Material.BONE), + SPEC_PLAYER_SPECTATE("Enjoy the show!", "Enjoy the show!"), + SPEC_NOT_RUNNING("This arena isn't running.", "Arena not running.", Material.REDSTONE_TORCH_OFF), + SPEC_ARG_NEEDED("You must specify an arena. Type /ma arenas for a list.", "Arena name required."), + SPEC_EMPTY_INV("Empty your inventory first!", "Empty your inventory.", Material.CHEST), + SPEC_ALREADY_PLAYING("Can't spectate when in the arena!", "Already playing!"), + NOT_READY_PLAYERS("Not ready: %"), + FORCE_START_RUNNING("Arena has already started."), + FORCE_START_NOT_READY("Can't force start, no players are ready."), + FORCE_START_STARTED("Forced arena start."), + FORCE_END_EMPTY("No one is in the arena."), + FORCE_END_ENDED("Forced arena end."), + FORCE_END_IDLE("You weren't quick enough!"), + REWARDS_GIVE("Here are all of your rewards!"), + LOBBY_DROP_ITEM("No sharing allowed at this time!", "Can't drop items here."), + LOBBY_PLAYER_READY("You have been flagged as ready!", "Flagged as ready!"), + LOBBY_PICK_CLASS("You must first pick a class!", "Pick a class first!"), + LOBBY_NOT_ENOUGH_PLAYERS("Not enough players to start. Need at least % players.", "Need more players."), + LOBBY_RIGHT_CLICK("Punch the sign. Don't right-click.", "Punch the sign."), + LOBBY_CLASS_PICKED("You have chosen % as your class!", "%"), + LOBBY_CLASS_RANDOM("You will get a random class on arena start."), + LOBBY_CLASS_PERMISSION("You don't have permission to use this class!", "No permission!", Material.FENCE), + WARP_TO_ARENA("Can't warp to the arena during battle!"), + WARP_FROM_ARENA("Warping not allowed in the arena!"), + WAVE_DEFAULT("Wave #%!", "Wave #%!", Material.YELLOW_FLOWER), + WAVE_SPECIAL("Wave #%! [SPECIAL]", "Wave #%! [SPECIAL]", Material.RED_ROSE), + WAVE_SWARM("Wave #%! [SWARM]", "Wave #%! [SWARM]", Material.LONG_GRASS), + WAVE_BOSS("Wave #%! [BOSS]", "Wave #%! [BOSS]", Material.FIRE), + WAVE_BOSS_ABILITY("Boss used ability: %!", "Boss: %", Material.FIRE), + WAVE_BOSS_LOW_HEALTH("Boss is almost dead!", "Boss almost dead!", Material.FIRE), + WAVE_REWARD("You just earned a reward: %", "Reward: %"), + MISC_LIST_PLAYERS("Live players: %"), + MISC_LIST_ARENAS("Available arenas: %"), + MISC_COMMAND_NOT_ALLOWED("You can't use that command in the arena!"), + MISC_NO_ACCESS("You don't have access to this command."), + MISC_NONE(""); + + private String msg, spoutMsg; + private Material logo; + + /** + * Default constructor. + * @param msg a string for the chat window + * @param spoutMsg a string for Spout + * @param logo a logo for Spout + */ + private Msg(String msg, String spoutMsg, Material logo) { + this.msg = msg; + this.spoutMsg = spoutMsg; + this.logo = logo; + } + + /** + * Custom Spout constructor. + * @param msg a string for the chat window + * @param spoutMsg a string for Spout + */ + private Msg(String msg, String spoutMsg) { + this(msg, spoutMsg, null); + } + + /** + * Custom normal constructor. + * @param msg a string for the chat window + */ + private Msg(String msg) { + this(msg, null); + } + + /** + * Change this enum's chat window string. + * @param msg a string for the chat window + */ + public void set(String msg) { + this.msg = msg; + } + + /** + * Change this enum's Spout string. + * @param spoutMsg a string for Spout + */ + public void setSpout(String spoutMsg) { + this.spoutMsg = spoutMsg; + + if (spoutMsg == null) + logo = null; + } + + /** + * Check if this enum has a Spout string associated with it. + * @return true, if a Spout string is available, false otherwise. + */ + public boolean hasSpoutMsg() { + return spoutMsg != null; + } + + /** + * Get the logo of this enum. + * The default logo is Material.SLIME_BALL if none is specified. + * @return the logo for this enum + */ + public Material getLogo() { + return logo == null ? Material.SLIME_BALL : logo; + } + + @Override + public String toString() { + return msg; + } + + /** + * Same as above, just returning the string for Spout instead. + * @return the string for Spout + */ + public String toSpoutString() { + return spoutMsg; + } + + /** + * Extended toString method that allows a variable. + * @param s the variable value + * @return the string for the chat window, with all %'s replaced by the input + */ + public String toString(String s) { + return (s != null) ? msg.replace("%", s) : msg; + } + + /** + * Same as above, but for the Spout string. + * @param s the variable value + * @return the string for Spout, with all %'s replaced by the input + */ + public String toSpoutString(String s) { + if (spoutMsg == null) + return toString(s); + + return (s != null) ? spoutMsg.replace("%", s) : spoutMsg; + } +} \ No newline at end of file diff --git a/src/com/garbagemule/MobArena/commands/CommandHandler.java b/src/com/garbagemule/MobArena/commands/CommandHandler.java index ed2f642..c3c6362 100644 --- a/src/com/garbagemule/MobArena/commands/CommandHandler.java +++ b/src/com/garbagemule/MobArena/commands/CommandHandler.java @@ -30,7 +30,7 @@ public class CommandHandler implements CommandExecutor @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { if (args.length == 0) { - sender.sendMessage("You need arguments, pal!"); + plugin.tell(sender, Msg.MISC_NONE); return true; } diff --git a/src/com/garbagemule/MobArena/commands/user/ArenaListCommand.java b/src/com/garbagemule/MobArena/commands/user/ArenaListCommand.java index b2ac3a6..7d27ad8 100644 --- a/src/com/garbagemule/MobArena/commands/user/ArenaListCommand.java +++ b/src/com/garbagemule/MobArena/commands/user/ArenaListCommand.java @@ -21,28 +21,16 @@ public class ArenaListCommand implements MACommand @Override public boolean execute(MobArenaPlugin plugin, Player sender, String... args) { - // Grab the arena master. + // Grab the arena master and the args. ArenaMaster am = plugin.getArenaMaster(); // Get the arenas. - List arenas = am.getEnabledArenas(); + List arenas = am.getEnabledAndPermittedArenas(sender); - String msg = "Available arenas: "; - if (arenas.size() == 0) { - sender.sendMessage(msg + ""); - return true; - } + // Turn the list into a string. + String msg = Msg.MISC_LIST_ARENAS.toString(listToString(arenas)); - // Enumerate arenas. - for (Arena a : arenas) { - msg += a.configName() + ", "; - } - - // Trim off the trailing comma. - msg = msg.substring(0, msg.length() - 2); - - // Send the message! - sender.sendMessage(msg); + plugin.tell(sender, msg); return true; } @@ -50,4 +38,17 @@ public class ArenaListCommand implements MACommand public boolean executeFromConsole(MobArenaPlugin plugin, CommandSender sender, String... args) { return false; } + + private String listToString(List list) { + String result = ""; + + for (E e : list) { + result += e + ", "; + } + + if (result.equals("")) + return Msg.MISC_NONE.toString(); + + return result.substring(0, result.length() - 2); + } } diff --git a/src/com/garbagemule/MobArena/commands/user/JoinCommand.java b/src/com/garbagemule/MobArena/commands/user/JoinCommand.java index 7da9ce2..7ef7bda 100644 --- a/src/com/garbagemule/MobArena/commands/user/JoinCommand.java +++ b/src/com/garbagemule/MobArena/commands/user/JoinCommand.java @@ -21,28 +21,46 @@ public class JoinCommand implements MACommand @Override public boolean execute(MobArenaPlugin plugin, Player sender, String... args) { - // Grab the arena master - ArenaMaster am = plugin.getArenaMaster(); + // Grab the arena master and get the argument. + ArenaMaster am = plugin.getArenaMaster(); + String arenaName = (args.length == 1) ? args[0] : null; - // Get all enabled arenas. - List arenas = am.getEnabledArenas(); + // Get all arenas this player is eligible for. + List arenas = am.getEnabledAndPermittedArenas(sender); - // If no arena was specified, and multiple arenas are available, notify. - if (args.length < 1 && arenas.size() > 1) { - sender.sendMessage("There are more than one arena. Pick one, damnit!"); - return false; - } - - // If only one arena, pick it no matter what, otherwise, look for name. - Arena arena = arenas.size() == 1 ? arenas.get(0) : am.getArenaWithName(args[0]); - - // If null, no arena was found. - if (arena == null) { - sender.sendMessage("The arena '" + args[0] + "' does not exist."); + // If no arenas found, just tell the player it's not enabled. + if (arenas.size() == 0) { + plugin.tell(sender, Msg.JOIN_ARENA_NOT_ENABLED); return false; } - sender.sendMessage("You've joined arena '" + arena.configName() + "'!"); + // Require an argument in case of multiple arenas. + if (arenaName == null && arenas.size() > 1) { + plugin.tell(sender, Msg.JOIN_ARG_NEEDED); + return false; + } + + /* At this point in time, if there was no argument, there must be only + * a single arena in the list. If there was an argument, we can safely + * get the arena with that name, because canJoin() will do the rest of + * the sanity checks. */ + Arena a = (arenaName == null) ? arenas.get(0) : am.getArenaWithName(arenaName); + + // If the arena is null, it doesn't exist. + if (a == null) { + plugin.tell(sender, Msg.ARENA_DOES_NOT_EXIST); + return false; + } + + // Let the arena itself do the rest of the sanity checking. + if (!a.canJoin(sender)) { + return false; + } + + // If no problems, let the guy join and notify. + a.playerJoin(sender, sender.getLocation()); + plugin.tell(sender, Msg.JOIN_PLAYER_JOINED); + return true; } diff --git a/src/com/garbagemule/MobArena/waves/BossWave.java b/src/com/garbagemule/MobArena/waves/BossWave.java index b9421a6..a91c5dd 100644 --- a/src/com/garbagemule/MobArena/waves/BossWave.java +++ b/src/com/garbagemule/MobArena/waves/BossWave.java @@ -16,7 +16,7 @@ import org.bukkit.entity.LivingEntity; import com.garbagemule.MobArena.Arena; import com.garbagemule.MobArena.MAUtils; -import com.garbagemule.MobArena.MAMessages.Msg; +import com.garbagemule.MobArena.Msg; import com.garbagemule.MobArena.util.Config; import com.garbagemule.MobArena.util.WaveUtils; diff --git a/src/com/garbagemule/MobArena/waves/DefaultWave.java b/src/com/garbagemule/MobArena/waves/DefaultWave.java index 55eceef..34b94c5 100644 --- a/src/com/garbagemule/MobArena/waves/DefaultWave.java +++ b/src/com/garbagemule/MobArena/waves/DefaultWave.java @@ -10,7 +10,7 @@ import org.bukkit.Location; import com.garbagemule.MobArena.Arena; import com.garbagemule.MobArena.MAUtils; -import com.garbagemule.MobArena.MAMessages.Msg; +import com.garbagemule.MobArena.Msg; import com.garbagemule.MobArena.util.Config; import com.garbagemule.MobArena.util.WaveUtils; diff --git a/src/com/garbagemule/MobArena/waves/SpecialWave.java b/src/com/garbagemule/MobArena/waves/SpecialWave.java index 47efa31..1bf49d8 100644 --- a/src/com/garbagemule/MobArena/waves/SpecialWave.java +++ b/src/com/garbagemule/MobArena/waves/SpecialWave.java @@ -10,7 +10,7 @@ import org.bukkit.Location; import com.garbagemule.MobArena.Arena; import com.garbagemule.MobArena.MAUtils; -import com.garbagemule.MobArena.MAMessages.Msg; +import com.garbagemule.MobArena.Msg; import com.garbagemule.MobArena.util.Config; import com.garbagemule.MobArena.util.WaveUtils; diff --git a/src/com/garbagemule/MobArena/waves/SwarmWave.java b/src/com/garbagemule/MobArena/waves/SwarmWave.java index bf9e1f9..d23fadc 100644 --- a/src/com/garbagemule/MobArena/waves/SwarmWave.java +++ b/src/com/garbagemule/MobArena/waves/SwarmWave.java @@ -8,7 +8,7 @@ import org.bukkit.entity.LivingEntity; import com.garbagemule.MobArena.Arena; import com.garbagemule.MobArena.MAUtils; -import com.garbagemule.MobArena.MAMessages.Msg; +import com.garbagemule.MobArena.Msg; import com.garbagemule.MobArena.util.Config; import com.garbagemule.MobArena.util.WaveUtils; diff --git a/test/config.yml b/test/config.yml new file mode 100644 index 0000000..6059fac --- /dev/null +++ b/test/config.yml @@ -0,0 +1,111 @@ +# MobArena v0.94.4.3 - Config-file +# Read the Wiki for details on how to set up this file: http://goo.gl/F5TTc +# Note: You -must- use spaces instead of tabs! +global-settings: + enabled: true + allowed-commands: /list, /pl + update-notification: true +classes: + Knight: + items: diamond_sword, grilled_pork:2, rotten_flesh:2 + armor: 306,307,308,309 + permissions: + - fastfood.instanteat + - fastfood.nostarve + - -fastfood.autoregain + Tank: + items: iron_sword, grilled_pork:3, apple, coal, compass + armor: 310,311,312,313 + permissions: + Archer: + items: wood_sword, bow, arrow:256, grilled_pork, bone + armor: 298,299,300,301 + Chef: + items: stone_sword, bread:6, grilled_pork:4, mushroom_soup, cake:5, ink_sack:3:10, wool:3:2, ink_sack:brown:10, wool:brown:2 + armor: 314,315,316,317 + permissions: + - fastfood.instanteat + - fastfood.nostarve + - -fastfood.autoregain + Oddjob: + items: stone_sword, flint_and_steel, netherrack:2, tnt:4, pork:3, potion:32:10, potion:10, potion:8226:2, potion:8197:2, potion:16420:2 + armor: 298,299,300,301 + permissions: + - fastfood.instanteat + - fastfood.nostarve + - -fastfood.autoregain +arenas: + lol: + settings: + world: Tundra + enabled: true + protect: true + entry-fee: '' + logging: yml + clear-wave-before-next: true + detonate-creepers: false + detonate-damage: false + lightning: true + auto-equip-armor: true + force-restore: false + soft-restore: false + soft-restore-drops: false + require-empty-inv-join: false + require-empty-inv-spec: true + hellhounds: false + pvp-enabled: false + monster-infight: false + allow-teleporting: false + spectate-on-death: true + share-items-in-arena: true + player-limit: 0 + max-join-distance: 0 + repair-delay: 5 + first-wave-delay: 3 + wave-interval: 12 + special-modulo: 4 + max-idle-time: 0 + min-players: 0 + max-players: 0 + spout-class-select: true + final-wave: 0 + waves: + recurrent: + def1: + type: default + priority: 1 + frequency: 1 + monsters: + mushroom_cows: 10 + wave: 1 + boss1: + type: boss + priority: 10 + frequency: 5 + monster: zombie + abilities: root-target, fetch-distant + ability-interval: 3 + ability-announce: true + rewards: + waves: + after: + '7': minecart, storage_minecart, powered_minecart + '16': diamond_sword + '13': iron_sword, iron_pickaxe, iron_spade + every: + '1': sponge + '3': feather, bone, stick + '10': iron_ingot:10, gold_ingot:8 + '5': dirt:4, gravel:4, stone:4 + coords: + p1: 83,64,107,0.0,0.0 + p2: 113,79,137,0.0,0.0 + arena: 100,72,132,-233.39989,10.649986 + lobby: 87,66,111,0.0,0.0 + spectator: 13,66,46,6.0015564,-3.7500422 + spawnpoints: + s1: 88,72,112,0.0,0.0 + s2: 88,72,132,0.0,0.0 + s3: 108,72,112,0.0,0.0 + s4: 108,72,132,0.0,0.0 + leaderboard: 16,67,49,0.0,0.0 diff --git a/test/garbagemule/mobarena/standard/TestNewConfig.java b/test/garbagemule/mobarena/standard/TestNewConfig.java new file mode 100644 index 0000000..0094471 --- /dev/null +++ b/test/garbagemule/mobarena/standard/TestNewConfig.java @@ -0,0 +1,212 @@ +package garbagemule.mobarena.standard; + +import static org.junit.Assert.*; + +import java.io.*; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.util.*; + +import org.apache.commons.io.FileUtils; +import org.bukkit.util.config.Configuration; +import org.junit.*; + +import com.garbagemule.MobArena.util.Config; + +@SuppressWarnings("deprecation") +public class TestNewConfig +{ + private Configuration oldConfig; + private Config newConfig; + private File testFileOld, testFileNew; + + @Before + public void setup() { + testFileOld = makeTestFile("test", "config.yml"); + testFileNew = makeTestFile("test", "config.yml"); + + oldConfig = new Configuration(testFileOld); + newConfig = new Config(testFileNew); + + oldConfig.load(); + newConfig.load(); + } + + @After + public void cleanup() { + testFileOld.delete(); + testFileNew.delete(); + } + + @Test + public void getProperty() { + String path = "arenas.lol.rewards.waves.after.7"; + + Object oldObj = oldConfig.getProperty(path); + Object newObj = newConfig.getProperty(path); + + assertEquals(oldObj, newObj); + } + + @Test + public void getInt() { + String path = "arenas.lol.settings.first-wave-delay"; + int oldInt = oldConfig.getInt(path, -1); + int newInt = newConfig.getInt(path, -2); + + assertEquals(oldInt, newInt); + } + + @Test + public void getString() { + String path = "classes.Knight.items"; + String oldString = oldConfig.getString(path, "old"); + String newString = newConfig.getString(path, "new"); + + assertEquals(oldString, newString); + + path = "classes.Knight.armor"; + oldString = oldConfig.getString(path, "old"); + newString = newConfig.getString(path, "new"); + + assertEquals(oldString, newString); + } + + @Test + public void getBoolean() { + String path = "global-settings.enabled"; + boolean oldBoolean = oldConfig.getBoolean(path, false); + boolean newBoolean = newConfig.getBoolean(path, true); + + assertEquals(oldBoolean, newBoolean); + + // Test with both permutations of the default value. + oldBoolean = oldConfig.getBoolean(path, true); + newBoolean = newConfig.getBoolean(path, false); + + assertEquals(oldBoolean, newBoolean); + } + + @Test + public void getKeys() { + String path = "classes"; + + List oldList = new LinkedList(); + List newList = new LinkedList(); + + oldList.addAll(oldConfig.getKeys(path)); + newList.addAll(newConfig.getKeys(path)); + + // Sort, just in case. + Collections.sort(oldList); + Collections.sort(newList); + + assertEquals(oldList, newList); + } + + @Test + public void getStringList() { + String path = "classes.Knight.permissions"; + + List oldList = oldConfig.getStringList(path, null); + List newList = newConfig.getStringList(path, null); + assertNotNull(oldList); + assertNotNull(newList); + assertFalse(oldList.isEmpty()); + assertFalse(newList.isEmpty()); + + assertEquals(oldList, newList); + + // Empty lists. + path = "classes.Tank.permissions"; + + oldList = oldConfig.getStringList(path, new LinkedList()); + newList = newConfig.getStringList(path, new LinkedList()); + assertNotNull(oldList); + assertNotNull(newList); + assertTrue(oldList.isEmpty()); + assertTrue(newList.isEmpty()); + + assertEquals(oldList, newList); + + // Null values behave the same as empty lists. + oldList = oldConfig.getStringList(path, null); + newList = newConfig.getStringList(path, null); + assertNotNull(oldList); + assertNotNull(newList); + assertTrue(oldList.isEmpty()); + assertTrue(newList.isEmpty()); + + assertEquals(oldList, newList); + + + // Non-existing lists. + path = "classes.Archer.permissions"; + + oldList = oldConfig.getStringList(path, new LinkedList()); + newList = newConfig.getStringList(path, new LinkedList()); + assertNotNull(oldList); + assertNotNull(newList); + assertTrue(oldList.isEmpty()); + assertTrue(newList.isEmpty()); + + assertEquals(oldList, newList); + } + + @Test + public void removeProperty() { + String path = "global-settings.enabled"; + + // Make sure something exists first. + Object oldObj = oldConfig.getProperty(path); + Object newObj = newConfig.getProperty(path); + assertNotNull(oldObj); + assertNotNull(newObj); + + assertEquals(oldObj, newObj); + + // Remove and try again. + oldConfig.removeProperty(path); + newConfig.removeProperty(path); + + // They should now both be null. + oldObj = oldConfig.getProperty(path); + newObj = newConfig.getProperty(path); + assertNull(oldObj); + assertNull(newObj); + + assertEquals(oldObj, newObj); + + // Should be idempotent. + oldConfig.removeProperty(path); + newConfig.removeProperty(path); + + oldObj = oldConfig.getProperty(path); + newObj = newConfig.getProperty(path); + assertNull(oldObj); + assertNull(newObj); + + assertEquals(oldObj, newObj); + } + + private File makeTestFile(String path, String filename) { + // Grab the time + Timestamp timestamp = new Timestamp(new Date().getTime()); + + // Convert to a string + String time = new SimpleDateFormat("MM-dd-yyyy-H_m_s_S").format(timestamp); + + // Make a new file + File testFile = new File(path + File.separator + time + "_" + filename); + + // Start copying the bytes + try { + FileUtils.copyFile(new File(path + File.separator + filename), testFile); + } + catch (Exception e) { + e.printStackTrace(); + } + + return testFile; + } +} diff --git a/test/garbagemule/mobarena/standard/TestUserCommands.java b/test/garbagemule/mobarena/standard/TestUserCommands.java new file mode 100644 index 0000000..a44ed57 --- /dev/null +++ b/test/garbagemule/mobarena/standard/TestUserCommands.java @@ -0,0 +1,208 @@ +package garbagemule.mobarena.standard; + +import static org.junit.Assert.*; + +import mock.bukkit.*; +import mock.mobarena.*; +import mock.util.MockLogger; + +import org.junit.*; + +import com.garbagemule.MobArena.*; +import com.garbagemule.MobArena.commands.*; + +public class TestUserCommands +{ + private static final String LABEL = "ma"; + + private MockLogger log; + private String expected; + + private MobArenaPlugin plugin; + private ArenaMaster arenaMaster; + private CommandHandler commandHandler; + private MockPlayer player; + + @Before + public void setup() { + // Set up the log.; + log = new MockLogger(); + log.log("Start"); + + // Create a plugin. + plugin = new MockMobArena(); + + // Get the ArenaMaster. + arenaMaster = plugin.getArenaMaster(); + + // Create a player and a command handler. + player = new MockPlayer("garbagemule", log); + commandHandler = new CommandHandler(plugin); + } + + @After + public void cleanup() { + log = null; + plugin = null; + arenaMaster = null; + player = null; + commandHandler = null; + } + + + + /* ********************************************************************* */ + /* + /* JOIN COMMAND + /* + /* ********************************************************************* */ + + // TODO: Expand all tests to check that the player is indeed added and warped. + + @Test + public void expectArguments() { + commandHandler.onCommand(player, null, LABEL, compileArgs()); + expected = MockLogger.compileMsgToPlayer(player, Msg.MISC_NONE); + assertEquals(expected, log.getLastEntry().getValue()); + } + + @Test + public void playerCanJoinExistingArena() { + // Create some arenas. + createArenas("test","test2","test21","test12"); + + // Try to join an existing arena. + commandHandler.onCommand(player, null, LABEL, compileArgs("join","test")); + + // Success! + expected = MockLogger.compileMsgToPlayer(player, Msg.JOIN_PLAYER_JOINED); + assertEquals(expected, log.getLastEntry().getValue()); + + // Verify that the player is now in the lobby. + Arena a = arenaMaster.getArenaWithName("test"); + assertTrue(a.inLobby(player)); + } + + @Test + public void playerCantJoinNonExistingArena() { + // Create some arenas. + createArenas("test","test2","test21","test12"); + + // Try to join one that doesn't exist. + commandHandler.onCommand(player, null, LABEL, compileArgs("join","test1")); + + // Failure! + expected = MockLogger.compileMsgToPlayer(player, Msg.ARENA_DOES_NOT_EXIST); + assertEquals(expected, log.getLastEntry().getValue()); + } + + @Test + public void argsRequiredForMultipleArenas() { + // Create some arenas. + createArenas("test","test2","test21","test12"); + + // Try to join with no arguments. + commandHandler.onCommand(player, null, LABEL, compileArgs("join")); + + // Should join the only existing arena. + expected = MockLogger.compileMsgToPlayer(player, Msg.JOIN_ARG_NEEDED); + assertEquals(expected, log.getLastEntry().getValue()); + } + + @Test + public void noArgsNeededForOneArenaOnly() { + // Create one arena. + createArenas("gjklqwejklewjglkejg"); + + // Try to join with no arguments. + commandHandler.onCommand(player, null, LABEL, compileArgs("join")); + + // Should join the only existing arena. + expected = MockLogger.compileMsgToPlayer(player, Msg.JOIN_PLAYER_JOINED); + assertEquals(expected, log.getLastEntry().getValue()); + + // Verify that the player is now in the lobby. + Arena a = arenaMaster.getArenaWithName("gjklqwejklewjglkejg"); + assertTrue(a.inLobby(player)); + } + + @Test + public void playerCanOnlyJoinPermittedArenas() { + // Create a couple of arenas. + createArenas("yay", "nay"); + + // Give the player no permission for one. + player.setPermission("mobarena.arenas.nay", false); + + // Try to join. + commandHandler.onCommand(player, null, LABEL, compileArgs("join","nay")); + + // No permission. + expected = MockLogger.compileMsgToPlayer(player, Msg.JOIN_ARENA_PERMISSION); + assertEquals(expected, log.getLastEntry().getValue()); + + // Verify that the player didn't join and isn't in the lobby. + Arena a = arenaMaster.getArenaWithName("nay"); + assertFalse(a.inLobby(player)); + } + + + + /* ********************************************************************* */ + /* + /* LIST ARENAS COMMAND + /* + /* ********************************************************************* */ + + @Test + public void shouldListAllArenas() { + // Create some arenas. + createArenas("one", "two", "three", "four"); + + // Try to list them. + commandHandler.onCommand(player, null, LABEL, compileArgs("arenas")); + + // Should show all of them, because player has permission to all per default. + expected = MockLogger.compileMsgToPlayer(player, Msg.MISC_LIST_ARENAS.toString("one, two, three, four")); + assertEquals(expected, log.getLastEntry().getValue()); + } + + @Test + public void shouldListMiscNoneIfNoArenas() { + // Create an arena and remove the permission. + createArenas("one"); + player.setPermission("mobarena.arenas.one", false); + + // Try to list arenas. + commandHandler.onCommand(player, null, LABEL, compileArgs("arenas")); + + // Should display MISC_NONE + String none = Msg.MISC_NONE.toString(); + expected = MockLogger.compileMsgToPlayer(player, Msg.MISC_LIST_ARENAS.toString(none)); + assertEquals(expected, log.getLastEntry().getValue()); + } + + @Test + public void shouldDisplayOnlyPermittedArenas() { + // Create three arenas, remove permissions for one. + createArenas("one", "two", "three"); + player.setPermission("mobarena.arenas.two", false); + + // List arenas. + commandHandler.onCommand(player, null, LABEL, compileArgs("arenas")); + + // Should display one and three. + expected = MockLogger.compileMsgToPlayer(player, Msg.MISC_LIST_ARENAS.toString("one, three")); + assertEquals(expected, log.getLastEntry().getValue()); + } + + private void createArenas(String... args) { + for (String s : args) { + arenaMaster.createArenaNode(s, null); + } + } + + private String[] compileArgs(String... args) { + return args; + } +} diff --git a/test/mock/bukkit/MockCommand.java b/test/mock/bukkit/MockCommand.java new file mode 100644 index 0000000..9cd8054 --- /dev/null +++ b/test/mock/bukkit/MockCommand.java @@ -0,0 +1,19 @@ +package mock.bukkit; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; + +public class MockCommand extends Command +{ + public MockCommand(String name) + { + super(name); + } + + @Override + public boolean execute(CommandSender arg0, String arg1, String[] arg2) + { + return false; + } + +} diff --git a/test/mock/bukkit/MockPlayer.java b/test/mock/bukkit/MockPlayer.java new file mode 100644 index 0000000..177d59e --- /dev/null +++ b/test/mock/bukkit/MockPlayer.java @@ -0,0 +1,976 @@ +package mock.bukkit; + +import java.net.InetSocketAddress; +import java.util.*; + +import mock.util.MockLogger; + +import org.bukkit.*; +import org.bukkit.block.Block; +import org.bukkit.entity.*; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.inventory.*; +import org.bukkit.map.MapView; +import org.bukkit.permissions.*; +import org.bukkit.plugin.Plugin; +import org.bukkit.util.Vector; + +public class MockPlayer implements Player +{ + private MockLogger log; + private String name; + private int health; + private boolean isOp; + private Map permissions; + + public MockPlayer(String name) { + this.name = name; + this.health = 20; + this.isOp = false; + this.permissions = new HashMap(); + } + + public MockPlayer(String name, MockLogger log) { + this(name); + this.log = log; + } + + public void setPermission(String perm, Boolean b) { + permissions.put(perm, b); + } + + public void removePermission(String perm) { + permissions.remove(perm); + } + + @Override + public GameMode getGameMode() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public PlayerInventory getInventory() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public ItemStack getItemInHand() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public String getName() + { + return name; + } + + @Override + public int getSleepTicks() + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public boolean isSleeping() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public void setGameMode(GameMode arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void setItemInHand(ItemStack arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void damage(int value) + { + health -= value; + } + + @Override + public void damage(int arg0, Entity arg1) + { + // TODO Auto-generated method stub + + } + + @Override + public double getEyeHeight() + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public double getEyeHeight(boolean arg0) + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public Location getEyeLocation() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public int getHealth() + { + return health; + } + + @Override + public int getLastDamage() + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public List getLastTwoTargetBlocks(HashSet arg0, int arg1) + { + // TODO Auto-generated method stub + return null; + } + + @Override + public List getLineOfSight(HashSet arg0, int arg1) + { + // TODO Auto-generated method stub + return null; + } + + @Override + public int getMaxHealth() + { + return 20; + } + + @Override + public int getMaximumAir() + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public int getMaximumNoDamageTicks() + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public int getNoDamageTicks() + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public int getRemainingAir() + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public Block getTargetBlock(HashSet arg0, int arg1) + { + // TODO Auto-generated method stub + return null; + } + + @Override + public Vehicle getVehicle() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean isInsideVehicle() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean leaveVehicle() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public void setHealth(int value) + { + health = value; + } + + @Override + public void setLastDamage(int arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void setMaximumAir(int arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void setMaximumNoDamageTicks(int arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void setNoDamageTicks(int arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void setRemainingAir(int arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public Arrow shootArrow() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public Egg throwEgg() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public Snowball throwSnowball() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean eject() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public int getEntityId() + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public float getFallDistance() + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public int getFireTicks() + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public EntityDamageEvent getLastDamageCause() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public Location getLocation() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public int getMaxFireTicks() + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public List getNearbyEntities(double arg0, double arg1, double arg2) + { + // TODO Auto-generated method stub + return null; + } + + @Override + public Entity getPassenger() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public Server getServer() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public int getTicksLived() + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public UUID getUniqueId() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public Vector getVelocity() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public World getWorld() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean isDead() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean isEmpty() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public void remove() + { + // TODO Auto-generated method stub + + } + + @Override + public void setFallDistance(float arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void setFireTicks(int arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void setLastDamageCause(EntityDamageEvent arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public boolean setPassenger(Entity arg0) + { + // TODO Auto-generated method stub + return false; + } + + @Override + public void setTicksLived(int arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void setVelocity(Vector arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public boolean teleport(Location arg0) + { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean teleport(Entity arg0) + { + // TODO Auto-generated method stub + return false; + } + + @Override + public PermissionAttachment addAttachment(Plugin arg0) + { + // TODO Auto-generated method stub + return null; + } + + @Override + public PermissionAttachment addAttachment(Plugin arg0, int arg1) + { + // TODO Auto-generated method stub + return null; + } + + @Override + public PermissionAttachment addAttachment(Plugin arg0, String arg1, + boolean arg2) + { + // TODO Auto-generated method stub + return null; + } + + @Override + public PermissionAttachment addAttachment(Plugin arg0, String arg1, + boolean arg2, int arg3) + { + // TODO Auto-generated method stub + return null; + } + + @Override + public Set getEffectivePermissions() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean hasPermission(String perm) { + Boolean b = permissions.get(perm); + if (b == null || b.booleanValue() == true) + return true; + + return false; + } + + @Override + public boolean hasPermission(Permission perm) + { + return true; + } + + @Override + public boolean isPermissionSet(String perm) { + return permissions.get(perm) != null; + } + + @Override + public boolean isPermissionSet(Permission arg0) + { + // TODO Auto-generated method stub + return false; + } + + @Override + public void recalculatePermissions() + { + // TODO Auto-generated method stub + + } + + @Override + public void removeAttachment(PermissionAttachment arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public boolean isOp() + { + return isOp; + } + + @Override + public void setOp(boolean value) + { + this.isOp = value; + } + + @Override + public void sendMessage(String msg) { + log.log(msg); + } + + @Override + public Player getPlayer() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean isBanned() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean isOnline() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean isWhitelisted() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public void setBanned(boolean arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void setWhitelisted(boolean arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public Map serialize() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public void awardAchievement(Achievement arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void chat(String arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public InetSocketAddress getAddress() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public Location getBedSpawnLocation() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public Location getCompassTarget() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public String getDisplayName() + { + return name; + } + + @Override + public float getExhaustion() + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public float getExp() + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public int getExperience() + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public int getFoodLevel() + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public int getLevel() + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public String getPlayerListName() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getPlayerTime() + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public long getPlayerTimeOffset() + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public float getSaturation() + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public int getTotalExperience() + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public void giveExp(int arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void incrementStatistic(Statistic arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void incrementStatistic(Statistic arg0, int arg1) + { + // TODO Auto-generated method stub + + } + + @Override + public void incrementStatistic(Statistic arg0, Material arg1) + { + // TODO Auto-generated method stub + + } + + @Override + public void incrementStatistic(Statistic arg0, Material arg1, int arg2) + { + // TODO Auto-generated method stub + + } + + @Override + public boolean isPlayerTimeRelative() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean isSleepingIgnored() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean isSneaking() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean isSprinting() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public void kickPlayer(String arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void loadData() + { + // TODO Auto-generated method stub + + } + + @Override + public boolean performCommand(String arg0) + { + // TODO Auto-generated method stub + return false; + } + + @Override + public void playEffect(Location arg0, Effect arg1, int arg2) + { + // TODO Auto-generated method stub + + } + + @Override + public void playNote(Location arg0, byte arg1, byte arg2) + { + // TODO Auto-generated method stub + + } + + @Override + public void playNote(Location arg0, Instrument arg1, Note arg2) + { + // TODO Auto-generated method stub + + } + + @Override + public void resetPlayerTime() + { + // TODO Auto-generated method stub + + } + + @Override + public void saveData() + { + // TODO Auto-generated method stub + + } + + @Override + public void sendBlockChange(Location arg0, Material arg1, byte arg2) + { + // TODO Auto-generated method stub + + } + + @Override + public void sendBlockChange(Location arg0, int arg1, byte arg2) + { + // TODO Auto-generated method stub + + } + + @Override + public boolean sendChunkChange(Location arg0, int arg1, int arg2, int arg3, + byte[] arg4) + { + // TODO Auto-generated method stub + return false; + } + + @Override + public void sendMap(MapView arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void sendRawMessage(String arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void setCompassTarget(Location arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void setDisplayName(String arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void setExhaustion(float arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void setExp(float arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void setExperience(int arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void setFoodLevel(int arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void setLevel(int arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void setPlayerListName(String arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void setPlayerTime(long arg0, boolean arg1) + { + // TODO Auto-generated method stub + + } + + @Override + public void setSaturation(float arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void setSleepingIgnored(boolean arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void setSneaking(boolean arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void setSprinting(boolean arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void setTotalExperience(int arg0) + { + // TODO Auto-generated method stub + + } + + @Override + public void updateInventory() + { + // TODO Auto-generated method stub + + } + +} diff --git a/test/mock/mobarena/MockArena.java b/test/mock/mobarena/MockArena.java new file mode 100644 index 0000000..3255a90 --- /dev/null +++ b/test/mock/mobarena/MockArena.java @@ -0,0 +1,540 @@ +package mock.mobarena; + +import java.util.Collection; +import java.util.Comparator; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Wolf; +//import org.bukkit.util.config.Configuration; + +import com.garbagemule.MobArena.Arena; +import com.garbagemule.MobArena.ArenaPlayer; +import com.garbagemule.MobArena.ArenaPlayerStatistics; +import com.garbagemule.MobArena.MAUtils; +import com.garbagemule.MobArena.MobArena; +import com.garbagemule.MobArena.MobArenaPlugin; +import com.garbagemule.MobArena.Msg; +import com.garbagemule.MobArena.repairable.Repairable; +import com.garbagemule.MobArena.util.Config; +import com.garbagemule.MobArena.waves.BossWave; +import com.garbagemule.MobArena.waves.Wave; + +public class MockArena extends Arena +{ + private MobArenaPlugin plugin; + private String name; + private boolean enabled; + + public MockArena(MobArenaPlugin plugin, String name, World world) { + this.plugin = plugin; + this.name = name; + this.enabled = true; + this.setup = true; + this.running = false; + + this.arenaPlayers = new HashSet(); + this.lobbyPlayers = new HashSet(); + } + + @Override + public boolean startArena() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean endArena() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public void forceStart() + { + // TODO Auto-generated method stub + + } + + @Override + public void forceEnd() + { + // TODO Auto-generated method stub + + } + + @Override + public void playerJoin(Player p, Location loc) { + lobbyPlayers.add(p); + } + + @Override + public void playerReady(Player p) + { + // TODO Auto-generated method stub + + } + + @Override + public void playerLeave(Player p) + { + // TODO Auto-generated method stub + + } + + @Override + public void playerDeath(Player p) + { + // TODO Auto-generated method stub + + } + + @Override + public void playerSpec(Player p, Location loc) + { + // TODO Auto-generated method stub + + } + + @Override + public void playerKill(Player p) + { + // TODO Auto-generated method stub + + } + + @Override + public void restoreInvAndGiveRewardsDelayed(Player p) + { + // TODO Auto-generated method stub + + } + + @Override + public void restoreInvAndGiveRewards(Player p) + { + // TODO Auto-generated method stub + + } + + @Override + public void storePlayerData(Player p, Location loc) + { + // TODO Auto-generated method stub + + } + + @Override + public void storeContainerContents() + { + // TODO Auto-generated method stub + + } + + @Override + public void restoreContainerContents() + { + // TODO Auto-generated method stub + + } + + @Override + public void movePlayerToLobby(Player p) + { + // TODO Auto-generated method stub + + } + + @Override + public void movePlayerToSpec(Player p) + { + // TODO Auto-generated method stub + + } + + @Override + public void movePlayerToEntry(Player p) + { + // TODO Auto-generated method stub + + } + + @Override + public void repairBlocks() + { + // TODO Auto-generated method stub + + } + + @Override + public void queueRepairable(Repairable r) + { + // TODO Auto-generated method stub + + } + + @Override + public void assignClass(Player p, String className) + { + // TODO Auto-generated method stub + + } + + @Override + public void assignRandomClass(Player p) + { + // TODO Auto-generated method stub + + } + + @Override + public void assignClassPermissions(Player p) + { + // TODO Auto-generated method stub + + } + + @Override + public void removeClassPermissions(Player p) + { + // TODO Auto-generated method stub + + } + + @Override + public void load(Config config) + { + // TODO Auto-generated method stub + + } + + @Override + public void restoreRegion() + { + // TODO Auto-generated method stub + + } + + @Override + public void serializeConfig() + { + // TODO Auto-generated method stub + + } + + @Override + public void deserializeConfig() + { + // TODO Auto-generated method stub + + } + + @Override + public boolean serializeRegion() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean deserializeRegion() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean inRegion(Location loc) + { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean inRegionRadius(Location loc, int radius) + { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean inArena(Player p) + { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean inLobby(Player p) { + return lobbyPlayers.contains(p); + } + + @Override + public boolean isEnabled() { + return enabled; + } + + @Override + public boolean isRunning() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean isPvpEnabled() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean isLightningEnabled() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean isBossWave() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public String configName() { + return name; + } + + @Override + public String arenaName() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public MobArena getPlugin() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public World getWorld() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public Wave getWave() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public void setWave(Wave wave) + { + // TODO Auto-generated method stub + + } + + @Override + public void setBossWave(BossWave bossWave) + { + // TODO Auto-generated method stub + + } + + @Override + public Set getClasses() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public List getAllSpawnpoints() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public List getSpawnpoints() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public Location getBossSpawnpoint() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public int getPlayerCount() + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public void addBlock(Block b) + { + // TODO Auto-generated method stub + + } + + @Override + public void addMonster(LivingEntity e) + { + // TODO Auto-generated method stub + + } + + @Override + public void addExplodingSheep(LivingEntity e) + { + // TODO Auto-generated method stub + + } + + @Override + public List getAllPlayers() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public List getLivingPlayers() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public Set getArenaPlayers() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public Collection getArenaPlayerSet() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public List getArenaPlayerStatistics( + Comparator comparator) + { + // TODO Auto-generated method stub + return null; + } + + @Override + public List getNonreadyPlayers() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public Set getMonsters() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public Set getPets() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public void resetIdleTimer() + { + // TODO Auto-generated method stub + + } + + @Override + public void addTrunkAndLeaves(Block b) + { + // TODO Auto-generated method stub + + } + + @Override + public boolean canAfford(Player p) + { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean takeFee(Player p) + { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean canJoin(Player p) { + if (!enabled) + plugin.tell(p, Msg.JOIN_ARENA_NOT_ENABLED); + else if (!setup) //|| recurrentWaves.isEmpty()) TODO: Test waves. + plugin.tell(p, Msg.JOIN_ARENA_NOT_SETUP); + else if (edit) + plugin.tell(p, Msg.JOIN_ARENA_EDIT_MODE); + else if (running && (notifyPlayers.contains(p) || notifyPlayers.add(p))) + plugin.tell(p, Msg.JOIN_ARENA_IS_RUNNING); + else if (arenaPlayers.contains(p) || lobbyPlayers.contains(p)) + plugin.tell(p, Msg.JOIN_ALREADY_PLAYING); + else if (!p.hasPermission("mobarena.arenas." + configName())) + plugin.tell(p, Msg.JOIN_ARENA_PERMISSION); + else if (maxPlayers > 0 && lobbyPlayers.size() >= maxPlayers) + plugin.tell(p, Msg.JOIN_PLAYER_LIMIT_REACHED); + else if (joinDistance > 0 && !inRegionRadius(p.getLocation(), joinDistance)) + plugin.tell(p, Msg.JOIN_TOO_FAR); + else if (emptyInvJoin && !MAUtils.hasEmptyInventory(p)) + plugin.tell(p, Msg.JOIN_EMPTY_INV); + else + return true; + + /*else if (!canAfford(p)) + plugin.tell(p, Msg.JOIN_FEE_REQUIRED, MAUtils.listToString(entryFee, plugin));*/ + return false; + } + + @Override + public boolean canSpec(Player p) + { + // TODO Auto-generated method stub + return false; + } + + @Override + public String toString() { + return name; + } +} diff --git a/test/mock/mobarena/MockArenaMaster.java b/test/mock/mobarena/MockArenaMaster.java new file mode 100644 index 0000000..964c901 --- /dev/null +++ b/test/mock/mobarena/MockArenaMaster.java @@ -0,0 +1,232 @@ +package mock.mobarena; + +import java.util.Collection; +import java.util.LinkedList; +import java.util.List; + +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; + +import com.garbagemule.MobArena.*; + +public class MockArenaMaster extends ArenaMaster +{ + private MobArenaPlugin plugin; + private List arenas; + + public MockArenaMaster(MobArenaPlugin plugin) { + this.plugin = plugin; + this.arenas = new LinkedList(); + } + + @Override + public List getEnabledArenas() { + List result = new LinkedList(); + + for (Arena a : arenas) { + if (a.isEnabled()) + result.add(a); + } + + return result; + } + + @Override + public List getPermittedArenas(Player p) { + List result = new LinkedList(); + + for (Arena a : arenas) { + String perm = "mobarena.arenas." + a.configName(); + + if (!p.isPermissionSet(perm) || p.hasPermission(perm)) + result.add(a); + } + + return result; + } + + @Override + public List getEnabledAndPermittedArenas(Player p) { + List result = new LinkedList(); + + for (Arena a : arenas) { + // We only want enabled arenas. + if (!a.isEnabled()) + continue; + + // And the player must have permission. + String perm = "mobarena.arenas." + a.configName(); + if (!p.isPermissionSet(perm) || p.hasPermission(perm)) + result.add(a); + } + + return result; + } + + @Override + public Arena getArenaAtLocation(Location loc) + { + return null; + } + + @Override + public List getArenasInWorld(World world) + { + return null; + } + + @Override + public List getAllPlayers() + { + return null; + } + + @Override + public List getAllPlayersInArena(String arenaName) + { + return null; + } + + @Override + public List getAllLivingPlayers() + { + return null; + } + + @Override + public List getLivingPlayersInArena(String arenaName) + { + return null; + } + + @Override + public Arena getArenaWithPlayer(Player p) + { + return null; + } + + @Override + public Arena getArenaWithPlayer(String playerName) + { + return null; + } + + @Override + public Arena getArenaWithSpectator(Player p) + { + return null; + } + + @Override + public Arena getArenaWithMonster(Entity e) + { + return null; + } + + @Override + public Arena getArenaWithPet(Entity e) + { + return null; + } + + @Override + public Arena getArenaWithName(String configName) { + return getArenaWithName(this.arenas, configName); + } + + @Override + public Arena getArenaWithName(Collection arenas, String configName) { + for (Arena a : arenas) { + if (a.configName().equals(configName)) + return a; + } + return null; + } + + @Override + public void initialize() + { + + } + + @Override + public void loadSettings() + { + + } + + @Override + public void loadClasses() + { + + } + + @Override + public void loadArenas() + { + + } + + @Override + public Arena createArenaNode(String configName, World world) { + Arena a = new MockArena(plugin, configName, world); + arenas.add(a); + return a; + } + + @Override + public void removeArenaNode(String configName) + { + + } + + @Override + public void update(boolean settings, boolean classes, boolean arenalist) + { + + } + + @Override + public void serializeSettings() + { + + } + + @Override + public void serializeArenas() + { + + } + + @Override + public void deserializeArenas() + { + + } + + @Override + public void updateSettings() + { + + } + + @Override + public void updateClasses() + { + + } + + @Override + public void updateArenas() + { + + } + + @Override + public void updateAll() + { + + } +} diff --git a/test/mock/mobarena/MockMobArena.java b/test/mock/mobarena/MockMobArena.java new file mode 100644 index 0000000..42b7623 --- /dev/null +++ b/test/mock/mobarena/MockMobArena.java @@ -0,0 +1,39 @@ +package mock.mobarena; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +import com.garbagemule.MobArena.ArenaMaster; +import com.garbagemule.MobArena.MobArenaPlugin; +import com.garbagemule.MobArena.Msg; + +public class MockMobArena implements MobArenaPlugin +{ + private ArenaMaster arenaMaster; + + public MockMobArena() { + this.arenaMaster = new MockArenaMaster(this); + } + + public MockMobArena(ArenaMaster arenaMaster) { + this.arenaMaster = arenaMaster; + } + + @Override + public ArenaMaster getArenaMaster() { + return arenaMaster; + } + + @Override + public void tell(CommandSender sender, String msg) { + if (sender == null || msg.equals("") || msg.equals(" ")) + return; + + sender.sendMessage(ChatColor.GREEN + "[MobArena] " + ChatColor.WHITE + msg); + } + + @Override + public void tell(CommandSender sender, Msg msg) { + tell(sender, msg.toString()); + } +} diff --git a/test/mock/util/MockLogger.java b/test/mock/util/MockLogger.java new file mode 100644 index 0000000..c2ce56c --- /dev/null +++ b/test/mock/util/MockLogger.java @@ -0,0 +1,59 @@ +package mock.util; + +import java.sql.Timestamp; +import java.util.*; +import java.util.Map.Entry; + +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; + +import com.garbagemule.MobArena.Msg; + +public class MockLogger +{ + private TreeMap entries; + + public MockLogger() { + this.entries = new TreeMap(); + } + + public void log(String msg) { + Timestamp time = new Timestamp(new Date().getTime()); + this.entries.put(time, msg); + } + + public int size() { + return entries.size(); + } + + public Entry getLastEntry() { + if (entries.isEmpty()) + return null; + + return entries.lastEntry(); + } + + public Entry findEntry(String msg) { + for (Entry entry : entries.entrySet()) { + if (entry.getValue().equals(msg)) + return entry; + } + return null; + } + + public Entry findEntryAfterTime(String msg, Timestamp time) { + for (Entry entry : entries.entrySet()) { + if (entry.getKey().compareTo(time) >= 0 && entry.getValue().equals(msg)) + return entry; + } + return null; + } + + public static String compileMsgToPlayer(Player p, String msg) { + return ChatColor.GREEN + "[MobArena] " + ChatColor.WHITE + msg; + } + + public static String compileMsgToPlayer(Player p, Msg msg) { + return compileMsgToPlayer(p, msg.toString()); + } +}