From 514c03dad0d0716e5069017dcab654ce63da24e8 Mon Sep 17 00:00:00 2001 From: Andreas Troelsen Date: Thu, 20 Aug 2020 23:46:03 +0200 Subject: [PATCH] Strip trailing whitespace; add missing newlines. This promiscuous commit goes around touching almost every file in the repository with the intention of removing trailing whitespace and adding newlines to files missing them. Trailing whitespace has been a pain for along time, especially in terms of contributing to the project without accidentally littering commits with whitespace stripping, so this commit is long overdue. As for the newlines, well, the script I found on StackOverflow to strip trailing whitespace also happened to add missing newlines, which is something I wanted to tackle anyway, but in a different commit. It's all good though. --- .../com/garbagemule/MobArena/ArenaClass.java | 34 +-- .../com/garbagemule/MobArena/ArenaImpl.java | 240 +++++++++--------- .../garbagemule/MobArena/ArenaListener.java | 70 ++--- .../garbagemule/MobArena/ArenaMasterImpl.java | 2 +- .../MobArena/ClassLimitManager.java | 24 +- .../garbagemule/MobArena/MASpawnThread.java | 10 +- .../com/garbagemule/MobArena/MAUtils.java | 94 +++---- .../com/garbagemule/MobArena/MobArena.java | 2 +- .../garbagemule/MobArena/MobArenaHandler.java | 68 ++--- .../garbagemule/MobArena/MonsterManager.java | 50 ++-- .../java/com/garbagemule/MobArena/Msg.java | 2 +- .../garbagemule/MobArena/RewardManager.java | 12 +- .../MobArena/ScoreboardManager.java | 12 +- .../MobArena/commands/CommandHandler.java | 36 +-- .../MobArena/commands/CommandInfo.java | 10 +- .../MobArena/commands/Commands.java | 16 +- .../commands/admin/DisableCommand.java | 8 +- .../commands/admin/EnableCommand.java | 8 +- .../MobArena/commands/admin/ForceCommand.java | 18 +- .../MobArena/commands/admin/KickCommand.java | 6 +- .../commands/admin/RestoreCommand.java | 4 +- .../commands/setup/AddArenaCommand.java | 4 +- .../commands/setup/AutoGenerateCommand.java | 8 +- .../commands/setup/ListClassesCommand.java | 2 +- .../commands/setup/RemoveArenaCommand.java | 4 +- .../setup/RemoveLeaderboardCommand.java | 2 +- .../commands/user/ArenaListCommand.java | 6 +- .../MobArena/commands/user/JoinCommand.java | 4 +- .../MobArena/commands/user/LeaveCommand.java | 6 +- .../commands/user/NotReadyCommand.java | 8 +- .../commands/user/PickClassCommand.java | 2 +- .../commands/user/PlayerListCommand.java | 12 +- .../MobArena/commands/user/SpecCommand.java | 4 +- .../MobArena/events/ArenaEndEvent.java | 10 +- .../events/ArenaPlayerDeathEvent.java | 12 +- .../MobArena/events/ArenaPlayerJoinEvent.java | 12 +- .../events/ArenaPlayerLeaveEvent.java | 12 +- .../events/ArenaPlayerReadyEvent.java | 10 +- .../MobArena/events/ArenaStartEvent.java | 10 +- .../MobArena/events/NewWaveEvent.java | 12 +- .../garbagemule/MobArena/framework/Arena.java | 172 ++++++------- .../MobArena/framework/ArenaMaster.java | 92 +++---- .../AbstractLeaderboardColumn.java | 18 +- .../MobArena/leaderboards/Leaderboard.java | 70 ++--- .../leaderboards/LeaderboardColumn.java | 8 +- .../MobArena/leaderboards/Stats.java | 12 +- .../MobArena/listeners/MAGlobalListener.java | 58 ++--- .../MobArena/region/ArenaRegion.java | 190 +++++++------- .../MobArena/repairable/Repairable.java | 4 +- .../repairable/RepairableAttachable.java | 10 +- .../MobArena/repairable/RepairableBed.java | 8 +- .../MobArena/repairable/RepairableBlock.java | 22 +- .../repairable/RepairableComparator.java | 8 +- .../repairable/RepairableContainer.java | 10 +- .../MobArena/repairable/RepairableDoor.java | 10 +- .../MobArena/repairable/RepairableSign.java | 6 +- .../com/garbagemule/MobArena/time/Time.java | 8 +- .../MobArena/util/EntityPosition.java | 6 +- .../com/garbagemule/MobArena/util/Enums.java | 2 +- .../garbagemule/MobArena/util/ItemParser.java | 32 +-- .../garbagemule/MobArena/util/MutableInt.java | 16 +- .../MobArena/util/PotionEffectParser.java | 42 +-- .../garbagemule/MobArena/util/TextUtils.java | 14 +- .../garbagemule/MobArena/util/TimeUtils.java | 22 +- .../util/inventory/InventoryManager.java | 20 +- .../MobArena/waves/AbstractWave.java | 22 +- .../MobArena/waves/BossAbilityThread.java | 14 +- .../garbagemule/MobArena/waves/MABoss.java | 14 +- .../MobArena/waves/MACreature.java | 10 +- .../MobArena/waves/SheepBouncer.java | 20 +- .../com/garbagemule/MobArena/waves/Wave.java | 32 +-- .../MobArena/waves/WaveManager.java | 40 +-- .../MobArena/waves/WaveParser.java | 114 ++++----- .../garbagemule/MobArena/waves/WaveUtils.java | 20 +- .../MobArena/waves/ability/AbilityInfo.java | 2 +- .../waves/ability/AbilityManager.java | 78 +++--- .../MobArena/waves/ability/AbilityUtils.java | 16 +- .../waves/ability/core/ChainLightning.java | 18 +- .../waves/ability/core/DisorientDistant.java | 2 +- .../waves/ability/core/DisorientNearby.java | 4 +- .../waves/ability/core/DisorientTarget.java | 4 +- .../waves/ability/core/FetchDistant.java | 4 +- .../waves/ability/core/FetchNearby.java | 4 +- .../waves/ability/core/FetchTarget.java | 4 +- .../MobArena/waves/ability/core/FireAura.java | 4 +- .../MobArena/waves/ability/core/Flood.java | 2 +- .../waves/ability/core/LightningAura.java | 2 +- .../waves/ability/core/LivingBomb.java | 14 +- .../waves/ability/core/ObsidianBomb.java | 6 +- .../waves/ability/core/PullDistant.java | 8 +- .../waves/ability/core/PullNearby.java | 8 +- .../waves/ability/core/PullTarget.java | 8 +- .../waves/ability/core/RootTarget.java | 4 +- .../waves/ability/core/ShufflePositions.java | 6 +- .../waves/ability/core/ThrowDistant.java | 4 +- .../waves/ability/core/ThrowNearby.java | 4 +- .../waves/ability/core/ThrowTarget.java | 4 +- .../MobArena/waves/enums/BossHealth.java | 8 +- .../MobArena/waves/enums/SwarmAmount.java | 6 +- .../MobArena/waves/enums/WaveBranch.java | 6 +- .../MobArena/waves/enums/WaveGrowth.java | 10 +- .../MobArena/waves/enums/WaveType.java | 14 +- .../MobArena/waves/types/BossWave.java | 46 ++-- .../MobArena/waves/types/DefaultWave.java | 20 +- .../MobArena/waves/types/SpecialWave.java | 14 +- .../MobArena/waves/types/SupplyWave.java | 22 +- .../MobArena/waves/types/SwarmWave.java | 12 +- .../MobArena/waves/types/UpgradeWave.java | 4 +- src/main/resources/plugin.yml | 4 +- src/main/resources/res/config.yml | 2 +- src/main/resources/res/rewards.yml | 2 +- src/main/resources/res/settings.yml | 2 +- src/main/resources/res/waves.yml | 2 +- 113 files changed, 1198 insertions(+), 1198 deletions(-) diff --git a/src/main/java/com/garbagemule/MobArena/ArenaClass.java b/src/main/java/com/garbagemule/MobArena/ArenaClass.java index 0ce6f39..45e1c48 100644 --- a/src/main/java/com/garbagemule/MobArena/ArenaClass.java +++ b/src/main/java/com/garbagemule/MobArena/ArenaClass.java @@ -33,7 +33,7 @@ public class ArenaClass public ArenaClass(String name, Thing price, boolean unbreakableWeapons, boolean unbreakableArmor) { this.configName = name; this.lowercaseName = name.toLowerCase().replace(" ", ""); - + this.items = new ArrayList<>(); this.armor = new ArrayList<>(4); this.effects = new ArrayList<>(); @@ -45,7 +45,7 @@ public class ArenaClass this.price = price; } - + /** * Get the name of the arena class as it appears in the config-file. * @return the class name as it appears in the config-file @@ -53,7 +53,7 @@ public class ArenaClass public String getConfigName() { return configName; } - + /** * Get the lowercase class name. * @return the lowercase class name @@ -61,7 +61,7 @@ public class ArenaClass public String getLowercaseName() { return lowercaseName; } - + /** * Set the helmet slot for the class. * @param helmet a Thing @@ -69,7 +69,7 @@ public class ArenaClass public void setHelmet(Thing helmet) { this.helmet = helmet; } - + /** * Set the chestplate slot for the class. * @param chestplate a Thing @@ -77,7 +77,7 @@ public class ArenaClass public void setChestplate(Thing chestplate) { this.chestplate = chestplate; } - + /** * Set the leggings slot for the class. * @param leggings a Thing @@ -85,7 +85,7 @@ public class ArenaClass public void setLeggings(Thing leggings) { this.leggings = leggings; } - + /** * Set the boots slot for the class. * @param boots a Thing @@ -93,7 +93,7 @@ public class ArenaClass public void setBoots(Thing boots) { this.boots = boots; } - + /** * Set the off-hand slot for the class. * @param offhand a Thing @@ -111,7 +111,7 @@ public class ArenaClass items.add(item); } } - + /** * Replace the current items list with a new list of all the items in the given list. * This method uses the addItem() method for each item to ensure consistency. @@ -121,7 +121,7 @@ public class ArenaClass this.items = new ArrayList<>(items.size()); items.forEach(this::addItem); } - + /** * Replace the current armor list with the given list. * @param armor a list of Things @@ -133,7 +133,7 @@ public class ArenaClass public void setEffects(List effects) { this.effects = effects; } - + public boolean hasPermission(Player p) { String perm = "mobarena.classes." + configName; return !p.isPermissionSet(perm) || p.hasPermission(perm); @@ -144,7 +144,7 @@ public class ArenaClass * The normal items will be added to the inventory normally, while the * armor items will be verified as armor items and placed in their * appropriate slots. If any specific armor slots are specified, they - * will overwrite any items in the armor list. + * will overwrite any items in the armor list. * @param p a player */ public void grantItems(Player p) { @@ -152,7 +152,7 @@ public class ArenaClass // Fork over the items. items.forEach(item -> item.giveTo(p)); - + // Check for legacy armor-node items armor.forEach(thing -> thing.giveTo(p)); @@ -167,7 +167,7 @@ public class ArenaClass public void grantPotionEffects(Player p) { effects.forEach(thing -> thing.giveTo(p)); } - + /** * Add a permission value to the class. */ @@ -212,17 +212,17 @@ public class ArenaClass public Thing getPrice() { return price; } - + @Override public boolean equals(Object o) { if (o == null) return false; if (this == o) return true; if (!this.getClass().equals(o.getClass())) return false; - + ArenaClass other = (ArenaClass) o; return other.lowercaseName.equals(this.lowercaseName); } - + @Override public int hashCode() { return lowercaseName.hashCode(); diff --git a/src/main/java/com/garbagemule/MobArena/ArenaImpl.java b/src/main/java/com/garbagemule/MobArena/ArenaImpl.java index eb47822..a9090c6 100644 --- a/src/main/java/com/garbagemule/MobArena/ArenaImpl.java +++ b/src/main/java/com/garbagemule/MobArena/ArenaImpl.java @@ -75,57 +75,57 @@ public class ArenaImpl implements Arena private String name; private World world; private Messenger messenger; - + // Settings section of the config-file for this arena. private ConfigurationSection settings; - + // Run-time settings and critical config settings private boolean enabled, protect, running, edit; - + // World stuff private boolean allowMonsters, allowAnimals; //private Difficulty spawnMonsters; - + // Warps, points and locations private ArenaRegion region; private Leaderboard leaderboard; - + // Player stuff private InventoryManager inventoryManager; private RewardManager rewardManager; private ClassLimitManager limitManager; private Map arenaPlayerMap; - + private Set arenaPlayers, lobbyPlayers, readyPlayers, specPlayers, deadPlayers; private Set movingPlayers; private Set leavingPlayers; private Set randoms; - + // Classes stuff private ArenaClass defaultClass; private Map classes; - + // Blocks and pets private PriorityBlockingQueue repairQueue; private Set blocks; private LinkedList repairables, containables; - + // Monster stuff private MonsterManager monsterManager; - + // Wave stuff private WaveManager waveManager; private MASpawnThread spawnThread; private SheepBouncer sheepBouncer; private Map> everyWaveMap, afterWaveMap; - + // Misc private ArenaListener eventListener; private List entryFee; private AutoStartTimer autoStartTimer; private StartDelayTimer startDelayTimer; private boolean isolatedChat; - + // Warp offsets private double arenaWarpOffset; @@ -134,7 +134,7 @@ public class ArenaImpl implements Arena // Last player standing private Player lastStanding; - + // Actions private Map histories; private StepFactory playerJoinArena; @@ -148,13 +148,13 @@ public class ArenaImpl implements Arena public ArenaImpl(MobArena plugin, ConfigurationSection section, String name, World world) { if (world == null) throw new NullPointerException("[MobArena] ERROR! World for arena '" + name + "' does not exist!"); - + this.name = name; this.world = world; this.plugin = plugin; this.settings = makeSection(section, "settings"); this.region = new ArenaRegion(section, this); - + this.enabled = settings.getBoolean("enabled", false); this.protect = settings.getBoolean("protect", true); this.running = false; @@ -185,21 +185,21 @@ public class ArenaImpl implements Arena if (defaultClassName != null) { this.defaultClass = classes.get(defaultClassName); } - + // Blocks and pets this.repairQueue = new PriorityBlockingQueue<>(100, new RepairableComparator()); this.blocks = new HashSet<>(); this.repairables = new LinkedList<>(); this.containables = new LinkedList<>(); - + // Monster stuff this.monsterManager = new MonsterManager(); - + // Wave stuff this.waveManager = new WaveManager(this, section.getConfigurationSection("waves")); this.everyWaveMap = MAUtils.getArenaRewardMap(plugin, section, name, "every"); this.afterWaveMap = MAUtils.getArenaRewardMap(plugin, section, name, "after"); - + // Misc this.eventListener = new ArenaListener(this, plugin); this.allowMonsters = world.getAllowMonsters(); @@ -222,7 +222,7 @@ public class ArenaImpl implements Arena this.startDelayTimer = new StartDelayTimer(this, autoStartTimer); this.isolatedChat = settings.getBoolean("isolated-chat", false); - + this.arenaWarpOffset = settings.getDouble("arena-warp-offset", 0.0); // Scoreboards @@ -239,15 +239,15 @@ public class ArenaImpl implements Arena this.spawnsPets = plugin.getArenaMaster().getSpawnsPets(); } - - - + + + /*///////////////////////////////////////////////////////////////////////// // // NEW METHODS IN REFACTORING // /////////////////////////////////////////////////////////////////////////*/ - + @Override public ConfigurationSection getSettings() { return settings; @@ -312,7 +312,7 @@ public class ArenaImpl implements Arena public int getMaxPlayers() { return settings.getInt("max-players"); } - + private int getJoinDistance() { return settings.getInt("max-join-distance"); } @@ -421,25 +421,25 @@ public class ArenaImpl implements Arena public MonsterManager getMonsterManager() { return monsterManager; } - + @Override public ClassLimitManager getClassLimitManager() { return limitManager; } - + @Override public ScoreboardManager getScoreboard() { return scoreboard; } - - - - - - - - - + + + + + + + + + @Override public Messenger getMessenger() { @@ -492,26 +492,26 @@ public class ArenaImpl implements Arena // Store all chest contents. storeContainerContents(); - + // Populate arenaPlayers and clear the lobby. arenaPlayers.addAll(lobbyPlayers); lobbyPlayers.clear(); readyPlayers.clear(); - + // Assign random classes. for (Player p : randoms) { assignRandomClass(p); } randoms.clear(); - + // Then check if there are still players left. if (arenaPlayers.isEmpty()) { return false; } - + // Initialize scoreboards scoreboard.initialize(); - + // Teleport players, give full health, initialize map for (Player p : arenaPlayers) { // Remove player from spec list to avoid invincibility issues @@ -520,7 +520,7 @@ public class ArenaImpl implements Arena System.out.println("[MobArena] Player " + p.getName() + " joined the arena from the spec area!"); System.out.println("[MobArena] Invincibility glitch attempt stopped!"); } - + movingPlayers.add(p); if (arenaWarpOffset > 0.01) { Location warp = region.getArenaWarp(); @@ -541,35 +541,35 @@ public class ArenaImpl implements Arena if (price != null) { price.takeFrom(p); } - + scoreboard.addPlayer(p); } - + // Start spawning monsters (must happen before 'running = true;') startSpawner(); startBouncingSheep(); - + // Set the boolean. running = true; - + // Spawn pets (must happen after 'running = true;') spawnsPets.spawn(this); - + // Spawn mounts spawnMounts(); - + // Clear the classes in use map, as they're no longer needed limitManager.clearClassesInUse(); - + // Reset rewards rewardManager.reset(); - + // Initialize leaderboards and start displaying info. leaderboard.initialize(); leaderboard.startTracking(); - + announce(Msg.ARENA_START); - + return true; } @@ -589,16 +589,16 @@ public class ArenaImpl implements Arena // Reset last standing lastStanding = null; - + // Set the running boolean and disable arena if not disabled. boolean en = enabled; enabled = false; running = false; - + // Stop tracking leaderboards leaderboard.stopTracking(); leaderboard.update(); - + // Stop spawning. stopSpawner(); stopBouncingSheep(); @@ -612,18 +612,18 @@ public class ArenaImpl implements Arena announce(Msg.ARENA_END); } cleanup(); - + // Restore region. if (settings.getBoolean("soft-restore", false)) { restoreRegion(); } - + // Restore chests restoreContainerContents(); - + // Restore enabled status. enabled = en; - + return true; } @@ -632,12 +632,12 @@ public class ArenaImpl implements Arena { if (running) return; - + // Set operations. Set tmp = new HashSet<>(); tmp.addAll(lobbyPlayers); tmp.removeAll(readyPlayers); - + // Force leave. for (Player p : tmp) { playerLeave(p); @@ -655,7 +655,7 @@ public class ArenaImpl implements Arena if (players.isEmpty()) { return; } - + players.forEach(this::playerLeave); cleanup(); } @@ -713,17 +713,17 @@ public class ArenaImpl implements Arena lobbyPlayers.add(p); plugin.getArenaMaster().addPlayer(p, this); - + arenaPlayerMap.put(p, new ArenaPlayer(p, this, plugin)); // Start the start-delay-timer if applicable if (!autoStartTimer.isRunning()) { startDelayTimer.start(); } - + // Notify player of joining messenger.tell(p, Msg.JOIN_PLAYER_JOINED); - + // Notify player of time left if (startDelayTimer.isRunning()) { messenger.tell(p, Msg.ARENA_START_DELAY, "" + startDelayTimer.getRemaining() / 20l); @@ -738,7 +738,7 @@ public class ArenaImpl implements Arena messenger.tell(p, Msg.LOBBY_CLASS_PICKED, defaultClass.getConfigName()); } } - + movingPlayers.remove(p); return true; } @@ -753,14 +753,14 @@ public class ArenaImpl implements Arena } readyPlayers.add(p); - + int minPlayers = getMinPlayers(); if (minPlayers > 0 && lobbyPlayers.size() < minPlayers) { messenger.tell(p, Msg.LOBBY_NOT_ENOUGH_PLAYERS, "" + minPlayers); return; } - + startArena(); } @@ -785,10 +785,10 @@ public class ArenaImpl implements Arena unmount(p); clearInv(p); } - + removePermissionAttachments(p); removePotionEffects(p); - + boolean refund = inLobby(p); if (inLobby(p)) { @@ -802,13 +802,13 @@ public class ArenaImpl implements Arena startDelayTimer.stop(); } } - + discardPlayer(p); if (refund) { refund(p); } - + endArena(); leavingPlayers.remove(p); @@ -841,7 +841,7 @@ public class ArenaImpl implements Arena unmount(p); clearInv(p); } - + deadPlayers.add(p); endArena(); } @@ -874,7 +874,7 @@ public class ArenaImpl implements Arena public void revivePlayer(Player p) { removePermissionAttachments(p); removePotionEffects(p); - + specPlayers.add(p); if (settings.getBoolean("spectate-on-death", true)) { @@ -897,7 +897,7 @@ public class ArenaImpl implements Arena } movingPlayers.add(p); - + rollback(p); Step step = playerSpecArena.create(p); @@ -911,7 +911,7 @@ public class ArenaImpl implements Arena specPlayers.add(p); plugin.getArenaMaster().addPlayer(p, this); - + messenger.tell(p, Msg.SPEC_PLAYER_SPECTATE); movingPlayers.remove(p); } @@ -1000,7 +1000,7 @@ public class ArenaImpl implements Arena default: return null; } } - + private void startSpawner() { if (spawnThread != null) { spawnThread.stop(); @@ -1012,7 +1012,7 @@ public class ArenaImpl implements Arena spawnThread = new MASpawnThread(plugin, this); spawnThread.start(); } - + /** * Schedule a Runnable to be executed after the given delay in * server ticks. The method is used by the MASpawnThread to @@ -1023,7 +1023,7 @@ public class ArenaImpl implements Arena public void scheduleTask(Runnable r, int delay) { Bukkit.getScheduler().runTaskLater(plugin, r, delay); } - + private void stopSpawner() { if (spawnThread == null) { plugin.getLogger().warning("Can't stop non-existent spawner in arena " + configName() + ". This should never happen."); @@ -1035,7 +1035,7 @@ public class ArenaImpl implements Arena world.setSpawnFlags(allowMonsters, allowAnimals); } - + private void startBouncingSheep() { if (sheepBouncer != null) { sheepBouncer.stop(); @@ -1082,7 +1082,7 @@ public class ArenaImpl implements Arena plugin.getArenaMaster().removePlayer(p); clearPlayer(p); } - + private void clearPlayer(Player p) { // Remove from boss health bar @@ -1092,20 +1092,20 @@ public class ArenaImpl implements Arena boss.getHealthBar().removePlayer(p); } }); - + // Remove pets. monsterManager.removePets(p); - + // readyPlayers before lobbyPlayers because of startArena sanity-checks readyPlayers.remove(p); specPlayers.remove(p); arenaPlayers.remove(p); lobbyPlayers.remove(p); arenaPlayerMap.remove(p); - + scoreboard.removePlayer(p); } - + @Override public void repairBlocks() { @@ -1118,9 +1118,9 @@ public class ArenaImpl implements Arena { repairQueue.add(r); } - - - + + + /*//////////////////////////////////////////////////////////////////// // // Items & Cleanup @@ -1131,11 +1131,11 @@ public class ArenaImpl implements Arena public void assignClass(Player p, String className) { ArenaPlayer arenaPlayer = arenaPlayerMap.get(p); ArenaClass arenaClass = classes.get(className); - + if (arenaPlayer == null || arenaClass == null) { return; } - + InventoryManager.clearInventory(p); removePotionEffects(p); arenaPlayer.setArenaClass(arenaClass); @@ -1158,21 +1158,21 @@ public class ArenaImpl implements Arena autoReady(p); } - + @Override public void assignClassGiveInv(Player p, String className, ItemStack[] source) { ArenaPlayer arenaPlayer = arenaPlayerMap.get(p); ArenaClass arenaClass = classes.get(className); - + if (arenaPlayer == null || arenaClass == null) { return; } - + InventoryManager.clearInventory(p); removePermissionAttachments(p); removePotionEffects(p); arenaPlayer.setArenaClass(arenaClass); - + PlayerInventory inv = p.getInventory(); // Clone the source array to make sure we don't modify its contents @@ -1189,7 +1189,7 @@ public class ArenaImpl implements Arena ItemStack leggings = null; ItemStack boots = null; ItemStack offhand = null; - + // Check the very last slot to see if it'll work as a helmet int last = contents.length-1; if (contents[last] != null) { @@ -1221,7 +1221,7 @@ public class ArenaImpl implements Arena } contents[i] = null; } - + // Equip the fifth last slot as the off-hand offhand = contents[contents.length - 5]; if (offhand != null) { @@ -1276,7 +1276,7 @@ public class ArenaImpl implements Arena } } } - + @Override public void addRandomPlayer(Player p) { randoms.add(p); @@ -1294,7 +1294,7 @@ public class ArenaImpl implements Arena playerLeave(p); return; } - + int index = MobArena.random.nextInt(classes.size()); String className = classes.get(index).getConfigName(); @@ -1322,7 +1322,7 @@ public class ArenaImpl implements Arena .map(PermissionAttachmentInfo::getAttachment) .forEach(PermissionAttachment::remove); } - + private void removePotionEffects(Player p) { p.getActivePotionEffects().stream() .map(PotionEffect::getType) @@ -1335,21 +1335,21 @@ public class ArenaImpl implements Arena removeEntities(); clearPlayers(); } - + private void removeMonsters() { monsterManager.clear(); } - + private void removeBlocks() { for (Block b : blocks) { b.setType(Material.AIR); } blocks.clear(); } - + private void removeEntities() { List chunks = region.getChunks(); - + for (Chunk c : chunks) { for (Entity e : c.getEntities()) { if (e == null) { @@ -1368,16 +1368,16 @@ public class ArenaImpl implements Arena } } } - + private void clearPlayers() { arenaPlayers.clear(); arenaPlayerMap.clear(); lobbyPlayers.clear(); readyPlayers.clear(); } - - - + + + /*//////////////////////////////////////////////////////////////////// // // Initialization & Checks @@ -1388,13 +1388,13 @@ public class ArenaImpl implements Arena public void restoreRegion() { Collections.sort(repairables, new RepairableComparator()); - + for (Repairable r : repairables) r.repair(); } - - - + + + /*//////////////////////////////////////////////////////////////////// // // Getters & Misc @@ -1458,7 +1458,7 @@ public class ArenaImpl implements Arena result.addAll(arenaPlayers); result.addAll(lobbyPlayers); result.addAll(specPlayers); - + return result; } @@ -1477,10 +1477,10 @@ public class ArenaImpl implements Arena public List getArenaPlayerStatistics(Comparator comparator) { List list = new ArrayList(); - + for (ArenaPlayer ap : arenaPlayerMap.values()) list.add(ap.getStats()); - + Collections.sort(list, comparator); return list; }*/ @@ -1519,7 +1519,7 @@ public class ArenaImpl implements Arena } return true; } - + @Override public boolean refund(Player p) { entryFee.forEach(fee -> fee.giveTo(p)); @@ -1549,7 +1549,7 @@ public class ArenaImpl implements Arena else if (!canAfford(p)) messenger.tell(p, Msg.JOIN_FEE_REQUIRED, MAUtils.listToString(entryFee, plugin)); else return true; - + return false; } @@ -1568,7 +1568,7 @@ public class ArenaImpl implements Arena else if (getJoinDistance() > 0 && !region.contains(p.getLocation(), getJoinDistance())) messenger.tell(p, Msg.JOIN_TOO_FAR); else return true; - + return false; } @@ -1581,7 +1581,7 @@ public class ArenaImpl implements Arena public Player getLastPlayerStanding() { return lastStanding; } - + /** * The "perfect equals method" cf. "Object-Oriented Design and Patterns" * by Cay S. Horstmann. @@ -1591,11 +1591,11 @@ public class ArenaImpl implements Arena if (this == other) return true; if (other == null) return false; if (getClass() != other.getClass()) return false; - + // Arenas must have different names. if (other instanceof ArenaImpl && ((ArenaImpl)other).name.equals(name)) return true; - + return false; } diff --git a/src/main/java/com/garbagemule/MobArena/ArenaListener.java b/src/main/java/com/garbagemule/MobArena/ArenaListener.java index 285a313..5bd08bf 100644 --- a/src/main/java/com/garbagemule/MobArena/ArenaListener.java +++ b/src/main/java/com/garbagemule/MobArena/ArenaListener.java @@ -147,7 +147,7 @@ public class ArenaListener this.canShare = s.getBoolean("share-items-in-arena", true); this.autoIgniteTNT = s.getBoolean("auto-ignite-tnt", false); this.useClassChests = s.getBoolean("use-class-chests", false); - + this.classLimits = arena.getClassLimitManager(); this.banned = new HashSet<>(); @@ -157,13 +157,13 @@ public class ArenaListener EntityType.GUARDIAN ); } - + void pvpActivate() { if (arena.isRunning() && !arena.getPlayersInArena().isEmpty()) { pvpEnabled = pvpOn; } } - + void pvpDeactivate() { if (pvpOn) pvpEnabled = false; } @@ -179,17 +179,17 @@ public class ArenaListener // If the arena isn't protected, care if (!protect) return; - + if (!arena.getRegion().contains(event.getBlock().getLocation())) return; - + if (!arena.inArena(event.getPlayer())) { if (arena.inEditMode()) return; else event.setCancelled(true); } - + if (onBlockDestroy(event)) return; @@ -223,18 +223,18 @@ public class ArenaListener private boolean onBlockDestroy(BlockEvent event) { if (arena.inEditMode()) return true; - + if (!arena.isRunning()) return false; Block b = event.getBlock(); if (arena.removeBlock(b) || b.getType() == Material.TNT) return true; - + if (softRestore) { BlockState state = b.getState(); Repairable r = null; - + if (state instanceof InventoryHolder) r = new RepairableContainer(state); else if (state instanceof Sign) @@ -245,7 +245,7 @@ public class ArenaListener r = new RepairableBlock(state); arena.addRepairable(r); - + if (!softRestoreDrops) b.setType(Material.AIR); return true; @@ -302,11 +302,11 @@ public class ArenaListener arena.addBlock(b.getRelative(0, 1, 0)); } } - + private void setPlanter(Metadatable tnt, Player planter) { tnt.setMetadata("mobarena-planter", new FixedMetadataValue(plugin, planter)); } - + private Player getPlanter(Metadatable tnt) { List values = tnt.getMetadata("mobarena-planter"); for (MetadataValue value : values) { @@ -511,9 +511,9 @@ public class ArenaListener } /****************************************************** - * + * * DEATH LISTENERS - * + * ******************************************************/ public void onEntityDeath(EntityDeathEvent event) { @@ -571,11 +571,11 @@ public class ArenaListener arena.playerRespawn(p); return true; } - + private void onMountDeath(EntityDeathEvent event) { // Shouldn't ever happen } - + private void onMonsterDeath(EntityDeathEvent event) { EntityDamageEvent e1 = event.getEntity().getLastDamageCause(); EntityDamageByEntityEvent e2 = (e1 instanceof EntityDamageByEntityEvent) ? (EntityDamageByEntityEvent) e1 : null; @@ -652,9 +652,9 @@ public class ArenaListener } /****************************************************** - * + * * DAMAGE LISTENERS - * + * ******************************************************/ public void onEntityDamage(EntityDamageEvent event) { @@ -771,7 +771,7 @@ public class ArenaListener double progress = boss.getHealth() / boss.getMaxHealth(); boss.getHealthBar().setProgress(progress); } - + private void onMonsterDamage(EntityDamageEvent event, Entity monster, Entity damager) { if (damager instanceof Player) { Player p = (Player) damager; @@ -796,7 +796,7 @@ public class ArenaListener event.setCancelled(true); } } - + private void onGolemDamage(EntityDamageEvent event, Entity golem, Entity damager) { if (damager instanceof Player) { Player p = (Player) damager; @@ -804,7 +804,7 @@ public class ArenaListener event.setCancelled(true); return; } - + if (!pvpEnabled) { event.setCancelled(true); } @@ -898,7 +898,7 @@ public class ArenaListener private boolean isArenaPet(Entity entity) { return arena.hasPet(entity); } - + public void onEntityTeleport(EntityTeleportEvent event) { if (monsters.hasPet(event.getEntity()) && region.contains(event.getTo())) { return; @@ -907,7 +907,7 @@ public class ArenaListener event.setCancelled(true); } } - + public void onPotionSplash(PotionSplashEvent event) { ThrownPotion potion = event.getPotion(); if (!region.contains(potion.getLocation())) { @@ -1014,18 +1014,18 @@ public class ArenaListener event.setCancelled(true); } } - + // If the player is in the lobby, just cancel else if (arena.inLobby(p)) { arena.getMessenger().tell(p, Msg.LOBBY_DROP_ITEM); event.setCancelled(true); } - + // Same if it's a spectator, but... else if (arena.inSpec(p)) { arena.getMessenger().tell(p, Msg.LOBBY_DROP_ITEM); event.setCancelled(true); - + // If the spectator isn't in the region, force them to leave if (!region.contains(p.getLocation())) { arena.getMessenger().tell(p, Msg.MISC_MA_LEAVE_REMINDER); @@ -1122,14 +1122,14 @@ public class ArenaListener arena.getMessenger().tell(p, Msg.LOBBY_CLASS_PERMISSION); return; } - + ArenaClass oldAC = arena.getArenaPlayer(p).getArenaClass(); - + // Same class, do nothing. if (newAC.equals(oldAC)) { return; } - + // If the new class is full, inform the player. if (!classLimits.canPlayerJoinClass(newAC)) { arena.getMessenger().tell(p, Msg.LOBBY_CLASS_FULL); @@ -1144,7 +1144,7 @@ public class ArenaListener return; } } - + // Otherwise, leave the old class, and pick the new! classLimits.playerLeftClass(oldAC, p); classLimits.playerPickedClass(newAC, p); @@ -1152,14 +1152,14 @@ public class ArenaListener // Delay the inventory stuff to ensure that right-clicking works. delayAssignClass(p, className, price, sign); } - + /*private boolean cansPlayerJoinClass(ArenaClass ac, Player p) { // If they can not join the class, deny them if (!classLimits.canPlayerJoinClass(ac)) { Messenger.tell(p, Msg.LOBBY_CLASS_FULL); return false; } - + // Increment the "in use" in the Class Limit Manager classLimits.playerPickedClass(ac); return true; @@ -1222,7 +1222,7 @@ public class ArenaListener } }, ticks); } - + public TeleportResponse onPlayerTeleport(PlayerTeleportEvent event) { if (!arena.isEnabled() || !region.isSetup() || arena.inEditMode() || allowTeleport) { return TeleportResponse.IDGAF; @@ -1310,10 +1310,10 @@ public class ArenaListener public void onPlayerPreLogin(PlayerLoginEvent event) { Player p = event.getPlayer(); if (p == null || !p.isOnline()) return; - + Arena arena = plugin.getArenaMaster().getArenaWithPlayer(p); if (arena == null) return; - + arena.playerLeave(p); } diff --git a/src/main/java/com/garbagemule/MobArena/ArenaMasterImpl.java b/src/main/java/com/garbagemule/MobArena/ArenaMasterImpl.java index 61f3aeb..5a81712 100644 --- a/src/main/java/com/garbagemule/MobArena/ArenaMasterImpl.java +++ b/src/main/java/com/garbagemule/MobArena/ArenaMasterImpl.java @@ -137,7 +137,7 @@ public class ArenaMasterImpl implements ArenaMaster public List getEnabledArenas(List arenas) { List result = new ArrayList<>(arenas.size()); for (Arena arena : arenas) - if (arena.isEnabled()) + if (arena.isEnabled()) result.add(arena); return result; } diff --git a/src/main/java/com/garbagemule/MobArena/ClassLimitManager.java b/src/main/java/com/garbagemule/MobArena/ClassLimitManager.java index a95e40f..c053995 100644 --- a/src/main/java/com/garbagemule/MobArena/ClassLimitManager.java +++ b/src/main/java/com/garbagemule/MobArena/ClassLimitManager.java @@ -16,7 +16,7 @@ public class ClassLimitManager private HashMap> classesInUse; private ConfigurationSection limits; private Map classes; - + public ClassLimitManager(Arena arena, Map classes, ConfigurationSection limits) { this.limits = limits; this.classes = classes; @@ -26,7 +26,7 @@ public class ClassLimitManager loadLimitMap(arena.getPlugin()); initInUseMap(); } - + private void loadLimitMap(Plugin plugin) { // If the config-section is empty, create and populate it. if (limits.getKeys(false).isEmpty()) { @@ -35,20 +35,20 @@ public class ClassLimitManager } plugin.saveConfig(); } - + // Populate the limits map using the values in the config-file. for (ArenaClass ac : classes.values()) { classLimits.put(ac, new MutableInt(limits.getInt(ac.getConfigName(), -1))); } } - + private void initInUseMap() { // Initialize the in-use map with zeros. for (ArenaClass ac : classes.values()) { classesInUse.put(ac, new HashSet<>()); } } - + /** * This is the class a player is changing to * @param ac the new ArenaClass @@ -56,7 +56,7 @@ public class ClassLimitManager public void playerPickedClass(ArenaClass ac, Player p) { classesInUse.get(ac).add(p.getName()); } - + /** * This is the class a player left * @param ac the current/old ArenaClass @@ -66,7 +66,7 @@ public class ClassLimitManager classesInUse.get(ac).remove(p.getName()); } } - + /** * Checks to see if a player can pick a specific class * @param ac the ArenaClass to check @@ -78,13 +78,13 @@ public class ClassLimitManager classLimits.put(ac, new MutableInt(-1)); classesInUse.put(ac, new HashSet<>()); } - + if (classLimits.get(ac).value() <= -1) return true; - + return classesInUse.get(ac).size() < classLimits.get(ac).value(); } - + /** * returns a set of Player Names who have picked an ArenaClass * @param ac the ArenaClass in question @@ -93,7 +93,7 @@ public class ClassLimitManager public HashSet getPlayersWithClass(ArenaClass ac) { return classesInUse.get(ac); } - + /** * Clear the classes in use map and reinitialize it for the next match */ @@ -101,4 +101,4 @@ public class ClassLimitManager classesInUse.clear(); initInUseMap(); } -} \ No newline at end of file +} diff --git a/src/main/java/com/garbagemule/MobArena/MASpawnThread.java b/src/main/java/com/garbagemule/MobArena/MASpawnThread.java index ea779a8..7ed300f 100644 --- a/src/main/java/com/garbagemule/MobArena/MASpawnThread.java +++ b/src/main/java/com/garbagemule/MobArena/MASpawnThread.java @@ -184,9 +184,9 @@ public class MASpawnThread implements Runnable Wave w = waveManager.next(); w.announce(arena, wave); - + arena.getScoreboard().updateWave(wave); - + // Set the players' level to the wave number if (wavesAsLevel) { for (Player p : arena.getPlayersInArena()) { @@ -311,7 +311,7 @@ public class MASpawnThread implements Runnable if (waveClear && !monsterManager.getMonsters().isEmpty()) { return false; } - + // Check for pre boss clear if (preBossClear && waveManager.getNext().getType() == WaveType.BOSS && !monsterManager.getMonsters().isEmpty()) { return false; @@ -345,7 +345,7 @@ public class MASpawnThread implements Runnable if (region.contains(p.getLocation())) { continue; } - + arena.getMessenger().tell(p, "Leaving so soon?"); p.getInventory().clear(); arena.playerLeave(p); @@ -402,4 +402,4 @@ public class MASpawnThread implements Runnable } } } -} \ No newline at end of file +} diff --git a/src/main/java/com/garbagemule/MobArena/MAUtils.java b/src/main/java/com/garbagemule/MobArena/MAUtils.java index 1a9c1a0..56a32ab 100644 --- a/src/main/java/com/garbagemule/MobArena/MAUtils.java +++ b/src/main/java/com/garbagemule/MobArena/MAUtils.java @@ -28,18 +28,18 @@ import java.util.Map; import java.util.Set; public class MAUtils -{ +{ /* ///////////////////////////////////////////////////////////////////// // - + INITIALIZATION METHODS - + // ///////////////////////////////////////////////////////////////////// */ - + /** * Generates a map of wave numbers and rewards based on the * type of wave ("after" or "every") and the config-file. If * no keys exist in the config-file, an empty map is returned. - */ + */ public static Map> getArenaRewardMap(MobArena plugin, ConfigurationSection config, String arena, String type) { //String arenaPath = "arenas." + arena + ".rewards.waves."; @@ -47,16 +47,16 @@ public class MAUtils String typePath = "rewards.waves." + type; if (!config.contains(typePath)) return result; - + //Set waves = config.getKeys(arenaPath + type); Set waves = config.getConfigurationSection(typePath).getKeys(false); if (waves == null) return result; - + for (String n : waves) { if (!n.matches("[0-9]+")) continue; - + int wave = Integer.parseInt(n); String path = typePath + "." + wave; String rewards = config.getString(path); @@ -75,20 +75,20 @@ public class MAUtils return result; } - - + + /* ///////////////////////////////////////////////////////////////////// // - + MISC METHODS - + // ///////////////////////////////////////////////////////////////////// */ - - + + public static Player getClosestPlayer(MobArena plugin, Entity e, Arena arena) { // Set up the comparison variable and the result. double current = Double.POSITIVE_INFINITY; Player result = null; - + /* Iterate through the ArrayList, and update current and result every * time a squared distance smaller than current is found. */ List players = new ArrayList<>(arena.getPlayersInArena()); @@ -99,7 +99,7 @@ public class MAUtils arena.getMessenger().tell(p, "You warped out of the arena world."); continue; } - + double dist = distanceSquared(plugin, p, e.getLocation()); if (dist < current && dist < 256D) { current = dist; @@ -108,7 +108,7 @@ public class MAUtils } return result; } - + public static double distanceSquared(MobArena plugin, Player p, Location l) { try { return p.getLocation().distanceSquared(l); @@ -121,7 +121,7 @@ public class MAUtils return Double.MAX_VALUE; } } - + /** * Convert a config-name to a proper spaced and capsed arena name. * The input String is split around all underscores, and every part @@ -133,7 +133,7 @@ public class MAUtils if (parts.length == 1) { return toCamelCase(parts[0]); } - + String separator = " "; StringBuffer buffy = new StringBuffer(name.length()); for (String part : parts) { @@ -141,30 +141,30 @@ public class MAUtils buffy.append(separator); } buffy.replace(buffy.length()-1, buffy.length(), ""); - + return buffy.toString(); } - + /** * Returns the input String with a capital first letter, and all the - * other letters become lower case. + * other letters become lower case. */ public static String toCamelCase(String name) { return name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase(); } - + /** * Turn a list into a space-separated string-representation of the list. - */ + */ public static String listToString(Collection list, boolean none, MobArena plugin) { if (list == null || list.isEmpty()) { return (none ? Msg.MISC_NONE.toString() : ""); } - + StringBuffer buffy = new StringBuffer(); int trimLength = 0; - + E type = list.iterator().next(); if (type instanceof Player) { for (E e : list) { @@ -192,7 +192,7 @@ public class MAUtils return buffy.toString().substring(0, buffy.length() - trimLength); } public static String listToString(Collection list, JavaPlugin plugin) { return listToString(list, true, (MobArena) plugin); } - + /** * Returns a String-list version of a comma-separated list. */ @@ -200,15 +200,15 @@ public class MAUtils { List result = new LinkedList<>(); if (list == null) return result; - + String[] parts = list.trim().split(","); - + for (String part : parts) result.add(part.trim()); - + return result; } - + /** * Stand back, I'm going to try science! */ @@ -216,11 +216,11 @@ public class MAUtils { // Grab the Configuration and ArenaMaster ArenaMaster am = plugin.getArenaMaster(); - + // Create the arena node in the config-file. World world = loc.getWorld(); Arena arena = am.createArenaNode(name, world); - + // Get the hippie bounds. int x1 = (int)loc.getX() - radius; int x2 = (int)loc.getX() + radius; @@ -228,14 +228,14 @@ public class MAUtils int y2 = (int)loc.getY() - 1; int z1 = (int)loc.getZ() - radius; int z2 = (int)loc.getZ() + radius; - + int lx1 = x1; int lx2 = x1 + am.getClasses().size() + 3; int ly1 = y1-6; int ly2 = y1-2; int lz1 = z1; int lz2 = z1 + 6; - + // Build some monster walls. for (int i = x1; i <= x2; i++) { @@ -253,7 +253,7 @@ public class MAUtils world.getBlockAt(x2,j,k).setType(Material.SANDSTONE); } } - + // Add some hippie light. for (int i = x1; i <= x2; i++) { @@ -265,7 +265,7 @@ public class MAUtils world.getBlockAt(x1,y1+2,k).setType(Material.GLOWSTONE); world.getBlockAt(x2,y1+2,k).setType(Material.GLOWSTONE); } - + // Build a monster floor, and some Obsidian foundation. for (int i = x1; i <= x2; i++) { @@ -275,20 +275,20 @@ public class MAUtils world.getBlockAt(i,y1-1,k).setType(Material.OBSIDIAN); } } - + // Make a hippie roof. for (int i = x1; i <= x2; i++) { for (int k = z1; k <= z2; k++) world.getBlockAt(i,y2,k).setType(Material.GLASS); } - + // Monster bulldoze for (int i = x1+1; i < x2; i++) for (int j = y1+1; j < y2; j++) for (int k = z1+1; k < z2; k++) world.getBlockAt(i,j,k).setType(Material.AIR); - + // Build a hippie lobby for (int i = lx1; i <= lx2; i++) // Walls { @@ -322,7 +322,7 @@ public class MAUtils for (int j = ly1+1; j <= ly2; j++) for (int k = lz1+1; k < lz2; k++) world.getBlockAt(i,j,k).setType(Material.AIR); - + // Place the hippie signs //Iterator iterator = am.getClasses().iterator(); Iterator iterator = am.getClasses().keySet().iterator(); @@ -336,23 +336,23 @@ public class MAUtils sign.update(); } world.getBlockAt(lx2-2,ly1+1,lz1+2).setType(Material.IRON_BLOCK); - - // Set up the monster points. + + // Set up the monster points. ArenaRegion region = arena.getRegion(); region.set("p1", new Location(world, x1, ly1, z1)); region.set("p2", new Location(world, x2, y2+1, z2)); - + region.set("arena", new Location(world, loc.getX(), y1+1, loc.getZ())); region.set("lobby", new Location(world, x1+2, ly1+1, z1+2)); region.set("spectator", new Location(world, loc.getX(), y2+1, loc.getZ())); - + region.addSpawn("s1", new Location(world, x1+3, y1+2, z1+3)); region.addSpawn("s2", new Location(world, x1+3, y1+2, z2-3)); region.addSpawn("s3", new Location(world, x2-3, y1+2, z1+3)); region.addSpawn("s4", new Location(world, x2-3, y1+2, z2-3)); region.save(); - + am.reloadConfig(); return true; } -} \ No newline at end of file +} diff --git a/src/main/java/com/garbagemule/MobArena/MobArena.java b/src/main/java/com/garbagemule/MobArena/MobArena.java index 986e8d3..dcb7789 100644 --- a/src/main/java/com/garbagemule/MobArena/MobArena.java +++ b/src/main/java/com/garbagemule/MobArena/MobArena.java @@ -114,7 +114,7 @@ public class MobArena extends JavaPlugin } } } - + private void setupArenaMaster() { arenaMaster = new ArenaMasterImpl(this); } diff --git a/src/main/java/com/garbagemule/MobArena/MobArenaHandler.java b/src/main/java/com/garbagemule/MobArena/MobArenaHandler.java index 7a161fd..74546f2 100644 --- a/src/main/java/com/garbagemule/MobArena/MobArenaHandler.java +++ b/src/main/java/com/garbagemule/MobArena/MobArenaHandler.java @@ -10,7 +10,7 @@ import org.bukkit.entity.Player; public class MobArenaHandler { private MobArena plugin; - + /** * Primary constructor. * The field 'plugin' is initalized, if the server is running MobArena. @@ -18,15 +18,15 @@ public class MobArenaHandler public MobArenaHandler() { plugin = (MobArena) Bukkit.getServer().getPluginManager().getPlugin("MobArena"); } - - - + + + /*////////////////////////////////////////////////////////////////// - + REGION/LOCATION METHODS - + //////////////////////////////////////////////////////////////////*/ - + /** * Check if a Location is inside of any arena region. * @param loc A location. @@ -41,7 +41,7 @@ public class MobArenaHandler return false; } - + /** * Check if a Location is inside of a specific arena region (by arena object). * @param arena An Arena object @@ -51,7 +51,7 @@ public class MobArenaHandler public boolean inRegion(Arena arena, Location loc) { return (arena != null && arena.getRegion().contains(loc)); } - + /** * Check if a Location is inside of a specific arena region (by arena name). * @param arenaName The name of an arena @@ -65,7 +65,7 @@ public class MobArenaHandler return arena.getRegion().contains(loc); } - + /** * Check if a Location is inside of the region of an arena that is currently running. * @param loc A location. @@ -74,7 +74,7 @@ public class MobArenaHandler public boolean inRunningRegion(Location loc) { return inRegion(loc, false, true); } - + /** * Check if a Location is inside of the region of an arena that is currently enabled. * @param loc A location. @@ -83,7 +83,7 @@ public class MobArenaHandler public boolean inEnabledRegion(Location loc) { return inRegion(loc, true, false); } - + /** * Private helper method for inRunningRegion and inEnabledRegion * @param loc A location @@ -106,15 +106,15 @@ public class MobArenaHandler return false; } - - - + + + /*////////////////////////////////////////////////////////////////// - + PLAYER/MONSTER/PET METHODS - + //////////////////////////////////////////////////////////////////*/ - + /** * Check if a player is in a MobArena arena (by Player). * @param player The player @@ -123,7 +123,7 @@ public class MobArenaHandler public boolean isPlayerInArena(Player player) { return (plugin.getArenaMaster().getArenaWithPlayer(player) != null); } - + /** * Check if a player is in a MobArena arena (by name). * @param playerName The name of the player @@ -132,7 +132,7 @@ public class MobArenaHandler public boolean isPlayerInArena(String playerName) { return (plugin.getArenaMaster().getArenaWithPlayer(playerName) != null); } - + /** * Get the MobArena class of a given player. * @param player The player @@ -144,7 +144,7 @@ public class MobArenaHandler return getPlayerClass(arena, player); } - + /** * Get the MobArena class of a given player in a given arena. * This method is faster than the above method, granted the Arena object is known. @@ -155,13 +155,13 @@ public class MobArenaHandler public String getPlayerClass(Arena arena, Player player) { ArenaPlayer ap = arena.getArenaPlayer(player); if (ap == null) return null; - + ArenaClass ac = ap.getArenaClass(); if (ac == null) return null; - + return ac.getLowercaseName(); } - + /** * Check if a monster is in a MobArena arena. * @param entity The monster entity @@ -170,7 +170,7 @@ public class MobArenaHandler public boolean isMonsterInArena(LivingEntity entity) { return plugin.getArenaMaster().getArenaWithMonster(entity) != null; } - + /** * Check if a pet is in a MobArena arena. * @param wolf The pet wolf @@ -179,15 +179,15 @@ public class MobArenaHandler public boolean isPetInArena(LivingEntity wolf) { return plugin.getArenaMaster().getArenaWithPet(wolf) != null; } - - - + + + /*////////////////////////////////////////////////////////////////// - + ARENA GETTERS - + //////////////////////////////////////////////////////////////////*/ - + /** * Get an Arena object at the given location. * @param loc A location @@ -196,7 +196,7 @@ public class MobArenaHandler public Arena getArenaAtLocation(Location loc) { return plugin.getArenaMaster().getArenaAtLocation(loc); } - + /** * Get the Arena object that the given player is currently in. * @param p A player @@ -205,7 +205,7 @@ public class MobArenaHandler public Arena getArenaWithPlayer(Player p) { return plugin.getArenaMaster().getArenaWithPlayer(p); } - + /** * Get the Arena object that the given pet is currently in. * @param wolf A pet wolf @@ -214,7 +214,7 @@ public class MobArenaHandler public Arena getArenaWithPet(Entity wolf) { return plugin.getArenaMaster().getArenaWithPet(wolf); } - + /** * Get the Arena object that the given monster is currently in. * @param monster A monster diff --git a/src/main/java/com/garbagemule/MobArena/MonsterManager.java b/src/main/java/com/garbagemule/MobArena/MonsterManager.java index 26e467b..8d45735 100644 --- a/src/main/java/com/garbagemule/MobArena/MonsterManager.java +++ b/src/main/java/com/garbagemule/MobArena/MonsterManager.java @@ -24,7 +24,7 @@ public class MonsterManager private Set mounts; private Map petToPlayer; private Map> playerToPets; - + public MonsterManager() { this.monsters = new HashSet<>(); this.sheep = new HashSet<>(); @@ -35,7 +35,7 @@ public class MonsterManager this.petToPlayer = new HashMap<>(); this.playerToPets = new HashMap<>(); } - + public void reset() { monsters.clear(); sheep.clear(); @@ -46,7 +46,7 @@ public class MonsterManager petToPlayer.clear(); playerToPets.clear(); } - + public void clear() { bosses.values().stream() .map(MABoss::getHealthBar) @@ -60,10 +60,10 @@ public class MonsterManager removeAll(suppliers.keySet()); removeAll(mounts); removeAll(petToPlayer.keySet()); - + reset(); } - + private void removeAll(Collection collection) { for (Entity e : collection) { if (e != null) { @@ -71,7 +71,7 @@ public class MonsterManager } } } - + public void remove(Entity e) { if (monsters.remove(e)) { sheep.remove(e); @@ -83,50 +83,50 @@ public class MonsterManager } } } - + public Set getMonsters() { return monsters; } - + public void addMonster(LivingEntity e) { monsters.add(e); } - + public boolean removeMonster(Entity e) { return monsters.remove(e); } - + public Set getExplodingSheep() { return sheep; } - + public void addExplodingSheep(LivingEntity e) { sheep.add(e); } - + public boolean removeExplodingSheep(LivingEntity e) { return sheep.remove(e); } - + public Set getGolems() { return golems; } - + public void addGolem(LivingEntity e) { golems.add(e); } - + public boolean removeGolem(LivingEntity e) { return golems.remove(e); } - + public void addPet(Player player, Entity pet) { petToPlayer.put(pet, player); playerToPets .computeIfAbsent(player, (key) -> new HashSet<>()) .add(pet); } - + public boolean hasPet(Entity e) { return petToPlayer.containsKey(e); } @@ -154,7 +154,7 @@ public class MonsterManager } return Collections.emptySet(); } - + public void removePets(Player p) { Set pets = playerToPets.remove(p); if (pets != null) { @@ -162,7 +162,7 @@ public class MonsterManager pets.clear(); } } - + public void addMount(LivingEntity e) { mounts.add(e); } @@ -180,29 +180,29 @@ public class MonsterManager e.remove(); } } - + public void addSupplier(LivingEntity e, List drops) { suppliers.put(e, drops); } - + public List getLoot(Entity e) { return suppliers.get(e); } - + public MABoss addBoss(LivingEntity e, double maxHealth) { MABoss b = new MABoss(e, maxHealth); bosses.put(e, b); return b; } - + public MABoss removeBoss(LivingEntity e) { return bosses.remove(e); } - + public MABoss getBoss(LivingEntity e) { return bosses.get(e); } - + public Set getBossMonsters() { return bosses.keySet(); } diff --git a/src/main/java/com/garbagemule/MobArena/Msg.java b/src/main/java/com/garbagemule/MobArena/Msg.java index a1d2270..90b9e4e 100644 --- a/src/main/java/com/garbagemule/MobArena/Msg.java +++ b/src/main/java/com/garbagemule/MobArena/Msg.java @@ -124,4 +124,4 @@ public enum Msg { } return yaml; } -} \ No newline at end of file +} diff --git a/src/main/java/com/garbagemule/MobArena/RewardManager.java b/src/main/java/com/garbagemule/MobArena/RewardManager.java index 60ee6b2..5eda785 100644 --- a/src/main/java/com/garbagemule/MobArena/RewardManager.java +++ b/src/main/java/com/garbagemule/MobArena/RewardManager.java @@ -15,17 +15,17 @@ public class RewardManager { private Map> players; private Set rewarded; - + public RewardManager(Arena arena) { this.players = new HashMap<>(); this.rewarded = new HashSet<>(); } - + public void reset() { players.clear(); rewarded.clear(); } - + public void addReward(Player p, Thing thing) { if (!players.containsKey(p)) { players.put(p, new ArrayList<>()); @@ -35,10 +35,10 @@ public class RewardManager public void grantRewards(Player p) { if (rewarded.contains(p)) return; - + List rewards = players.get(p); if (rewards == null) return; - + for (Thing reward : rewards) { if (reward == null) { continue; @@ -47,4 +47,4 @@ public class RewardManager } rewarded.add(p); } -} \ No newline at end of file +} diff --git a/src/main/java/com/garbagemule/MobArena/ScoreboardManager.java b/src/main/java/com/garbagemule/MobArena/ScoreboardManager.java index 1e61549..bb50783 100644 --- a/src/main/java/com/garbagemule/MobArena/ScoreboardManager.java +++ b/src/main/java/com/garbagemule/MobArena/ScoreboardManager.java @@ -20,7 +20,7 @@ public class ScoreboardManager { private Objective kills; private Map scoreboards; - + /** * Create a new scoreboard for the given arena. * @param arena an arena @@ -30,7 +30,7 @@ public class ScoreboardManager { scoreboard = Bukkit.getScoreboardManager().getNewScoreboard(); scoreboards = new HashMap<>(); } - + /** * Add a player to the scoreboard by setting the player's scoreboard * and giving him an initial to-be-reset non-zero score. @@ -44,7 +44,7 @@ public class ScoreboardManager { player.setScoreboard(scoreboard); kills.getScore(player.getName()).setScore(8); } - + /** * Remove a player from the scoreboard by setting the player's scoreboard * to the main server scoreboard. @@ -108,7 +108,7 @@ public class ScoreboardManager { fake.setScore(value); } } - + /** * Update the scoreboard to display the given wave number. * @param wave a wave number @@ -116,7 +116,7 @@ public class ScoreboardManager { void updateWave(int wave) { kills.setDisplayName(DISPLAY_NAME + wave); } - + /** * Initialize the scoreboard by resetting the kills objective and * setting all player scores to 0. @@ -129,7 +129,7 @@ public class ScoreboardManager { resetKills(); arena.scheduleTask(this::resetPlayerScores, 1); } - + private void resetKills() { if (kills != null) { kills.unregister(); diff --git a/src/main/java/com/garbagemule/MobArena/commands/CommandHandler.java b/src/main/java/com/garbagemule/MobArena/commands/CommandHandler.java index 8b7fc54..4ad63bf 100644 --- a/src/main/java/com/garbagemule/MobArena/commands/CommandHandler.java +++ b/src/main/java/com/garbagemule/MobArena/commands/CommandHandler.java @@ -53,7 +53,7 @@ public class CommandHandler implements CommandExecutor, TabCompleter private Messenger fallbackMessenger; private Map commands; - + public CommandHandler(MobArena plugin) { this.plugin = plugin; this.fallbackMessenger = new Messenger("&a[MobArena] "); @@ -98,7 +98,7 @@ public class CommandHandler implements CommandExecutor, TabCompleter // Get all commands that match the base. List matches = getMatchingCommands(base); - + // If there's more than one match, display them. if (matches.size() > 1) { am.getGlobalMessenger().tell(sender, Msg.MISC_MULTIPLE_MATCHES); @@ -107,29 +107,29 @@ public class CommandHandler implements CommandExecutor, TabCompleter } return true; } - + // If there are no matches at all, notify. if (matches.size() == 0) { am.getGlobalMessenger().tell(sender, Msg.MISC_NO_MATCHES); return true; } - + // Grab the only match. Command command = matches.get(0); CommandInfo info = command.getClass().getAnnotation(CommandInfo.class); - + // First check if the sender has permission. if (!sender.hasPermission(info.permission())) { am.getGlobalMessenger().tell(sender, Msg.MISC_NO_ACCESS); return true; } - + // Check if the last argument is a ?, in which case, display usage and description if (last.equals("?") || last.equals("help")) { showUsage(command, sender, true); return true; } - + // Otherwise, execute the command! String[] params = trimFirstArg(args); if (!command.execute(am, sender, params)) { @@ -162,7 +162,7 @@ public class CommandHandler implements CommandExecutor, TabCompleter } return true; } - + /** * Get all commands that match a given string. * @param arg the given string @@ -170,17 +170,17 @@ public class CommandHandler implements CommandExecutor, TabCompleter */ private List getMatchingCommands(String arg) { List result = new ArrayList<>(); - + // Grab the commands that match the argument. for (Entry entry : commands.entrySet()) { if (arg.matches(entry.getKey())) { result.add(entry.getValue()); } } - + return result; } - + /** * Show the usage and description messages of a command to a player. * The usage will only be shown, if the player has permission for the command. @@ -193,7 +193,7 @@ public class CommandHandler implements CommandExecutor, TabCompleter sender.sendMessage((prefix ? "Usage: " : "") + info.usage() + " " + ChatColor.YELLOW + info.desc()); } - + /** * Remove the first argument of a string. This is because the very first * element of the arguments array will be the command itself. @@ -203,7 +203,7 @@ public class CommandHandler implements CommandExecutor, TabCompleter private String[] trimFirstArg(String[] args) { return Arrays.copyOfRange(args, 1, args.length); } - + /** * List all the available MobArena commands for the CommandSender. * @param sender a player or the console @@ -240,7 +240,7 @@ public class CommandHandler implements CommandExecutor, TabCompleter if (setup.length() > 0) am.getGlobalMessenger().tell(sender, "Setup commands: " + setup.toString()); } } - + @Override public List onTabComplete(CommandSender sender, org.bukkit.command.Command bcmd, String alias, String[] args) { // Only players can tab complete @@ -302,7 +302,7 @@ public class CommandHandler implements CommandExecutor, TabCompleter */ private void registerCommands() { commands = new LinkedHashMap<>(); - + // mobarena.use register(JoinCommand.class); register(LeaveCommand.class); @@ -319,7 +319,7 @@ public class CommandHandler implements CommandExecutor, TabCompleter register(ForceCommand.class); register(KickCommand.class); register(RestoreCommand.class); - + // mobarena.setup register(SetupCommand.class); register(SettingCommand.class); @@ -339,7 +339,7 @@ public class CommandHandler implements CommandExecutor, TabCompleter register(RemoveLeaderboardCommand.class); register(AutoGenerateCommand.class); } - + /** * Register a command. * The Command's CommandInfo annotation is queried to find its pattern @@ -349,7 +349,7 @@ public class CommandHandler implements CommandExecutor, TabCompleter public void register(Class c) { CommandInfo info = c.getAnnotation(CommandInfo.class); if (info == null) return; - + try { commands.put(info.pattern(), c.newInstance()); } diff --git a/src/main/java/com/garbagemule/MobArena/commands/CommandInfo.java b/src/main/java/com/garbagemule/MobArena/commands/CommandInfo.java index aacb421..df2d17d 100644 --- a/src/main/java/com/garbagemule/MobArena/commands/CommandInfo.java +++ b/src/main/java/com/garbagemule/MobArena/commands/CommandInfo.java @@ -10,24 +10,24 @@ public @interface CommandInfo * The actual name of the command. Not really used anywhere. */ String name(); - + /** * A regex pattern that allows minor oddities and alternatives to the command name. */ String pattern(); - + /** * The usage message, i.e. how the command should be used. */ String usage(); - + /** * A description of what the command does. */ String desc(); - + /** * The permission required to execute this command. */ String permission(); -} \ No newline at end of file +} diff --git a/src/main/java/com/garbagemule/MobArena/commands/Commands.java b/src/main/java/com/garbagemule/MobArena/commands/Commands.java index f890e05..77c3477 100644 --- a/src/main/java/com/garbagemule/MobArena/commands/Commands.java +++ b/src/main/java/com/garbagemule/MobArena/commands/Commands.java @@ -34,7 +34,7 @@ public class Commands public static boolean isPlayer(CommandSender sender) { return (sender instanceof Player); } - + public static Arena getArenaToJoinOrSpec(ArenaMaster am, Player p, String arg1) { // Check if MobArena is enabled first. if (!am.isEnabled()) { @@ -48,17 +48,17 @@ public class Commands am.getGlobalMessenger().tell(p, Msg.JOIN_NO_PERMISSION); return null; } - + // Then check if we have any enabled arenas. arenas = am.getEnabledArenas(arenas); if (arenas.isEmpty()) { am.getGlobalMessenger().tell(p, Msg.JOIN_NOT_ENABLED); return null; } - + // The arena to join. Arena arena = null; - + // Branch on whether there's an argument or not. if (arg1 != null) { arena = am.getArenaWithName(arg1); @@ -66,7 +66,7 @@ public class Commands am.getGlobalMessenger().tell(p, Msg.ARENA_DOES_NOT_EXIST); return null; } - + if (!arenas.contains(arena)) { am.getGlobalMessenger().tell(p, Msg.JOIN_ARENA_NOT_ENABLED); return null; @@ -80,18 +80,18 @@ public class Commands } arena = arenas.get(0); } - + // If player is in a boat/minecart, eject! if (p.isInsideVehicle()) { p.leaveVehicle(); } - + // If player is in a bed, unbed! if (p.isSleeping()) { p.kickPlayer("Banned for life... Nah, just don't join from a bed ;)"); return null; } - + return arena; } } diff --git a/src/main/java/com/garbagemule/MobArena/commands/admin/DisableCommand.java b/src/main/java/com/garbagemule/MobArena/commands/admin/DisableCommand.java index d8ec5e2..c21fb9c 100644 --- a/src/main/java/com/garbagemule/MobArena/commands/admin/DisableCommand.java +++ b/src/main/java/com/garbagemule/MobArena/commands/admin/DisableCommand.java @@ -26,14 +26,14 @@ public class DisableCommand implements Command public boolean execute(ArenaMaster am, CommandSender sender, String... args) { // Grab the argument, if any. String arg1 = (args.length > 0 ? args[0] : ""); - + if (arg1.equals("all")) { for (Arena arena : am.getArenas()) { disable(arena, sender); } return true; } - + if (!arg1.equals("")) { Arena arena = am.getArenaWithName(arg1); if (arena == null) { @@ -43,13 +43,13 @@ public class DisableCommand implements Command disable(arena, sender); return true; } - + am.setEnabled(false); am.saveConfig(); am.getGlobalMessenger().tell(sender, "MobArena " + ChatColor.RED + "disabled"); return true; } - + private void disable(Arena arena, CommandSender sender) { arena.setEnabled(false); arena.getPlugin().saveConfig(); diff --git a/src/main/java/com/garbagemule/MobArena/commands/admin/EnableCommand.java b/src/main/java/com/garbagemule/MobArena/commands/admin/EnableCommand.java index 57b3a99..b27a69c 100644 --- a/src/main/java/com/garbagemule/MobArena/commands/admin/EnableCommand.java +++ b/src/main/java/com/garbagemule/MobArena/commands/admin/EnableCommand.java @@ -26,14 +26,14 @@ public class EnableCommand implements Command public boolean execute(ArenaMaster am, CommandSender sender, String... args) { // Grab the argument, if any. String arg1 = (args.length > 0 ? args[0] : ""); - + if (arg1.equals("all")) { for (Arena arena : am.getArenas()) { enable(arena, sender); } return true; } - + if (!arg1.equals("")) { Arena arena = am.getArenaWithName(arg1); if (arena == null) { @@ -43,13 +43,13 @@ public class EnableCommand implements Command enable(arena, sender); return true; } - + am.setEnabled(true); am.saveConfig(); am.getGlobalMessenger().tell(sender, "MobArena " + ChatColor.GREEN + "enabled"); return true; } - + private void enable(Arena arena, CommandSender sender) { arena.setEnabled(true); arena.getPlugin().saveConfig(); diff --git a/src/main/java/com/garbagemule/MobArena/commands/admin/ForceCommand.java b/src/main/java/com/garbagemule/MobArena/commands/admin/ForceCommand.java index c1b457e..e41a8c0 100644 --- a/src/main/java/com/garbagemule/MobArena/commands/admin/ForceCommand.java +++ b/src/main/java/com/garbagemule/MobArena/commands/admin/ForceCommand.java @@ -30,7 +30,7 @@ public class ForceCommand implements Command // Grab the argument, if any. String arg1 = (args.length > 0 ? args[0] : ""); String arg2 = (args.length > 1 ? args[1] : ""); - + if (arg1.equals("end")) { // With no arguments, end all. if (arg2.equals("")) { @@ -41,46 +41,46 @@ public class ForceCommand implements Command am.resetArenaMap(); return true; } - + // Otherwise, grab the arena in question. Arena arena = am.getArenaWithName(arg2); if (arena == null) { am.getGlobalMessenger().tell(sender, Msg.ARENA_DOES_NOT_EXIST); return true; } - + if (arena.getAllPlayers().isEmpty()) { am.getGlobalMessenger().tell(sender, Msg.FORCE_END_EMPTY); return true; } - + // And end it! arena.forceEnd(); am.getGlobalMessenger().tell(sender, Msg.FORCE_END_ENDED); return true; } - + if (arg1.equals("start")) { // Require argument. if (arg2.equals("")) return false; - + // Grab the arena. Arena arena = am.getArenaWithName(arg2); if (arena == null) { am.getGlobalMessenger().tell(sender, Msg.ARENA_DOES_NOT_EXIST); return true; } - + if (arena.isRunning()) { am.getGlobalMessenger().tell(sender, Msg.FORCE_START_RUNNING); return true; } - + if (arena.getReadyPlayersInLobby().isEmpty()) { am.getGlobalMessenger().tell(sender, Msg.FORCE_START_NOT_READY); return true; } - + // And start it! arena.forceStart(); am.getGlobalMessenger().tell(sender, Msg.FORCE_START_STARTED); diff --git a/src/main/java/com/garbagemule/MobArena/commands/admin/KickCommand.java b/src/main/java/com/garbagemule/MobArena/commands/admin/KickCommand.java index 2661a19..fcd581a 100644 --- a/src/main/java/com/garbagemule/MobArena/commands/admin/KickCommand.java +++ b/src/main/java/com/garbagemule/MobArena/commands/admin/KickCommand.java @@ -24,16 +24,16 @@ public class KickCommand implements Command public boolean execute(ArenaMaster am, CommandSender sender, String... args) { // Require a player name if (args.length != 1) return false; - + Arena arena = am.getArenaWithPlayer(args[0]); if (arena == null) { am.getGlobalMessenger().tell(sender, "That player is not in an arena."); return true; } - + // Grab the Player object. Player bp = am.getPlugin().getServer().getPlayer(args[0]); - + // Force leave. arena.playerLeave(bp); am.getGlobalMessenger().tell(sender, "Player '" + args[0] + "' was kicked from arena '" + arena.configName() + "'."); diff --git a/src/main/java/com/garbagemule/MobArena/commands/admin/RestoreCommand.java b/src/main/java/com/garbagemule/MobArena/commands/admin/RestoreCommand.java index f7f1392..9bfdc06 100644 --- a/src/main/java/com/garbagemule/MobArena/commands/admin/RestoreCommand.java +++ b/src/main/java/com/garbagemule/MobArena/commands/admin/RestoreCommand.java @@ -25,7 +25,7 @@ public class RestoreCommand implements Command public boolean execute(ArenaMaster am, CommandSender sender, String... args) { // Require a player name if (args.length != 1) return false; - + Player player = am.getPlugin().getServer().getPlayer(args[0]); if (player == null) { am.getGlobalMessenger().tell(sender, "Player not found."); @@ -35,7 +35,7 @@ public class RestoreCommand implements Command am.getGlobalMessenger().tell(sender, "Player is currently in an arena."); return true; } - + if (InventoryManager.restoreFromFile(am.getPlugin(), player)) { am.getGlobalMessenger().tell(sender, "Restored " + args[0] + "'s inventory!"); } else { diff --git a/src/main/java/com/garbagemule/MobArena/commands/setup/AddArenaCommand.java b/src/main/java/com/garbagemule/MobArena/commands/setup/AddArenaCommand.java index 7f9866c..9c42830 100644 --- a/src/main/java/com/garbagemule/MobArena/commands/setup/AddArenaCommand.java +++ b/src/main/java/com/garbagemule/MobArena/commands/setup/AddArenaCommand.java @@ -27,10 +27,10 @@ public class AddArenaCommand implements Command // Require an arena name if (args.length != 1) return false; - + // Unwrap the sender. Player p = Commands.unwrap(sender); - + Arena arena = am.getArenaWithName(args[0]); if (arena != null) { am.getGlobalMessenger().tell(sender, "An arena with that name already exists."); diff --git a/src/main/java/com/garbagemule/MobArena/commands/setup/AutoGenerateCommand.java b/src/main/java/com/garbagemule/MobArena/commands/setup/AutoGenerateCommand.java index 410f73c..fc36be4 100644 --- a/src/main/java/com/garbagemule/MobArena/commands/setup/AutoGenerateCommand.java +++ b/src/main/java/com/garbagemule/MobArena/commands/setup/AutoGenerateCommand.java @@ -28,22 +28,22 @@ public class AutoGenerateCommand implements Command // Require an arena name if (args.length != 1) return false; - + // Unwrap the sender. Player p = Commands.unwrap(sender); - + // Check if arena already exists. Arena arena = am.getArenaWithName(args[0]); if (arena != null) { am.getGlobalMessenger().tell(sender, "An arena with that name already exists."); return true; } - + if (!MAUtils.doooooItHippieMonster(p.getLocation(), 13, args[0], am.getPlugin())) { am.getGlobalMessenger().tell(sender, "Could not auto-generate arena."); return true; } - + am.getGlobalMessenger().tell(sender, "Arena with name '" + args[0] + "' generated."); return true; } diff --git a/src/main/java/com/garbagemule/MobArena/commands/setup/ListClassesCommand.java b/src/main/java/com/garbagemule/MobArena/commands/setup/ListClassesCommand.java index 5377f55..06a55f0 100644 --- a/src/main/java/com/garbagemule/MobArena/commands/setup/ListClassesCommand.java +++ b/src/main/java/com/garbagemule/MobArena/commands/setup/ListClassesCommand.java @@ -24,7 +24,7 @@ public class ListClassesCommand implements Command am.getGlobalMessenger().tell(sender, ""); return true; } - + for (String c : classes) { am.getGlobalMessenger().tell(sender, "- " + c); } diff --git a/src/main/java/com/garbagemule/MobArena/commands/setup/RemoveArenaCommand.java b/src/main/java/com/garbagemule/MobArena/commands/setup/RemoveArenaCommand.java index 20549f8..9ec2434 100644 --- a/src/main/java/com/garbagemule/MobArena/commands/setup/RemoveArenaCommand.java +++ b/src/main/java/com/garbagemule/MobArena/commands/setup/RemoveArenaCommand.java @@ -24,12 +24,12 @@ public class RemoveArenaCommand implements Command public boolean execute(ArenaMaster am, CommandSender sender, String... args) { // Require an arena name if (args.length != 1) return false; - + if (am.getArenas().size() == 1) { am.getGlobalMessenger().tell(sender, "At least one arena must exist."); return true; } - + Arena arena = am.getArenaWithName(args[0]); if (arena == null) { am.getGlobalMessenger().tell(sender, "There is no arena with that name."); diff --git a/src/main/java/com/garbagemule/MobArena/commands/setup/RemoveLeaderboardCommand.java b/src/main/java/com/garbagemule/MobArena/commands/setup/RemoveLeaderboardCommand.java index 12b8029..14e3ed2 100644 --- a/src/main/java/com/garbagemule/MobArena/commands/setup/RemoveLeaderboardCommand.java +++ b/src/main/java/com/garbagemule/MobArena/commands/setup/RemoveLeaderboardCommand.java @@ -41,4 +41,4 @@ public class RemoveLeaderboardCommand implements Command } return true; } -} \ No newline at end of file +} diff --git a/src/main/java/com/garbagemule/MobArena/commands/user/ArenaListCommand.java b/src/main/java/com/garbagemule/MobArena/commands/user/ArenaListCommand.java index 82932e5..acce86b 100644 --- a/src/main/java/com/garbagemule/MobArena/commands/user/ArenaListCommand.java +++ b/src/main/java/com/garbagemule/MobArena/commands/user/ArenaListCommand.java @@ -24,14 +24,14 @@ public class ArenaListCommand implements Command @Override public boolean execute(ArenaMaster am, CommandSender sender, String... args) { List arenas; - + if (Commands.isPlayer(sender)) { Player p = Commands.unwrap(sender); - arenas = am.getPermittedArenas(p); + arenas = am.getPermittedArenas(p); } else { arenas = am.getArenas(); } - + String list = MAUtils.listToString(arenas, am.getPlugin()); am.getGlobalMessenger().tell(sender, Msg.MISC_LIST_ARENAS.format(list)); return true; diff --git a/src/main/java/com/garbagemule/MobArena/commands/user/JoinCommand.java b/src/main/java/com/garbagemule/MobArena/commands/user/JoinCommand.java index 992bc0a..061d005 100644 --- a/src/main/java/com/garbagemule/MobArena/commands/user/JoinCommand.java +++ b/src/main/java/com/garbagemule/MobArena/commands/user/JoinCommand.java @@ -29,7 +29,7 @@ public class JoinCommand implements Command am.getGlobalMessenger().tell(sender, Msg.MISC_NOT_FROM_CONSOLE); return true; } - + // Unwrap the sender, grab the argument, if any. Player p = Commands.unwrap(sender); String arg1 = (args.length > 0 ? args[0] : null); @@ -39,7 +39,7 @@ public class JoinCommand implements Command if (toArena == null || !canJoin(p, toArena)) { return true; } - + // Join the arena! int seconds = toArena.getSettings().getInt("join-interrupt-timer", 0); if (seconds > 0) { diff --git a/src/main/java/com/garbagemule/MobArena/commands/user/LeaveCommand.java b/src/main/java/com/garbagemule/MobArena/commands/user/LeaveCommand.java index 74e5b51..9e0b4a7 100644 --- a/src/main/java/com/garbagemule/MobArena/commands/user/LeaveCommand.java +++ b/src/main/java/com/garbagemule/MobArena/commands/user/LeaveCommand.java @@ -24,11 +24,11 @@ public class LeaveCommand implements Command am.getGlobalMessenger().tell(sender, Msg.MISC_NOT_FROM_CONSOLE); return true; } - + // Unwrap the sender. Player p = Commands.unwrap(sender); - Arena arena = am.getArenaWithPlayer(p); + Arena arena = am.getArenaWithPlayer(p); if (arena == null) { arena = am.getArenaWithSpectator(p); if (arena == null) { @@ -36,7 +36,7 @@ public class LeaveCommand implements Command return true; } } - + if (arena.playerLeave(p)) { arena.getMessenger().tell(p, Msg.LEAVE_PLAYER_LEFT); } diff --git a/src/main/java/com/garbagemule/MobArena/commands/user/NotReadyCommand.java b/src/main/java/com/garbagemule/MobArena/commands/user/NotReadyCommand.java index 0d64a27..3e0b7f5 100644 --- a/src/main/java/com/garbagemule/MobArena/commands/user/NotReadyCommand.java +++ b/src/main/java/com/garbagemule/MobArena/commands/user/NotReadyCommand.java @@ -23,10 +23,10 @@ public class NotReadyCommand implements Command public boolean execute(ArenaMaster am, CommandSender sender, String... args) { // Grab the argument, if any String arg1 = (args.length > 0 ? args[0] : ""); - + // The arena to query. Arena arena = null; - + if (!arg1.equals("")) { arena = am.getArenaWithName(arg1); if (arena == null) { @@ -36,7 +36,7 @@ public class NotReadyCommand implements Command } else if (Commands.isPlayer(sender)) { Player p = Commands.unwrap(sender); arena = am.getArenaWithPlayer(p); - + if (arena == null) { am.getGlobalMessenger().tell(sender, Msg.LEAVE_NOT_PLAYING); return true; @@ -44,7 +44,7 @@ public class NotReadyCommand implements Command } else { return false; } - + String list = MAUtils.listToString(arena.getNonreadyPlayers(), am.getPlugin()); arena.getMessenger().tell(sender, Msg.MISC_LIST_PLAYERS.format(list)); return true; diff --git a/src/main/java/com/garbagemule/MobArena/commands/user/PickClassCommand.java b/src/main/java/com/garbagemule/MobArena/commands/user/PickClassCommand.java index ea3a6cd..4c600d8 100644 --- a/src/main/java/com/garbagemule/MobArena/commands/user/PickClassCommand.java +++ b/src/main/java/com/garbagemule/MobArena/commands/user/PickClassCommand.java @@ -36,7 +36,7 @@ public class PickClassCommand implements Command // Require a class name if (args.length != 1) return false; - + // Unwrap the sender Player p = Commands.unwrap(sender); diff --git a/src/main/java/com/garbagemule/MobArena/commands/user/PlayerListCommand.java b/src/main/java/com/garbagemule/MobArena/commands/user/PlayerListCommand.java index 183cc8a..824f6c0 100644 --- a/src/main/java/com/garbagemule/MobArena/commands/user/PlayerListCommand.java +++ b/src/main/java/com/garbagemule/MobArena/commands/user/PlayerListCommand.java @@ -25,29 +25,29 @@ public class PlayerListCommand implements Command public boolean execute(ArenaMaster am, CommandSender sender, String... args) { // Grab the argument, if any. String arg1 = (args.length > 0 ? args[0] : ""); - + String list = null; if (!arg1.equals("")) { Arena arena = am.getArenaWithName(arg1); - + if (arena == null) { am.getGlobalMessenger().tell(sender, Msg.ARENA_DOES_NOT_EXIST); return false; } - + list = MAUtils.listToString(arena.getPlayersInArena(), am.getPlugin()); } else { StringBuilder buffy = new StringBuilder(); List players = new LinkedList<>(); - + for (Arena arena : am.getArenas()) { players.addAll(arena.getPlayersInArena()); } - + buffy.append(MAUtils.listToString(players, am.getPlugin())); list = buffy.toString(); } - + am.getGlobalMessenger().tell(sender, Msg.MISC_LIST_PLAYERS.format(list)); return true; } diff --git a/src/main/java/com/garbagemule/MobArena/commands/user/SpecCommand.java b/src/main/java/com/garbagemule/MobArena/commands/user/SpecCommand.java index 1d93f0c..5bb7875 100644 --- a/src/main/java/com/garbagemule/MobArena/commands/user/SpecCommand.java +++ b/src/main/java/com/garbagemule/MobArena/commands/user/SpecCommand.java @@ -29,11 +29,11 @@ public class SpecCommand implements Command am.getGlobalMessenger().tell(sender, Msg.MISC_NOT_FROM_CONSOLE); return false; } - + // Unwrap the sender, grab the argument, if any. Player p = Commands.unwrap(sender); String arg1 = (args.length > 0 ? args[0] : null); - + // Run some rough sanity checks, and grab the arena to spec. Arena toArena = Commands.getArenaToJoinOrSpec(am, p, arg1); if (toArena == null || !canSpec(p, toArena)) { diff --git a/src/main/java/com/garbagemule/MobArena/events/ArenaEndEvent.java b/src/main/java/com/garbagemule/MobArena/events/ArenaEndEvent.java index ab553fd..c2d8956 100644 --- a/src/main/java/com/garbagemule/MobArena/events/ArenaEndEvent.java +++ b/src/main/java/com/garbagemule/MobArena/events/ArenaEndEvent.java @@ -10,12 +10,12 @@ public class ArenaEndEvent extends Event implements Cancellable private static final HandlerList handlers = new HandlerList(); private Arena arena; private boolean cancelled; - + public ArenaEndEvent(Arena arena) { this.arena = arena; this.cancelled = false; } - + public Arena getArena() { return arena; } @@ -29,12 +29,12 @@ public class ArenaEndEvent extends Event implements Cancellable public void setCancelled(boolean cancelled) { this.cancelled = cancelled; } - + public HandlerList getHandlers() { return handlers; } - + public static HandlerList getHandlerList() { return handlers; } -} \ No newline at end of file +} diff --git a/src/main/java/com/garbagemule/MobArena/events/ArenaPlayerDeathEvent.java b/src/main/java/com/garbagemule/MobArena/events/ArenaPlayerDeathEvent.java index f1e4651..fa037de 100644 --- a/src/main/java/com/garbagemule/MobArena/events/ArenaPlayerDeathEvent.java +++ b/src/main/java/com/garbagemule/MobArena/events/ArenaPlayerDeathEvent.java @@ -11,17 +11,17 @@ public class ArenaPlayerDeathEvent extends Event private Player player; private Arena arena; private boolean last; - + public ArenaPlayerDeathEvent(Player player, Arena arena, boolean last) { this.player = player; this.arena = arena; this.last = last; } - + public Player getPlayer() { return player; } - + public Arena getArena() { return arena; } @@ -29,12 +29,12 @@ public class ArenaPlayerDeathEvent extends Event public boolean wasLastPlayerStanding() { return last; } - + public HandlerList getHandlers() { return handlers; } - + public static HandlerList getHandlerList() { return handlers; } -} \ No newline at end of file +} diff --git a/src/main/java/com/garbagemule/MobArena/events/ArenaPlayerJoinEvent.java b/src/main/java/com/garbagemule/MobArena/events/ArenaPlayerJoinEvent.java index 5a2e822..4b35162 100644 --- a/src/main/java/com/garbagemule/MobArena/events/ArenaPlayerJoinEvent.java +++ b/src/main/java/com/garbagemule/MobArena/events/ArenaPlayerJoinEvent.java @@ -12,17 +12,17 @@ public class ArenaPlayerJoinEvent extends Event implements Cancellable private Player player; private Arena arena; private boolean cancelled; - + public ArenaPlayerJoinEvent(Player player, Arena arena) { this.player = player; this.arena = arena; this.cancelled = false; } - + public Player getPlayer() { return player; } - + public Arena getArena() { return arena; } @@ -36,12 +36,12 @@ public class ArenaPlayerJoinEvent extends Event implements Cancellable public void setCancelled(boolean cancelled) { this.cancelled = cancelled; } - + public HandlerList getHandlers() { return handlers; } - + public static HandlerList getHandlerList() { return handlers; } -} \ No newline at end of file +} diff --git a/src/main/java/com/garbagemule/MobArena/events/ArenaPlayerLeaveEvent.java b/src/main/java/com/garbagemule/MobArena/events/ArenaPlayerLeaveEvent.java index f58647e..5796610 100644 --- a/src/main/java/com/garbagemule/MobArena/events/ArenaPlayerLeaveEvent.java +++ b/src/main/java/com/garbagemule/MobArena/events/ArenaPlayerLeaveEvent.java @@ -12,17 +12,17 @@ public class ArenaPlayerLeaveEvent extends Event implements Cancellable private Player player; private Arena arena; private boolean cancelled; - + public ArenaPlayerLeaveEvent(Player player, Arena arena) { this.player = player; this.arena = arena; this.cancelled = false; } - + public Player getPlayer() { return player; } - + public Arena getArena() { return arena; } @@ -36,12 +36,12 @@ public class ArenaPlayerLeaveEvent extends Event implements Cancellable public void setCancelled(boolean cancelled) { this.cancelled = cancelled; } - + public HandlerList getHandlers() { return handlers; } - + public static HandlerList getHandlerList() { return handlers; } -} \ No newline at end of file +} diff --git a/src/main/java/com/garbagemule/MobArena/events/ArenaPlayerReadyEvent.java b/src/main/java/com/garbagemule/MobArena/events/ArenaPlayerReadyEvent.java index 06be9a4..25de5e4 100644 --- a/src/main/java/com/garbagemule/MobArena/events/ArenaPlayerReadyEvent.java +++ b/src/main/java/com/garbagemule/MobArena/events/ArenaPlayerReadyEvent.java @@ -18,11 +18,11 @@ public class ArenaPlayerReadyEvent extends Event implements Cancellable this.arena = arena; this.cancelled = false; } - + public Player getPlayer() { return player; } - + public Arena getArena() { return arena; } @@ -36,12 +36,12 @@ public class ArenaPlayerReadyEvent extends Event implements Cancellable public void setCancelled(boolean cancelled) { this.cancelled = cancelled; } - + public HandlerList getHandlers() { return handlers; } - + public static HandlerList getHandlerList() { return handlers; } -} \ No newline at end of file +} diff --git a/src/main/java/com/garbagemule/MobArena/events/ArenaStartEvent.java b/src/main/java/com/garbagemule/MobArena/events/ArenaStartEvent.java index 0c3eb33..8f2ed24 100644 --- a/src/main/java/com/garbagemule/MobArena/events/ArenaStartEvent.java +++ b/src/main/java/com/garbagemule/MobArena/events/ArenaStartEvent.java @@ -10,12 +10,12 @@ public class ArenaStartEvent extends Event implements Cancellable private static final HandlerList handlers = new HandlerList(); private Arena arena; private boolean cancelled; - + public ArenaStartEvent(Arena arena) { this.arena = arena; this.cancelled = false; } - + public Arena getArena() { return arena; } @@ -29,12 +29,12 @@ public class ArenaStartEvent extends Event implements Cancellable public void setCancelled(boolean cancelled) { this.cancelled = cancelled; } - + public HandlerList getHandlers() { return handlers; } - + public static HandlerList getHandlerList() { return handlers; } -} \ No newline at end of file +} diff --git a/src/main/java/com/garbagemule/MobArena/events/NewWaveEvent.java b/src/main/java/com/garbagemule/MobArena/events/NewWaveEvent.java index 7e19606..661201d 100644 --- a/src/main/java/com/garbagemule/MobArena/events/NewWaveEvent.java +++ b/src/main/java/com/garbagemule/MobArena/events/NewWaveEvent.java @@ -11,10 +11,10 @@ public class NewWaveEvent extends Event implements Cancellable private static final HandlerList handlers = new HandlerList(); private Arena arena; private boolean cancelled; - + private Wave wave; private int waveNo; - + public NewWaveEvent(Arena arena, Wave wave, int waveNo) { this.arena = arena; this.wave = wave; @@ -24,11 +24,11 @@ public class NewWaveEvent extends Event implements Cancellable public Wave getWave() { return wave; } - + public int getWaveNumber() { return waveNo; } - + public Arena getArena() { return arena; } @@ -42,11 +42,11 @@ public class NewWaveEvent extends Event implements Cancellable public void setCancelled(boolean cancelled) { this.cancelled = cancelled; } - + public HandlerList getHandlers() { return handlers; } - + public static HandlerList getHandlerList() { return handlers; } diff --git a/src/main/java/com/garbagemule/MobArena/framework/Arena.java b/src/main/java/com/garbagemule/MobArena/framework/Arena.java index da8a614..70e3a01 100644 --- a/src/main/java/com/garbagemule/MobArena/framework/Arena.java +++ b/src/main/java/com/garbagemule/MobArena/framework/Arena.java @@ -40,78 +40,78 @@ public interface Arena /////////////////////////////////////////////////////////////////////////*/ ConfigurationSection getSettings(); - + World getWorld(); - + void setWorld(World world); - + boolean isEnabled(); - + void setEnabled(boolean value); - + boolean isProtected(); - + void setProtected(boolean value); - + boolean isRunning(); - + boolean inEditMode(); - + void setEditMode(boolean value); int getMinPlayers(); int getMaxPlayers(); - + List getEntryFee(); - + Set>> getEveryWaveEntrySet(); List getAfterWaveReward(int wave); - + Set getPlayersInArena(); - + Set getPlayersInLobby(); - + Set getReadyPlayersInLobby(); - + Set getSpectators(); MASpawnThread getSpawnThread(); - + WaveManager getWaveManager(); - + ArenaListener getEventListener(); - + void setLeaderboard(Leaderboard leaderboard); - + ArenaPlayer getArenaPlayer(Player p); - + Set getBlocks(); void addBlock(Block b); - + boolean removeBlock(Block b); - + boolean hasPet(Entity e); - + void addRepairable(Repairable r); - + ArenaRegion getRegion(); - + InventoryManager getInventoryManager(); - + RewardManager getRewardManager(); - + MonsterManager getMonsterManager(); ClassLimitManager getClassLimitManager(); void revivePlayer(Player p); - + ScoreboardManager getScoreboard(); - - + + Messenger getMessenger(); Messenger getGlobalMessenger(); @@ -121,127 +121,127 @@ public interface Arena void announce(Msg msg, String s); void announce(Msg msg); - - - + + + void scheduleTask(Runnable r, int delay); - - - - - - - - - - - - + + + + + + + + + + + + boolean startArena(); - + boolean endArena(); - + void forceStart(); - + void forceEnd(); boolean hasPermission(Player p); - + boolean playerJoin(Player p, Location loc); - + void playerReady(Player p); - + boolean playerLeave(Player p); boolean isMoving(Player p); boolean isLeaving(Player p); - + void playerDeath(Player p); void playerRespawn(Player p); - + Location getRespawnLocation(Player p); - + void playerSpec(Player p, Location loc); - + void storeContainerContents(); - + void restoreContainerContents(); - + void discardPlayer(Player p); - + void repairBlocks(); - + void queueRepairable(Repairable r); - - - + + + /*//////////////////////////////////////////////////////////////////// // // Items & Cleanup // ////////////////////////////////////////////////////////////////////*/ - + void assignClass(Player p, String className); void assignClassGiveInv(Player p, String className, ItemStack[] contents); void addRandomPlayer(Player p); - + void assignRandomClass(Player p); - - + + /*//////////////////////////////////////////////////////////////////// // // Initialization & Checks // ////////////////////////////////////////////////////////////////////*/ - + void restoreRegion(); - - - + + + /*//////////////////////////////////////////////////////////////////// // // Getters & Misc // ////////////////////////////////////////////////////////////////////*/ - + boolean inArena(Player p); - + boolean inLobby(Player p); - + boolean inSpec(Player p); - + boolean isDead(Player p); - + String configName(); - + String arenaName(); - + MobArena getPlugin(); - + Map getClasses(); - + int getPlayerCount(); - + List getAllPlayers(); - + Collection getArenaPlayerSet(); - + List getNonreadyPlayers(); - + boolean canAfford(Player p); - + boolean takeFee(Player p); boolean refund(Player p); - + boolean canJoin(Player p); - + boolean canSpec(Player p); boolean hasIsolatedChat(); diff --git a/src/main/java/com/garbagemule/MobArena/framework/ArenaMaster.java b/src/main/java/com/garbagemule/MobArena/framework/ArenaMaster.java index 921313c..5bd687a 100644 --- a/src/main/java/com/garbagemule/MobArena/framework/ArenaMaster.java +++ b/src/main/java/com/garbagemule/MobArena/framework/ArenaMaster.java @@ -21,121 +21,121 @@ public interface ArenaMaster // NEW METHODS IN REFACTORING // /////////////////////////////////////////////////////////////////////////*/ - - + + MobArena getPlugin(); Messenger getGlobalMessenger(); - + boolean isEnabled(); - + void setEnabled(boolean value); - + boolean notifyOnUpdates(); - + List getArenas(); - + Map getClasses(); - + void addPlayer(Player p, Arena arena); - + Arena removePlayer(Player p); - + void resetArenaMap(); - - - + + + /*///////////////////////////////////////////////////////////////////////// // // Getters // /////////////////////////////////////////////////////////////////////////*/ - + List getEnabledArenas(); - + List getEnabledArenas(List arenas); - + List getPermittedArenas(Player p); - + List getEnabledAndPermittedArenas(Player p); - + Arena getArenaAtLocation(Location loc); - + List getArenasInWorld(World world); - + List getAllPlayers(); - + List getAllPlayersInArena(String arenaName); - + List getAllLivingPlayers(); - + List getLivingPlayersInArena(String arenaName); - + Arena getArenaWithPlayer(Player p); - + Arena getArenaWithPlayer(String playerName); - + Arena getArenaWithSpectator(Player p); - + Arena getArenaWithMonster(Entity e); - + Arena getArenaWithPet(Entity e); - + Arena getArenaWithName(String configName); - + Arena getArenaWithName(Collection arenas, String configName); - + boolean isAllowed(String command); JoinInterruptTimer getJoinInterruptTimer(); - - - + + + /*///////////////////////////////////////////////////////////////////////// // // Initialization // /////////////////////////////////////////////////////////////////////////*/ - + void initialize(); /** * Load the global settings. */ void loadSettings(); - + /** * Load all class-related stuff. */ void loadClasses(); - + /** * Load all arena-related stuff. */ void loadArenas(); - + void loadArenasInWorld(String worldName); - + void unloadArenasInWorld(String worldName); boolean reloadArena(String name); - + Arena createArenaNode(String configName, World world); - + void removeArenaNode(Arena arena); - + SpawnsPets getSpawnsPets(); - - + + /*///////////////////////////////////////////////////////////////////////// // // Update and serialization methods // /////////////////////////////////////////////////////////////////////////*/ - + void reloadConfig(); - + void saveConfig(); } diff --git a/src/main/java/com/garbagemule/MobArena/leaderboards/AbstractLeaderboardColumn.java b/src/main/java/com/garbagemule/MobArena/leaderboards/AbstractLeaderboardColumn.java index dbd8bd6..b492e98 100644 --- a/src/main/java/com/garbagemule/MobArena/leaderboards/AbstractLeaderboardColumn.java +++ b/src/main/java/com/garbagemule/MobArena/leaderboards/AbstractLeaderboardColumn.java @@ -10,32 +10,32 @@ public abstract class AbstractLeaderboardColumn implements LeaderboardColumn protected String statname; private Sign header; private List signs; - + public AbstractLeaderboardColumn(String statname, Sign header, List signs) { this.statname = statname; this.header = header; this.signs = signs; } - + public void update(List stats) { // Make sure the stats will fit on the signs. int range = Math.min(stats.size(), signs.size()*4); - + for (int i = 0; i < range; i++) { // Grab the right sign. Sign s = signs.get(i/4); - + // Call the template method. String value = getLine(stats.get(i)); - + // And set the line s.setLine(i % 4, value); s.update(); } } - + public abstract String getLine(ArenaPlayerStatistics stats); - + public void clear() { for (Sign s : signs) { s.setLine(0, ""); @@ -45,11 +45,11 @@ public abstract class AbstractLeaderboardColumn implements LeaderboardColumn s.update(); } } - + public Sign getHeader() { return header; } - + public List getSigns() { return signs; } diff --git a/src/main/java/com/garbagemule/MobArena/leaderboards/Leaderboard.java b/src/main/java/com/garbagemule/MobArena/leaderboards/Leaderboard.java index db11331..7a15967 100644 --- a/src/main/java/com/garbagemule/MobArena/leaderboards/Leaderboard.java +++ b/src/main/java/com/garbagemule/MobArena/leaderboards/Leaderboard.java @@ -21,17 +21,17 @@ public class Leaderboard { private MobArena plugin; private Arena arena; - + private Location topLeft; private Sign topLeftSign; private BlockFace direction; private int rows, cols, trackingId; - + private List boards; private List stats; - + private boolean isValid; - + /** * Private constructor. * Creates a new leaderboard with no signs or locations or anything. @@ -45,7 +45,7 @@ public class Leaderboard this.boards = new ArrayList<>(); this.stats = new ArrayList<>(); } - + /** * Location constructor. * Used to create a leaderboard on-the-fly from the location from the SignChangeEvent. @@ -56,19 +56,19 @@ public class Leaderboard public Leaderboard(MobArena plugin, Arena arena, Location topLeft) { this(plugin, arena); - + if (topLeft == null) { return; } - + if (!(topLeft.getBlock().getState() instanceof Sign)) { plugin.getLogger().warning("The leaderboard-node for arena '" + arena.configName() + "' does not point to a sign!"); return; } - + this.topLeft = topLeft; } - + /** * Grab all adjacent signs and register the individual columns. */ @@ -77,26 +77,26 @@ public class Leaderboard if (!isGridWellFormed()) { return; } - + initializeBoards(); initializeStats(); clear(); } - + public void clear() { for (LeaderboardColumn column : boards) column.clear(); } - + public void update() { Collections.sort(stats, ArenaPlayerStatistics.waveComparator()); - + for (LeaderboardColumn column : boards) column.update(stats); } - + public void startTracking() { trackingId = plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, @@ -108,12 +108,12 @@ public class Leaderboard } }, 100, 100); } - + public void stopTracking() { plugin.getServer().getScheduler().cancelTask(trackingId); } - + /** * Check if the leaderboards grid is well-formed. * @return true, if the grid is well-formed, false otherwise. @@ -123,19 +123,19 @@ public class Leaderboard if (topLeft == null) { return false; } - + BlockState state = topLeft.getBlock().getState(); - + if (!(state instanceof Sign)) { plugin.getLogger().severe("Leaderboards for '" + arena.configName() + "' could not be established!"); return false; } - + // Grab the top left sign and set up a copy for parsing. this.topLeftSign = (Sign) state; Sign current = this.topLeftSign; - + // Calculate matrix dimensions. BlockFace direction = getRightDirection(current); if (direction == null) { @@ -144,12 +144,12 @@ public class Leaderboard this.direction = direction; this.rows = getSignCount(current, BlockFace.DOWN); this.cols = getSignCount(current, direction); - + // Require at least 2x2 to be valid if (rows <= 1 || cols <= 1) { return false; } - + // Get the left-most sign in the current row. Sign first = getAdjacentSign(current, BlockFace.DOWN); @@ -163,13 +163,13 @@ public class Leaderboard current = getAdjacentSign(current, direction); if (current == null) return false; } - + // Hop down to the next row. first = getAdjacentSign(first, BlockFace.DOWN); } return true; } - + /** * Build the leaderboards. * Requires: The grid MUST be valid! @@ -179,16 +179,16 @@ public class Leaderboard boards.clear(); Sign header = this.topLeftSign; Sign current; - + do { // Strip the sign of any colors. String name = ChatColor.stripColor(header.getLine(2)); - + // Grab the stat to track. Stats stat = Stats.getByFullName(name); if (stat == null) continue; - + // Create the list of signs List signs = new ArrayList<>(); current = header; @@ -197,10 +197,10 @@ public class Leaderboard current = getAdjacentSign(current, BlockFace.DOWN); signs.add(current); } - + // Create the column. LeaderboardColumn column = null; - + // Switch on the type of stat switch (stat) { case PLAYER_NAME: @@ -213,19 +213,19 @@ public class Leaderboard column = new IntLeaderboardColumn(stat.getShortName(), header, signs); break; } - + this.boards.add(column); } while ((header = getAdjacentSign(header, direction)) != null); } - + private void initializeStats() { stats.clear(); for (ArenaPlayer ap : arena.getArenaPlayerSet()) stats.add(ap.getStats()); } - + private int getSignCount(Sign s, BlockFace direction) { int i = 1; @@ -247,7 +247,7 @@ public class Leaderboard return i; } - + private Sign getAdjacentSign(Sign s, BlockFace direction) { BlockState state = s.getBlock().getRelative(direction).getState(); @@ -255,7 +255,7 @@ public class Leaderboard return (Sign) state; return null; } - + private BlockFace getRightDirection(Sign s) { BlockData data = s.getBlockData(); @@ -270,7 +270,7 @@ public class Leaderboard } return null; } - + public boolean isValid() { return isValid; diff --git a/src/main/java/com/garbagemule/MobArena/leaderboards/LeaderboardColumn.java b/src/main/java/com/garbagemule/MobArena/leaderboards/LeaderboardColumn.java index 61d9573..cd24067 100644 --- a/src/main/java/com/garbagemule/MobArena/leaderboards/LeaderboardColumn.java +++ b/src/main/java/com/garbagemule/MobArena/leaderboards/LeaderboardColumn.java @@ -12,7 +12,7 @@ public interface LeaderboardColumn * of the player stat associated with this column. */ void update(List stats); - + /** * Get the String representation of the stat in question. * The line is calculated by simply calling the appropriate @@ -21,19 +21,19 @@ public interface LeaderboardColumn * @return the String representation of the stat in question */ String getLine(ArenaPlayerStatistics stats); - + /** * Clear the text on all the signs in the column. */ void clear(); - + /** * Get the top sign of the column. * The top sign displays the stat name. * @return the top sign of the column */ Sign getHeader(); - + /** * Get all signs in the column (minus the header). * @return all signs in the column (minus the header) diff --git a/src/main/java/com/garbagemule/MobArena/leaderboards/Stats.java b/src/main/java/com/garbagemule/MobArena/leaderboards/Stats.java index de18724..7cb6c80 100644 --- a/src/main/java/com/garbagemule/MobArena/leaderboards/Stats.java +++ b/src/main/java/com/garbagemule/MobArena/leaderboards/Stats.java @@ -10,29 +10,29 @@ public enum Stats SWINGS("Swings", "swings"), HITS("Hits", "hits"), LAST_WAVE("Last Wave", "lastWave"); - + private String name, shortName; - + Stats(String name, String shortName) { this.name = name; this.shortName = shortName; } - + public String getShortName() { return shortName; } - + public String getFullName() { return name; } - + public static Stats getByFullName(String name) { for (Stats s : Stats.values()) if (s.name.equals(name)) return s; return null; } - + public static Stats getByShortName(String name) { for (Stats s : Stats.values()) { if (s.shortName.equalsIgnoreCase(name)) { diff --git a/src/main/java/com/garbagemule/MobArena/listeners/MAGlobalListener.java b/src/main/java/com/garbagemule/MobArena/listeners/MAGlobalListener.java index 5fb3c54..e54ae77 100644 --- a/src/main/java/com/garbagemule/MobArena/listeners/MAGlobalListener.java +++ b/src/main/java/com/garbagemule/MobArena/listeners/MAGlobalListener.java @@ -65,18 +65,18 @@ public class MAGlobalListener implements Listener { private MobArena plugin; private ArenaMaster am; - + public MAGlobalListener(MobArena plugin, ArenaMaster am) { this.plugin = plugin; this.am = am; } - + /////////////////////////////////////////////////////////////////////////// // // // BLOCK EVENTS // // // /////////////////////////////////////////////////////////////////////////// - + @EventHandler(priority = EventPriority.HIGHEST) public void blockBreak(BlockBreakEvent event) { for (Arena arena : am.getArenas()) @@ -125,15 +125,15 @@ public class MAGlobalListener implements Listener if (!event.getPlayer().hasPermission("mobarena.setup.leaderboards")) { return; } - + if (!event.getLine(0).startsWith("[MA]")) { return; } - + String text = event.getLine(0).substring((4)); Arena arena; Stats stat; - + if ((arena = am.getArenaWithName(text)) != null) { arena.getEventListener().onSignChange(event); setSignLines(event, ChatColor.GREEN + "MobArena", ChatColor.YELLOW + arena.arenaName(), ChatColor.AQUA + "Players", "---------------"); @@ -143,23 +143,23 @@ public class MAGlobalListener implements Listener am.getGlobalMessenger().tell(event.getPlayer(), "Stat sign created."); } } - + private void setSignLines(SignChangeEvent event, String s1, String s2, String s3, String s4) { event.setLine(0, s1); event.setLine(1, s2); event.setLine(2, s3); event.setLine(3, s4); } - - - + + + /////////////////////////////////////////////////////////////////////////// // // // ENTITY EVENTS // // // /////////////////////////////////////////////////////////////////////////// - - + + @EventHandler(priority = EventPriority.HIGHEST) public void creatureSpawn(CreatureSpawnEvent event) { for (Arena arena : am.getArenas()) @@ -217,7 +217,7 @@ public class MAGlobalListener implements Listener for (Arena arena : am.getArenas()) arena.getEventListener().onEntityRegainHealth(event); } - + @EventHandler(priority = EventPriority.NORMAL) public void entityFoodLevelChange(FoodLevelChangeEvent event) { for (Arena arena : am.getArenas()) @@ -229,30 +229,30 @@ public class MAGlobalListener implements Listener for (Arena arena : am.getArenas()) arena.getEventListener().onEntityTarget(event); } - + @EventHandler(priority = EventPriority.HIGH) public void entityTeleport(EntityTeleportEvent event) { for (Arena arena : am.getArenas()) { arena.getEventListener().onEntityTeleport(event); } } - + @EventHandler(priority = EventPriority.NORMAL) public void potionSplash(PotionSplashEvent event) { for (Arena arena : am.getArenas()) { arena.getEventListener().onPotionSplash(event); } } - - - + + + /////////////////////////////////////////////////////////////////////////// // // // PLAYER EVENTS // // // /////////////////////////////////////////////////////////////////////////// - - + + @EventHandler(priority = EventPriority.NORMAL) public void playerAnimation(PlayerAnimationEvent event) { if (!am.isEnabled()) return; @@ -340,7 +340,7 @@ public class MAGlobalListener implements Listener } } } - + public enum TeleportResponse { ALLOW, REJECT, IDGAF } @@ -352,7 +352,7 @@ public class MAGlobalListener implements Listener boolean allow = true; for (Arena arena : am.getArenas()) { TeleportResponse r = arena.getEventListener().onPlayerTeleport(event); - + // If just one arena allows, uncancel and stop. switch (r) { case ALLOW: @@ -375,7 +375,7 @@ public class MAGlobalListener implements Listener event.setCancelled(true); } } - + @EventHandler(priority = EventPriority.NORMAL) public void playerPreLogin(PlayerLoginEvent event) { for (Arena arena : am.getArenas()) { @@ -396,21 +396,21 @@ public class MAGlobalListener implements Listener arena.getEventListener().onVehicleExit(event); } } - - - + + + /////////////////////////////////////////////////////////////////////////// // // // WORLD EVENTS // // // /////////////////////////////////////////////////////////////////////////// - - + + @EventHandler(priority = EventPriority.NORMAL) public void worldLoadEvent(WorldLoadEvent event) { am.loadArenasInWorld(event.getWorld().getName()); } - + @EventHandler(priority = EventPriority.NORMAL) public void worldUnloadEvent(WorldUnloadEvent event) { am.unloadArenasInWorld(event.getWorld().getName()); diff --git a/src/main/java/com/garbagemule/MobArena/region/ArenaRegion.java b/src/main/java/com/garbagemule/MobArena/region/ArenaRegion.java index 8c2cc8b..1d6cd3b 100644 --- a/src/main/java/com/garbagemule/MobArena/region/ArenaRegion.java +++ b/src/main/java/com/garbagemule/MobArena/region/ArenaRegion.java @@ -32,17 +32,17 @@ public class ArenaRegion { private Arena arena; private World world; - + private Location lastP1, lastP2, lastL1, lastL2; private Location p1, p2, l1, l2, arenaWarp, lobbyWarp, specWarp, exitWarp, leaderboard; private Map spawnpoints, containers; - + private boolean setup, lobbySetup; - + private ConfigurationSection coords; private ConfigurationSection spawns; private ConfigurationSection chests; - + public ArenaRegion(ConfigurationSection section, Arena arena) { this.arena = arena; refreshWorld(); @@ -50,34 +50,34 @@ public class ArenaRegion this.coords = makeSection(section, "coords"); this.spawns = makeSection(coords, "spawnpoints"); this.chests = makeSection(coords, "containers"); - + reloadAll(); } - + public void refreshWorld() { this.world = arena.getWorld(); } - + public void reloadAll() { reloadRegion(); reloadWarps(); reloadLeaderboards(); reloadSpawnpoints(); reloadChests(); - + verifyData(); } - + public void reloadRegion() { p1 = parseLocation(coords, "p1", world); p2 = parseLocation(coords, "p2", world); //fixRegion(); - + l1 = parseLocation(coords, "l1", world); l2 = parseLocation(coords, "l2", world); //fixLobbyRegion(); } - + public void reloadWarps() { arenaWarp = parseLocation(coords, "arena", world); lobbyWarp = parseLocation(coords, "lobby", world); @@ -89,7 +89,7 @@ public class ArenaRegion throw new ConfigError("Failed to parse exit warp for arena " + arena.configName() + " because: " + e.getMessage()); } } - + public void reloadLeaderboards() { // try-catch for backwards compatibility try { @@ -101,7 +101,7 @@ public class ArenaRegion leaderboard.setWorld(world); } } - + public void reloadSpawnpoints() { spawnpoints = new HashMap<>(); Set keys = spawns.getKeys(false); @@ -111,7 +111,7 @@ public class ArenaRegion } } } - + public void reloadChests() { containers = new HashMap<>(); Set keys = chests.getKeys(false); @@ -121,7 +121,7 @@ public class ArenaRegion } } } - + public void verifyData() { setup = (p1 != null && p2 != null && @@ -129,15 +129,15 @@ public class ArenaRegion lobbyWarp != null && specWarp != null && !spawnpoints.isEmpty()); - + lobbySetup = (l1 != null && l2 != null); } - + public void checkData(MobArena plugin, CommandSender s, boolean ready, boolean region, boolean warps, boolean spawns) { // Verify data first verifyData(); - + // Prepare the list List list = new ArrayList<>(); @@ -150,7 +150,7 @@ public class ArenaRegion list.clear(); } } - + // Warps if (warps) { if (arenaWarp == null) list.add("arena"); @@ -161,82 +161,82 @@ public class ArenaRegion list.clear(); } } - + // Spawnpoints if (spawns) { if (spawnpoints.isEmpty()) { arena.getGlobalMessenger().tell(s, "Missing spawnpoints"); } } - + // Ready? if (ready && setup) { arena.getGlobalMessenger().tell(s, "Arena is ready to be used!"); } } - + public boolean isDefined() { return (p1 != null && p2 != null); } - + public boolean isLobbyDefined() { return (l1 != null && l2 != null); } - + public boolean isSetup() { return setup; } - + public boolean isLobbySetup() { return lobbySetup; } - + public boolean isWarp(Location l) { return (l.equals(arenaWarp) || l.equals(lobbyWarp) || l.equals(specWarp) || l.equals(exitWarp)); } - + public boolean contains(Location l) { if (!l.getWorld().getName().equals(world.getName()) || !isDefined()) { return false; } - + int x = l.getBlockX(); int y = l.getBlockY(); int z = l.getBlockZ(); - + // Check the lobby first. if (lobbySetup) { - if ((x >= l1.getBlockX() && x <= l2.getBlockX()) && - (z >= l1.getBlockZ() && z <= l2.getBlockZ()) && + if ((x >= l1.getBlockX() && x <= l2.getBlockX()) && + (z >= l1.getBlockZ() && z <= l2.getBlockZ()) && (y >= l1.getBlockY() && y <= l2.getBlockY())) return true; } - + // Returns false if the location is outside of the region. - return ((x >= p1.getBlockX() && x <= p2.getBlockX()) && - (z >= p1.getBlockZ() && z <= p2.getBlockZ()) && + return ((x >= p1.getBlockX() && x <= p2.getBlockX()) && + (z >= p1.getBlockZ() && z <= p2.getBlockZ()) && (y >= p1.getBlockY() && y <= p2.getBlockY())); } - + public boolean contains(Location l, int radius) { if (!l.getWorld().getName().equals(world.getName()) || !isDefined()) { return false; } - + int x = l.getBlockX(); int y = l.getBlockY(); int z = l.getBlockZ(); - + if (lobbySetup) { - if ((x + radius >= l1.getBlockX() && x - radius <= l2.getBlockX()) && - (z + radius >= l1.getBlockZ() && z - radius <= l2.getBlockZ()) && + if ((x + radius >= l1.getBlockX() && x - radius <= l2.getBlockX()) && + (z + radius >= l1.getBlockZ() && z - radius <= l2.getBlockZ()) && (y + radius >= l1.getBlockY() && y - radius <= l2.getBlockY())) return true; } - + return ((x + radius >= p1.getBlockX() && x - radius <= p2.getBlockX()) && (z + radius >= p1.getBlockZ() && z - radius <= p2.getBlockZ()) && (y + radius >= p1.getBlockY() && y - radius <= p2.getBlockY())); @@ -263,33 +263,33 @@ public class ArenaRegion int z = p2.getBlockZ(); setSaveReload(coords, "p2", p2.getWorld(), x ,y ,z); } - + public void expandDown(int amount) { int x = p1.getBlockX(); int y = Math.max(0, p1.getBlockY() - amount); int z = p1.getBlockZ(); setSaveReload(coords, "p1", p1.getWorld(), x ,y ,z); } - + public void expandP1(int dx, int dz) { int x = p1.getBlockX() - dx; int y = p1.getBlockY(); int z = p1.getBlockZ() - dz; setSaveReload(coords, "p1", p1.getWorld(), x ,y ,z); } - + public void expandP2(int dx, int dz) { int x = p2.getBlockX() + dx; int y = p2.getBlockY(); int z = p2.getBlockZ() + dz; setSaveReload(coords, "p2", p2.getWorld(), x ,y ,z); } - + public void expandOut(int amount) { expandP1(amount, amount); expandP2(amount, amount); } - + // Lobby expand public void expandLobbyUp(int amount) { int x = l2.getBlockX(); @@ -297,28 +297,28 @@ public class ArenaRegion int z = l2.getBlockZ(); setSaveReload(coords, "l2", l2.getWorld(), x ,y ,z); } - + public void expandLobbyDown(int amount) { int x = l1.getBlockX(); int y = Math.max(0, l1.getBlockY() - amount); int z = l1.getBlockZ(); setSaveReload(coords, "l1", l1.getWorld(), x ,y ,z); } - + public void expandL1(int dx, int dz) { int x = l1.getBlockX() - dx; int y = l1.getBlockY(); int z = l1.getBlockZ() - dz; setSaveReload(coords, "l1", l1.getWorld(), x ,y ,z); } - + public void expandL2(int dx, int dz) { int x = l2.getBlockX() + dx; int y = l2.getBlockY(); int z = l2.getBlockZ() + dz; setSaveReload(coords, "l2", l2.getWorld(), x ,y ,z); } - + public void expandLobbyOut(int amount) { expandL1(amount, amount); expandL2(amount, amount); @@ -330,19 +330,19 @@ public class ArenaRegion save(); reloadRegion(); } - + public void fixRegion() { fix("p1", "p2"); } - + public void fixLobbyRegion() { fix("l1", "l2"); } - + private void fix(String location1, String location2) { Location loc1 = parseLocation(coords, location1, world); Location loc2 = parseLocation(coords, location2, world); - + if (loc1 == null || loc2 == null) { return; } @@ -355,21 +355,21 @@ public class ArenaRegion loc2.setX(tmp); modified = true; } - + if (loc1.getZ() > loc2.getZ()) { double tmp = loc1.getZ(); loc1.setZ(loc2.getZ()); loc2.setZ(tmp); modified = true; } - + if (loc1.getY() > loc2.getY()) { double tmp = loc1.getY(); loc1.setY(loc2.getY()); loc2.setY(tmp); modified = true; } - + if (!arena.getWorld().getName().equals(world.getName())) { arena.setWorld(world); modified = true; @@ -378,39 +378,39 @@ public class ArenaRegion if (!modified) { return; } - + setLocation(coords, location1, loc1); setLocation(coords, location2, loc2); save(); } - + public List getChunks() { List result = new ArrayList<>(); - + if (p1 == null || p2 == null) { return result; } - + Chunk c1 = world.getChunkAt(p1); Chunk c2 = world.getChunkAt(p2); - + for (int i = c1.getX(); i <= c2.getX(); i++) { for (int j = c1.getZ(); j <= c2.getZ(); j++) { result.add(world.getChunkAt(i,j)); } } - + return result; } - + public Location getArenaWarp() { return arenaWarp; } - + public Location getLobbyWarp() { return lobbyWarp; } - + public Location getSpecWarp() { return specWarp; } @@ -418,27 +418,27 @@ public class ArenaRegion public Location getExitWarp() { return exitWarp; } - + public Location getSpawnpoint(String name) { return spawnpoints.get(name); } - + public Collection getSpawnpoints() { return spawnpoints.values(); } - + public List getSpawnpointList() { return new ArrayList<>(spawnpoints.values()); } - + public Collection getContainers() { return containers.values(); } - + public Location getLeaderboard() { return leaderboard; } - + public void set(RegionPoint point, Location loc) { // Act based on the point switch (point) { @@ -452,10 +452,10 @@ public class ArenaRegion case SPECTATOR: setWarp(point, loc); return; case LEADERBOARD: setLeaderboard(loc); return; } - + throw new IllegalArgumentException("Invalid region point!"); } - + private void setPoint(RegionPoint point, Location l) { // Lower and upper locations RegionPoint r1, r2; @@ -468,7 +468,7 @@ public class ArenaRegion * location for the given point. These location references are only * ever overwritten when using the set commands, and remain fully * decoupled from the 'fixed' points. - * + * * Effectively, the config-file and region store 'fixed' locations * that allow fast membership tests, but the region also stores the * 'unfixed' locations for a more intuitive setup process. @@ -502,7 +502,7 @@ public class ArenaRegion lower = upper = null; r1 = r2 = null; } - + // Min-max if both locations are non-null if (lower != null && upper != null) { double tmp; @@ -522,98 +522,98 @@ public class ArenaRegion upper.setZ(tmp); } } - + // Set the coords and save if (lower != null) setLocation(coords, r1.name().toLowerCase(), lower); if (upper != null) setLocation(coords, r2.name().toLowerCase(), upper); save(); - + // Reload regions and verify data reloadRegion(); verifyData(); } - + public void set(String point, Location loc) { // Get the region point enum RegionPoint rp = Enums.getEnumFromString(RegionPoint.class, point); if (rp == null) throw new IllegalArgumentException("Invalid region point '" + point + "'"); - + // Then delegate set(rp, loc); } - + public void setWarp(RegionPoint point, Location l) { // Set the point and save setLocation(coords, point.toString(), l); save(); - + // Then reload warps reloadWarps(); } - + public void setLeaderboard(Location l) { // Set the point and save setLocation(coords, "leaderboard", l); save(); - + // Then reload the leaderboards reloadLeaderboards(); } - + public void addSpawn(String name, Location loc) { // Add the spawn and save setLocation(spawns, name, loc); save(); - + // Reload spawnpoints and verify data reloadSpawnpoints(); verifyData(); } - + public boolean removeSpawn(String name) { // Check if the spawnpoint exists if (spawns.getString(name) == null) { return false; } - + // Null the spawnpoint and save setLocation(spawns, name, null); save(); - + // Reload spawnpoints and verify data reloadSpawnpoints(); verifyData(); return true; } - + public void addChest(String name, Location loc) { // Add the chest location and save setLocation(chests, name, loc); save(); - + // Reload the chests reloadChests(); } - + public boolean removeChest(String name) { // Check if the chest exists if (chests.getString(name) == null) { return false; } - + // Null the chest and save setLocation(chests, name, null); save(); - + // Reload the chests reloadChests(); return true; } - + public void save() { arena.getPlugin().saveConfig(); } - + public void showRegion(Player p) { if (!isDefined()) { return; diff --git a/src/main/java/com/garbagemule/MobArena/repairable/Repairable.java b/src/main/java/com/garbagemule/MobArena/repairable/Repairable.java index 76eb918..86f9dfb 100644 --- a/src/main/java/com/garbagemule/MobArena/repairable/Repairable.java +++ b/src/main/java/com/garbagemule/MobArena/repairable/Repairable.java @@ -10,10 +10,10 @@ public interface Repairable void repair(); BlockState getState(); - + Material getType(); BlockData getData(); - + World getWorld(); int getX(); int getY(); diff --git a/src/main/java/com/garbagemule/MobArena/repairable/RepairableAttachable.java b/src/main/java/com/garbagemule/MobArena/repairable/RepairableAttachable.java index f77449c..67453c9 100644 --- a/src/main/java/com/garbagemule/MobArena/repairable/RepairableAttachable.java +++ b/src/main/java/com/garbagemule/MobArena/repairable/RepairableAttachable.java @@ -9,21 +9,21 @@ import org.bukkit.material.Attachable; public class RepairableAttachable extends RepairableBlock { private int x, y, z; - + public RepairableAttachable(BlockState state) { super(state); - + BlockState attached; if (state.getData() instanceof Attachable) attached = state.getBlock().getRelative(((Attachable) state.getData()).getAttachedFace()).getState(); else attached = state.getBlock().getRelative(BlockFace.DOWN).getState(); - + x = attached.getX(); y = attached.getY(); z = attached.getZ(); - + state.getBlock().setType(Material.STONE); } @@ -32,7 +32,7 @@ public class RepairableAttachable extends RepairableBlock Block b = getWorld().getBlockAt(x,y,z); if (b.getType() == Material.AIR) b.setType(Material.STONE); - + super.repair(); } } diff --git a/src/main/java/com/garbagemule/MobArena/repairable/RepairableBed.java b/src/main/java/com/garbagemule/MobArena/repairable/RepairableBed.java index 70249c6..e603be7 100644 --- a/src/main/java/com/garbagemule/MobArena/repairable/RepairableBed.java +++ b/src/main/java/com/garbagemule/MobArena/repairable/RepairableBed.java @@ -6,18 +6,18 @@ import org.bukkit.material.Bed; public class RepairableBed extends RepairableBlock { private BlockState other; - + public RepairableBed(BlockState state) { - super(state); + super(state); other = state.getBlock().getRelative(((Bed) state.getData()).getFacing()).getState(); } - + public void repair() { if (getWorld().getBlockAt(getX(), getY(), getZ()).getState().getData() instanceof Bed) return; - + super.repair(); other.getBlock().setBlockData(other.getBlockData()); } diff --git a/src/main/java/com/garbagemule/MobArena/repairable/RepairableBlock.java b/src/main/java/com/garbagemule/MobArena/repairable/RepairableBlock.java index 467d4f7..1fcca3a 100644 --- a/src/main/java/com/garbagemule/MobArena/repairable/RepairableBlock.java +++ b/src/main/java/com/garbagemule/MobArena/repairable/RepairableBlock.java @@ -12,21 +12,21 @@ public class RepairableBlock implements Repairable private BlockData data; private int x, y, z; private Material type; - + public RepairableBlock(BlockState state) { this.state = state; - + world = state.getWorld(); - + x = state.getX(); y = state.getY(); z = state.getZ(); - + data = state.getBlockData(); type = state.getType(); } - + /** * Repairs the block by setting the type and data */ @@ -39,32 +39,32 @@ public class RepairableBlock implements Repairable { return state; } - + public World getWorld() { return world; } - + public Material getType() { return type; } - + public BlockData getData() { return data; } - + public int getX() { return x; } - + public int getY() { return y; } - + public int getZ() { return z; diff --git a/src/main/java/com/garbagemule/MobArena/repairable/RepairableComparator.java b/src/main/java/com/garbagemule/MobArena/repairable/RepairableComparator.java index 22b0473..7a7bd25 100644 --- a/src/main/java/com/garbagemule/MobArena/repairable/RepairableComparator.java +++ b/src/main/java/com/garbagemule/MobArena/repairable/RepairableComparator.java @@ -10,7 +10,7 @@ import org.bukkit.block.data.type.RedstoneWire; import java.util.Comparator; public class RepairableComparator implements Comparator -{ +{ public int compare(Repairable r1, Repairable r2) { if (restoreLast(r1)) @@ -21,15 +21,15 @@ public class RepairableComparator implements Comparator } else if (restoreLast(r2)) return -1; - + return 0; } - + private boolean restoreLast(Repairable r) { Material t = r.getType(); BlockData data = r.getData(); - + return (data instanceof Attachable || data instanceof RedstoneWire || data instanceof Door || data instanceof Bed || t == Material.LAVA || t == Material.WATER || t == Material.FIRE); } } diff --git a/src/main/java/com/garbagemule/MobArena/repairable/RepairableContainer.java b/src/main/java/com/garbagemule/MobArena/repairable/RepairableContainer.java index ef8926d..81cb10f 100644 --- a/src/main/java/com/garbagemule/MobArena/repairable/RepairableContainer.java +++ b/src/main/java/com/garbagemule/MobArena/repairable/RepairableContainer.java @@ -8,7 +8,7 @@ import org.bukkit.inventory.ItemStack; public class RepairableContainer extends RepairableBlock { private ItemStack[] contents; - + public RepairableContainer(BlockState state, boolean clear) { super(state); @@ -21,21 +21,21 @@ public class RepairableContainer extends RepairableBlock for (int i = 0; i < contents.length; i++) { contents[i] = (stacks[i] != null) ? stacks[i].clone() : null; } - + // Clear the inventory if prompted if (clear) inv.clear(); } - + public RepairableContainer(BlockState state) { this(state, true); } - + /** * Repairs the container block by adding all the contents back in. */ public void repair() { super.repair(); - + // Grab the inventory InventoryHolder cb = (InventoryHolder) getWorld().getBlockAt(getX(),getY(),getZ()).getState(); Inventory chestInv = cb.getInventory(); diff --git a/src/main/java/com/garbagemule/MobArena/repairable/RepairableDoor.java b/src/main/java/com/garbagemule/MobArena/repairable/RepairableDoor.java index f27cb99..c90864e 100644 --- a/src/main/java/com/garbagemule/MobArena/repairable/RepairableDoor.java +++ b/src/main/java/com/garbagemule/MobArena/repairable/RepairableDoor.java @@ -10,18 +10,18 @@ public class RepairableDoor extends RepairableAttachable//RepairableBlock { private BlockState other; private int x, y, z; - + public RepairableDoor(BlockState state) { - super(state); + super(state); other = state.getBlock().getRelative(BlockFace.UP).getState(); - + BlockState attached = state.getBlock().getRelative(BlockFace.DOWN).getState(); x = attached.getX(); y = attached.getY(); z = attached.getZ(); } - + public void repair() { if (getWorld().getBlockAt(getX(), getY(), getZ()).getState().getData() instanceof Door) @@ -30,7 +30,7 @@ public class RepairableDoor extends RepairableAttachable//RepairableBlock Block b = getWorld().getBlockAt(x,y,z); if (b.getType() == Material.AIR) b.setType(Material.STONE); - + super.repair(); other.getBlock().setBlockData(other.getBlockData()); } diff --git a/src/main/java/com/garbagemule/MobArena/repairable/RepairableSign.java b/src/main/java/com/garbagemule/MobArena/repairable/RepairableSign.java index 87ef956..44c7af9 100644 --- a/src/main/java/com/garbagemule/MobArena/repairable/RepairableSign.java +++ b/src/main/java/com/garbagemule/MobArena/repairable/RepairableSign.java @@ -6,11 +6,11 @@ import org.bukkit.block.Sign; public class RepairableSign extends RepairableAttachable { private String[] lines = new String[4]; - + public RepairableSign(BlockState state) { super(state); - + Sign s = (Sign) state; lines = s.getLines(); } @@ -21,7 +21,7 @@ public class RepairableSign extends RepairableAttachable public void repair() { super.repair(); - + Sign s = (Sign) getWorld().getBlockAt(getX(),getY(),getZ()).getState(); s.setLine(0, lines[0]); s.setLine(1, lines[1]); diff --git a/src/main/java/com/garbagemule/MobArena/time/Time.java b/src/main/java/com/garbagemule/MobArena/time/Time.java index 3b96836..2b430a0 100644 --- a/src/main/java/com/garbagemule/MobArena/time/Time.java +++ b/src/main/java/com/garbagemule/MobArena/time/Time.java @@ -14,14 +14,14 @@ public enum Time DUSK(13300), NIGHT(14000), MIDNIGHT(18000); - + private int time; - + Time(int time) { this.time = time; } - + public int getTime() { return time; } -} \ No newline at end of file +} diff --git a/src/main/java/com/garbagemule/MobArena/util/EntityPosition.java b/src/main/java/com/garbagemule/MobArena/util/EntityPosition.java index 71e920d..c484975 100644 --- a/src/main/java/com/garbagemule/MobArena/util/EntityPosition.java +++ b/src/main/java/com/garbagemule/MobArena/util/EntityPosition.java @@ -26,7 +26,7 @@ public class EntityPosition implements Serializable{ this.yaw = yaw; this.pitch = pitch; } - + public EntityPosition(Location location) { this.x = location.getX(); this.y = location.getY(); @@ -35,7 +35,7 @@ public class EntityPosition implements Serializable{ this.yaw = location.getYaw(); this.pitch = location.getPitch(); } - + public Location getLocation(World world) { return new Location(world, x, y, z, yaw, pitch); } @@ -87,4 +87,4 @@ public class EntityPosition implements Serializable{ public void setZ(double z) { this.z = z; } -} \ No newline at end of file +} diff --git a/src/main/java/com/garbagemule/MobArena/util/Enums.java b/src/main/java/com/garbagemule/MobArena/util/Enums.java index d3904c9..f966456 100644 --- a/src/main/java/com/garbagemule/MobArena/util/Enums.java +++ b/src/main/java/com/garbagemule/MobArena/util/Enums.java @@ -14,7 +14,7 @@ public class Enums } return null; } - + /** * Get the enum value of a string, null if it doesn't exist. */ diff --git a/src/main/java/com/garbagemule/MobArena/util/ItemParser.java b/src/main/java/com/garbagemule/MobArena/util/ItemParser.java index f89b82c..5de727b 100644 --- a/src/main/java/com/garbagemule/MobArena/util/ItemParser.java +++ b/src/main/java/com/garbagemule/MobArena/util/ItemParser.java @@ -20,20 +20,20 @@ public class ItemParser if (s == null) { return new ArrayList<>(1); } - + String[] items = s.split(","); List result = new ArrayList<>(items.length); - + for (String item : items) { ItemStack stack = parseItem(item.trim()); if (stack != null) { result.add(stack); } } - + return result; } - + public static ItemStack parseItem(String item) { return parseItem(item, true); } @@ -41,13 +41,13 @@ public class ItemParser public static ItemStack parseItem(String item, boolean logFailure) { if (item == null || item.equals("")) return null; - + // Check if the item has enchantments. String[] space = item.split(" "); String[] parts = (space.length == 2 ? space[0].split(":") : item.split(":")); - + ItemStack result = null; - + switch (parts.length) { case 1: result = singleItem(parts[0]); @@ -72,19 +72,19 @@ public class ItemParser return result; } - + private static ItemStack singleItem(String item) { return getType(item) .map(ItemStack::new) .orElse(null); } - + private static ItemStack withAmount(String item, String amount) { return getType(item) .map(type -> new ItemStack(type, getAmount(amount))) .orElse(null); } - + private static ItemStack withDataAndAmount(String item, String data, String amount) { ItemStack stack = withAmount(item, amount); if (stack == null) { @@ -98,7 +98,7 @@ public class ItemParser return stack; } - + private static ItemStack withPotionMeta(ItemStack stack, String data) { PotionType type; boolean extended = false; @@ -127,23 +127,23 @@ public class ItemParser private static Optional getType(String item) { return Optional.ofNullable(Material.getMaterial(item.toUpperCase())); } - + private static int getAmount(String amount) { if (amount.matches("(-)?[1-9][0-9]*")) { return Integer.parseInt(amount); } - + return 1; } - + private static void addEnchantments(ItemStack stack, String list) { String[] parts = list.split(";"); - + for (String ench : parts) { addEnchantment(stack, ench.trim()); } } - + private static void addEnchantment(ItemStack stack, String ench) { String[] parts = ench.split(":"); if (parts.length != 2) { diff --git a/src/main/java/com/garbagemule/MobArena/util/MutableInt.java b/src/main/java/com/garbagemule/MobArena/util/MutableInt.java index a831429..49996fe 100644 --- a/src/main/java/com/garbagemule/MobArena/util/MutableInt.java +++ b/src/main/java/com/garbagemule/MobArena/util/MutableInt.java @@ -3,7 +3,7 @@ package com.garbagemule.MobArena.util; public class MutableInt { private int value; - + /** * Create a new MutableInt with the given value. * @param value the initial value of the MutableInt @@ -11,14 +11,14 @@ public class MutableInt public MutableInt(int value) { this.value = value; } - + /** * Create a new MutableInt with value 0. */ public MutableInt() { this(0); } - + /** * Add the given amount to the internal int value. * @param amount the amount to add @@ -26,7 +26,7 @@ public class MutableInt public void add(double amount) { this.value += amount; } - + /** * Subtract the given amount from the internal int value. * @param amount the amount to subtract @@ -34,7 +34,7 @@ public class MutableInt public void sub(int amount) { this.value -= amount; } - + /** * Increment the value and return it. * This is essentially the same as calling add(1), followed by value(). @@ -43,7 +43,7 @@ public class MutableInt public int inc() { return ++this.value; } - + /** * Decrement the value and return it. * This is essentially the same as calling sub(1), followed by value(). @@ -52,7 +52,7 @@ public class MutableInt public int dec() { return --this.value; } - + /** * The value of the MutableInt. * @return the current value @@ -60,7 +60,7 @@ public class MutableInt public int value() { return value; } - + @Override public String toString() { return "" + value; diff --git a/src/main/java/com/garbagemule/MobArena/util/PotionEffectParser.java b/src/main/java/com/garbagemule/MobArena/util/PotionEffectParser.java index f5267fc..8e00552 100644 --- a/src/main/java/com/garbagemule/MobArena/util/PotionEffectParser.java +++ b/src/main/java/com/garbagemule/MobArena/util/PotionEffectParser.java @@ -12,11 +12,11 @@ public class PotionEffectParser private static final int TICKS_PER_SECOND = 20; private static final int DEFAULT_POTION_AMPLIFIER = 0; private static final int DEFAULT_POTION_DURATION = Integer.MAX_VALUE; - + public static List parsePotionEffects(String s) { if (s == null || s.isEmpty()) return null; - + List potions = new ArrayList<>(); for (String potion : s.split(",")) { PotionEffect eff = parsePotionEffect(potion.trim()); @@ -24,21 +24,21 @@ public class PotionEffectParser potions.add(eff); } } - + return potions; } - + public static PotionEffect parsePotionEffect(String p) { return parsePotionEffect(p, true); } - + public static PotionEffect parsePotionEffect(String p, boolean logFailure) { if (p == null || p.isEmpty()) return null; - + String[] parts = p.split(":"); PotionEffect result = null; - + switch (parts.length) { case 1: result = parseSingle(parts[0]); @@ -50,67 +50,67 @@ public class PotionEffectParser result = withAmplifierAndDuration(parts[0], parts[1], parts[2]); break; } - + if (result == null) { if (logFailure) { Bukkit.getLogger().warning("[MobArena] Failed to parse potion effect: " + p); } return null; } - + return result; } - + private static PotionEffect parseSingle(String type) { PotionEffectType effect = PotionEffectType.getByName(type); - + if (effect == null) { return null; } else { return new PotionEffect(effect, DEFAULT_POTION_DURATION, DEFAULT_POTION_AMPLIFIER); } } - + private static PotionEffect withAmplifier(String type, String amplifier) { PotionEffectType effect = PotionEffectType.getByName(type); int amp = getAmplification(amplifier); - + if (effect == null || amp == -1) { return null; } else { return new PotionEffect(effect, DEFAULT_POTION_DURATION, amp); } } - + private static PotionEffect withAmplifierAndDuration(String type, String amplifier, String duration) { PotionEffectType effect = PotionEffectType.getByName(type); int amp = getAmplification(amplifier); int dur = getDuration(duration); - + if (effect == null || dur == -1 || amp == -1) { return null; } else { return new PotionEffect(effect, dur * TICKS_PER_SECOND, amp); } } - + private static int getDuration(String duration) { int dur = -1; - + if (duration.matches("[0-9]+")) { dur = Integer.parseInt(duration); } - + return dur; } - + private static int getAmplification(String amplifier) { int amp = -1; - + if (amplifier.matches("[0-9]+")) { amp = Integer.parseInt(amplifier); } - + return amp; } } diff --git a/src/main/java/com/garbagemule/MobArena/util/TextUtils.java b/src/main/java/com/garbagemule/MobArena/util/TextUtils.java index 4f3e0b3..ef768dd 100644 --- a/src/main/java/com/garbagemule/MobArena/util/TextUtils.java +++ b/src/main/java/com/garbagemule/MobArena/util/TextUtils.java @@ -44,7 +44,7 @@ public class TextUtils public static String padLeft(String s, int length) { return padLeft(s, length, ' '); } public static String padLeft(int s, int length) { return padLeft(Integer.toString(s), length, ' '); } public static String padLeft(double s, int length) { return padLeft(Double.toString(s), length, ' '); } - + /** * Truncate the input string to be at most the input length * @param s The string to truncate @@ -58,32 +58,32 @@ public class TextUtils return s.substring(0, length); } public static String truncate(String s) { return truncate(s, 15); } - + public static String camelCase(String s) { if (s == null || s.length() < 2) return null; - + String firstLetter = s.substring(0,1).toUpperCase(); return firstLetter + s.substring(1).toLowerCase(); } - + public static String playerListToString(Collection list) { if (list.isEmpty()) { return Msg.MISC_NONE.toString(); } - + StringBuffer buffy = new StringBuffer(); for (Player p : list) { buffy.append(", " + p.getName()); } return buffy.substring(2); } - + public static String listToString(Collection list) { if (list.isEmpty()) { return Msg.MISC_NONE.toString(); } - + StringBuffer buffy = new StringBuffer(); for (Object o : list) { buffy.append(", " + o.toString()); diff --git a/src/main/java/com/garbagemule/MobArena/util/TimeUtils.java b/src/main/java/com/garbagemule/MobArena/util/TimeUtils.java index cfe5c65..fb97e6d 100644 --- a/src/main/java/com/garbagemule/MobArena/util/TimeUtils.java +++ b/src/main/java/com/garbagemule/MobArena/util/TimeUtils.java @@ -17,22 +17,22 @@ public class TimeUtils long mins = total % 3600 / 60; long hours = total / 3600 % 24; long days = total / 3600 / 24; - String time = (days > 0 ? days + ":" : "") + + String time = (days > 0 ? days + ":" : "") + (hours < 10 ? "0" + hours : hours) + ":" + (mins < 10 ? "0" + mins : mins) + ":" + (secs < 10 ? "0" + secs : secs); return time; } - + /** - * Makes a new java.util.Date with the input long and toString()s it. + * Makes a new java.util.Date with the input long and toString()s it. * @param ms time in milliseconds * @return java.util.Date toString() of the input long */ public static String toDateTime(long ms) { return new Date(ms).toString(); } - + /** * Adds two string-representations of time and returns the resulting time. * @param t1 a time-string @@ -42,7 +42,7 @@ public class TimeUtils public static String addTimes(String t1, String t2) { String[] parts1 = t1.split(":"); String[] parts2 = t2.split(":"); - + long secs1 = extractSeconds(parts1); long secs2 = extractSeconds(parts2); @@ -54,12 +54,12 @@ public class TimeUtils long days1 = extractDays(parts1); long days2 = extractDays(parts2); - + long time = (secs1 + secs2 + mins1 + mins2 + hours1 + hours2 + days1 + days2) * 1000; - + return toTime(time); } - + private static long extractSeconds(String[] parts) { int length = parts.length; if (length < 1) { @@ -67,7 +67,7 @@ public class TimeUtils } return Long.parseLong(parts[length - 1]); } - + private static long extractMinutes(String[] parts) { int length = parts.length; if (length < 2) { @@ -75,7 +75,7 @@ public class TimeUtils } return Long.parseLong(parts[length - 2]) * 60; } - + private static long extractHours(String[] parts) { int length = parts.length; if (length < 3) { @@ -83,7 +83,7 @@ public class TimeUtils } return Long.parseLong(parts[length - 3]) * 3600; } - + private static long extractDays(String[] parts) { int length = parts.length; if (length < 4) { diff --git a/src/main/java/com/garbagemule/MobArena/util/inventory/InventoryManager.java b/src/main/java/com/garbagemule/MobArena/util/inventory/InventoryManager.java index 317ddbc..b856771 100644 --- a/src/main/java/com/garbagemule/MobArena/util/inventory/InventoryManager.java +++ b/src/main/java/com/garbagemule/MobArena/util/inventory/InventoryManager.java @@ -17,15 +17,15 @@ import java.util.logging.Level; public class InventoryManager { private Map inventories; - + public InventoryManager() { this.inventories = new HashMap<>(); } - + public void put(Player p, ItemStack[] contents) { inventories.put(p, contents); } - + public void equip(Player p) { ItemStack[] contents = inventories.get(p); if (contents == null) { @@ -37,7 +37,7 @@ public class InventoryManager public void remove(Player p) { inventories.remove(p); } - + /** * Clear a player's inventory completely. * @param p a player @@ -59,11 +59,11 @@ public class InventoryManager } } } - + public static boolean hasEmptyInventory(Player p) { ItemStack[] inventory = p.getInventory().getContents(); ItemStack[] armor = p.getInventory().getArmorContents(); - + // Check for null or id 0, or AIR for (ItemStack stack : inventory) { if (stack != null && stack.getType() != Material.AIR) @@ -74,10 +74,10 @@ public class InventoryManager if (stack != null && stack.getType() != Material.AIR) return false; } - + return true; } - + public static boolean restoreFromFile(MobArena plugin, Player p) { try { File inventories = new File(plugin.getDataFolder(), "inventories"); @@ -89,10 +89,10 @@ public class InventoryManager YamlConfiguration config = new YamlConfiguration(); config.load(file); - + ItemStack[] contents = config.getList("contents").toArray(new ItemStack[0]); p.getInventory().setContents(contents); - + file.delete(); return true; } catch (Exception e) { diff --git a/src/main/java/com/garbagemule/MobArena/waves/AbstractWave.java b/src/main/java/com/garbagemule/MobArena/waves/AbstractWave.java index d84c4a6..26079a6 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/AbstractWave.java +++ b/src/main/java/com/garbagemule/MobArena/waves/AbstractWave.java @@ -13,17 +13,17 @@ import java.util.Map; public abstract class AbstractWave implements Wave { private String name; - + private WaveBranch branch; // recurrent, single private WaveType type; // default, special, swarm, boss - + private double healthMultiplier, amountMultiplier; - + private int firstWave, frequency, priority; - + private List spawnpoints; private List effects; - + public AbstractWave() { this.effects = new ArrayList<>(); } @@ -39,12 +39,12 @@ public abstract class AbstractWave implements Wave protected List getSpawnpoints() { return spawnpoints; } - + @Override public void setSpawnpoints(List spawnpoints) { this.spawnpoints = spawnpoints; } - + @Override public List getEffects() { return effects; @@ -64,7 +64,7 @@ public abstract class AbstractWave implements Wave public String getName() { return name; } - + @Override public void setName(String name) { this.name = name; @@ -84,7 +84,7 @@ public abstract class AbstractWave implements Wave public WaveType getType() { return type; } - + @Override public void setType(WaveType type) { this.type = type; @@ -124,7 +124,7 @@ public abstract class AbstractWave implements Wave public double getHealthMultiplier() { return healthMultiplier; } - + @Override public void setHealthMultiplier(double healthMultiplier) { this.healthMultiplier = healthMultiplier; @@ -134,7 +134,7 @@ public abstract class AbstractWave implements Wave public double getAmountMultiplier() { return amountMultiplier; } - + @Override public void setAmountMultiplier(double amountMultiplier) { this.amountMultiplier = amountMultiplier; diff --git a/src/main/java/com/garbagemule/MobArena/waves/BossAbilityThread.java b/src/main/java/com/garbagemule/MobArena/waves/BossAbilityThread.java index 185c8ed..0393a9e 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/BossAbilityThread.java +++ b/src/main/java/com/garbagemule/MobArena/waves/BossAbilityThread.java @@ -13,26 +13,26 @@ public class BossAbilityThread implements Runnable private List abilities; private Arena arena; private int counter; - + public BossAbilityThread(BossWave wave, List abilities, Arena arena) { this.wave = wave; this.abilities = abilities; this.arena = arena; this.counter = 0; } - + @Override public void run() { // If we have no abilities, we can't execute any, so just quit. if (abilities.isEmpty()) { return; } - + // If the arena isn't running or has no players, quit. if (!arena.isRunning() || arena.getPlayersInArena().isEmpty()) { return; } - + // If all bosses are dead, quit. Set bosses = wave.getMABosses(); if (bosses.isEmpty()) { @@ -41,16 +41,16 @@ public class BossAbilityThread implements Runnable for (MABoss boss : bosses) { if (boss.isDead()) return; } - + // Get the next ability in the list. Ability ability = abilities.get(counter++ % abilities.size()); - + // And make each boss in this boss wave use it! for (MABoss boss : bosses) { wave.announceAbility(ability, boss, arena); ability.execute(arena, boss); } - + // Schedule for another run! arena.scheduleTask(this, wave.getAbilityInterval()); } diff --git a/src/main/java/com/garbagemule/MobArena/waves/MABoss.java b/src/main/java/com/garbagemule/MobArena/waves/MABoss.java index 3df3060..a870718 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/MABoss.java +++ b/src/main/java/com/garbagemule/MobArena/waves/MABoss.java @@ -16,7 +16,7 @@ public class MABoss private Thing reward; private List drops; private HealthBar healthbar; - + /** * Create an MABoss from the given entity with the given max health. * @param entity an entity @@ -34,7 +34,7 @@ public class MABoss this.entity = entity; this.dead = false; } - + /** * Get the LivingEntity associated with this MABoss * @return a LivingEntity @@ -42,7 +42,7 @@ public class MABoss public LivingEntity getEntity() { return entity; } - + /** * Get the current health of this MABoss * @return the current health of the boss @@ -50,7 +50,7 @@ public class MABoss public double getHealth() { return entity.getHealth(); } - + /** * Get the maximum health of this MABoss * @return the maximum health of the boss @@ -58,7 +58,7 @@ public class MABoss public double getMaxHealth() { return entity.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue(); } - + /** * Check if the boss is dead. * A boss is dead if it has been damaged such that its health is below 0. @@ -67,7 +67,7 @@ public class MABoss public boolean isDead() { return dead; } - + /** * Set the death status of a boss. * This is used by the ArenaListener to force kill bosses that die due to @@ -78,7 +78,7 @@ public class MABoss this.dead = dead; healthbar.removeAll(); } - + public void setReward(Thing reward) { this.reward = reward; } diff --git a/src/main/java/com/garbagemule/MobArena/waves/MACreature.java b/src/main/java/com/garbagemule/MobArena/waves/MACreature.java index bb9f8cb..e9afdc6 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/MACreature.java +++ b/src/main/java/com/garbagemule/MobArena/waves/MACreature.java @@ -101,7 +101,7 @@ public class MACreature public MACreature(String name, EntityType type) { this(name, name + "s", type); } - + private MACreature(EntityType type) { this( type.name().toLowerCase().replaceAll("[-_\\.]", ""), @@ -122,11 +122,11 @@ public class MACreature public EntityType getType() { return type; } - + public static MACreature fromString(String string) { return map.get(string.toLowerCase().replaceAll("[-_\\.]", "")); } - + public LivingEntity spawn(Arena arena, World world, Location loc) { LivingEntity e = (LivingEntity) world.spawnEntity(loc, type); e.getEquipment().clear(); @@ -191,12 +191,12 @@ public class MACreature default: break; } - + if (e instanceof Creature) { Creature c = (Creature) e; c.setTarget(WaveUtils.getClosestPlayer(arena, e)); } - + return e; } } diff --git a/src/main/java/com/garbagemule/MobArena/waves/SheepBouncer.java b/src/main/java/com/garbagemule/MobArena/waves/SheepBouncer.java index ffbd6dc..9bd1a85 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/SheepBouncer.java +++ b/src/main/java/com/garbagemule/MobArena/waves/SheepBouncer.java @@ -16,11 +16,11 @@ public class SheepBouncer implements Runnable private Arena arena; private BukkitTask task; - + public SheepBouncer(Arena arena) { this.arena = arena; } - + public void start() { if (task != null) { arena.getPlugin().getLogger().warning("Starting sheep bouncer in arena " + arena.configName() + " with existing bouncer still running. This should never happen."); @@ -48,44 +48,44 @@ public class SheepBouncer implements Runnable if (!arena.isRunning() || arena.getPlayersInArena().isEmpty()) { return; } - + // Put all the sheep in a new collection for iteration purposes. Set sheep = new HashSet<>(arena.getMonsterManager().getExplodingSheep()); - + // If there are no sheep, reschedule and return. if (sheep.isEmpty()) { arena.scheduleTask(this, BOUNCE_INTERVAL); return; } - + for (LivingEntity e : sheep) { // If an entity is null just ignore it. if (e == null) { continue; } - + // If the sheep is dead, remove it. if (e.isDead()) { arena.getMonsterManager().removeMonster(e); arena.getMonsterManager().removeExplodingSheep(e); continue; } - + // Create an explosion if there's a player amongst the nearby entities. for (Entity entity : e.getNearbyEntities(2D, 2D, 2D)) { if (entity instanceof Player) { e.getWorld().createExplosion(e.getLocation(), 2f); e.remove(); - + break; } } - + // Otherwise, if it's not already bouncing, BOUNCE! if (Math.abs(e.getVelocity().getY()) < 1) e.setVelocity(e.getVelocity().setY(0.5)); } - + // Reschedule for more bouncy madness! task = Bukkit.getScheduler().runTaskLater(arena.getPlugin(), this, BOUNCE_INTERVAL); } diff --git a/src/main/java/com/garbagemule/MobArena/waves/Wave.java b/src/main/java/com/garbagemule/MobArena/waves/Wave.java index 925f85e..94dce16 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/Wave.java +++ b/src/main/java/com/garbagemule/MobArena/waves/Wave.java @@ -21,7 +21,7 @@ public interface Wave * @return a collection of MACreatures and how many of each to spawn */ Map getMonstersToSpawn(int wave, int playerCount, Arena arena); - + /** * Get a list of spawnpoints upon which the monsters of this * wave may be spawned. Note that it is expected that the @@ -32,7 +32,7 @@ public interface Wave * @return a list of valid spawnpoints */ List getSpawnpoints(Arena arena); - + /** * Set the list of spawnpoints on which the monsters of this * wave may be spawned. If the value is null, all spawnpoints @@ -40,7 +40,7 @@ public interface Wave * @param spawnpoints a list of spawnpoints */ void setSpawnpoints(List spawnpoints); - + /** * Get a list of potion effects that the monsters of this wave * will be given when they spawn. @@ -63,7 +63,7 @@ public interface Wave * @param wave a wave number */ void announce(Arena arena, int wave); - + /** * Get the wave's name. * @return The name @@ -87,7 +87,7 @@ public interface Wave * @param branch recurrent or single */ void setBranch(WaveBranch branch); - + /** * Get the type of wave. * @return a WaveType @@ -99,7 +99,7 @@ public interface Wave * @param type a WaveType */ void setType(WaveType type); - + /** * Get the first wave this Wave instance may spawn on. * @return a wave number @@ -111,55 +111,55 @@ public interface Wave * @param firstWave a wave number */ void setFirstWave(int firstWave); - + /** * Get the wave's frequency, i.e. wave number "modulo" * @return a frequency */ int getFrequency(); - + /** * Set the wave's frequency * @param frequency a frequency */ void setFrequency(int frequency); - + /** * Get the wave's priority value. * @return a priority */ int getPriority(); - + /** * Set the wave's priority. * @param priority a priority */ void setPriority(int priority); - + /** * Get the wave's health multiplier. * @return The health multiplier */ double getHealthMultiplier(); - + /** * Get the wave's health multiplier. * @param healthMultiplier a double in the range ]0;1] */ void setHealthMultiplier(double healthMultiplier); - + /** * Get the wave's amount multiplier. * @return The amount multiplier */ double getAmountMultiplier(); - + /** * Set the wave's amount multiplier. * @param amountMultiplier a positive double */ void setAmountMultiplier(double amountMultiplier); - + /** * Check if this wave matches the wave number. * The SingleWave class does a simple check if its wave == the parameter. @@ -179,4 +179,4 @@ public interface Wave * @return a copy of the wave */ Wave copy(); -} \ No newline at end of file +} diff --git a/src/main/java/com/garbagemule/MobArena/waves/WaveManager.java b/src/main/java/com/garbagemule/MobArena/waves/WaveManager.java index 5e8fd3c..922795c 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/WaveManager.java +++ b/src/main/java/com/garbagemule/MobArena/waves/WaveManager.java @@ -14,38 +14,38 @@ public class WaveManager private Wave defaultWave, currentWave; private TreeSet recurrentWaves, singleWaves, singleWavesInstance; - + private int wave, finalWave; - + public WaveManager(Arena arena, ConfigurationSection section) { this.arena = arena; this.section = section; this.wave = 0; this.finalWave = 0; - + reloadWaves(); } - + public TreeSet getRecurrentWaves() { return recurrentWaves; } - + public void reset() { reloadWaves(); wave = 0; singleWavesInstance = new TreeSet<>(singleWaves); } - + public void reloadWaves() { ConfigurationSection rConfig = section.getConfigurationSection("recurrent"); ConfigurationSection sConfig = section.getConfigurationSection("single"); - + recurrentWaves = WaveParser.parseWaves(arena, rConfig, WaveBranch.RECURRENT); singleWaves = WaveParser.parseWaves(arena, sConfig, WaveBranch.SINGLE); // getParent() => go back to the arena-node to access settings finalWave = section.getParent().getInt("settings.final-wave", 0); - + if (recurrentWaves.isEmpty()) { if (singleWaves.isEmpty()) { arena.getPlugin().getLogger().warning("Found no waves for arena " + arena.configName() + ", using default wave."); @@ -60,15 +60,15 @@ public class WaveManager defaultWave = recurrentWaves.first(); } } - + /** * Increment the wave number and get the next Wave to be spawned. - * Note that this method is a mutator. + * Note that this method is a mutator. * @return the next Wave */ public Wave next() { wave++; - + if (!singleWavesInstance.isEmpty() && singleWavesInstance.first().matches(wave)) { currentWave = singleWavesInstance.pollFirst().copy(); } @@ -76,10 +76,10 @@ public class WaveManager SortedSet matches = getMatchingRecurrentWaves(wave); currentWave = (matches.isEmpty() ? defaultWave : matches.last()).copy(); } - + return currentWave; } - + /** * Get the next Wave to be spawned. This is an accessor and does not * advance the "counter". Note that the Wave objects, however, are @@ -88,15 +88,15 @@ public class WaveManager */ public Wave getNext() { int next = wave + 1; - + if (!singleWavesInstance.isEmpty() && singleWavesInstance.first().matches(next)) { return singleWavesInstance.first(); } - + SortedSet matches = getMatchingRecurrentWaves(wave); - return (matches.isEmpty() ? defaultWave : matches.last()); + return (matches.isEmpty() ? defaultWave : matches.last()); } - + /** * Get the current wave that's being used. * Note that the current wave might not have spawned yet. @@ -105,7 +105,7 @@ public class WaveManager public Wave getCurrent() { return currentWave; } - + /** * Get the current wave number. * @return the current wave number @@ -113,7 +113,7 @@ public class WaveManager public int getWaveNumber() { return wave; } - + /** * Get the final wave number. * @return the final wave number @@ -121,7 +121,7 @@ public class WaveManager public int getFinalWave() { return finalWave; } - + private SortedSet getMatchingRecurrentWaves(int wave) { TreeSet result = new TreeSet<>(WaveUtils.getRecurrentComparator()); for (Wave w : recurrentWaves) { diff --git a/src/main/java/com/garbagemule/MobArena/waves/WaveParser.java b/src/main/java/com/garbagemule/MobArena/waves/WaveParser.java index 93a944f..1768564 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/WaveParser.java +++ b/src/main/java/com/garbagemule/MobArena/waves/WaveParser.java @@ -44,40 +44,40 @@ public class WaveParser public static TreeSet parseWaves(Arena arena, ConfigurationSection config, WaveBranch branch) { // Create a TreeSet with the Comparator for the specific branch. TreeSet result = new TreeSet<>(WaveUtils.getComparator(branch)); - + // If the config is null, return the empty set. if (config == null) { return result; } - + // If no waves were found, return the empty set. Set waves = config.getKeys(false); if (waves == null) { return result; } - + // Otherwise, parse each wave in the branch. for (String wave : waves) { ConfigurationSection waveSection = config.getConfigurationSection(wave); Wave w = parseWave(arena, wave, waveSection, branch); result.add(w); } - + return result; } - + public static Wave parseWave(Arena arena, String name, ConfigurationSection config, WaveBranch branch) { // Grab the WaveType and verify that it isn't null. String t = config.getString("type", null); WaveType type = WaveType.fromString(t); - + if (type == null) { throw new ConfigError("Invalid wave type for wave " + name + " of arena " + arena.configName() + ": " + t); } - + // Prepare the result Wave result = null; - + // Switch on the type of wave. switch (type) { case DEFAULT: @@ -99,26 +99,26 @@ public class WaveParser result = parseBossWave(arena, name, config); break; } - + // Grab the branch-specific nodes. int priority = config.getInt("priority", -1); int frequency = config.getInt("frequency", -1); int firstWave = config.getInt("wave", frequency); - + // Get multipliers double healthMultiplier = config.getDouble("health-multiplier", -1D); if (healthMultiplier == -1D) { healthMultiplier = config.getInt("health-multiplier", 1); } - + double amountMultiplier = config.getDouble("amount-multiplier", -1D); if (amountMultiplier == -1D) { amountMultiplier = config.getInt("amount-multiplier", 1); } - + // Grab the specific spawnpoints if any List spawnpoints = getSpawnpoints(arena, name, config); - + // Potion effects List effects = getPotionEffects(arena, name, config); @@ -133,31 +133,31 @@ public class WaveParser } else if (branch == WaveBranch.SINGLE && firstWave <= 0) { throw new ConfigError("Missing or invalid 'wave' node for single wave " + name + " of arena " + arena.configName()); } - + // Set the important required values. result.setName(name); result.setBranch(branch); result.setFirstWave(firstWave); result.setPriority(priority); result.setFrequency(frequency); - + // And the multipliers. result.setHealthMultiplier(healthMultiplier); result.setAmountMultiplier(amountMultiplier); - + // Aaand the spawnpoints result.setSpawnpoints(spawnpoints); // Potions result.setEffects(effects); - + return result; } - + private static Wave parseDefaultWave(Arena arena, String name, ConfigurationSection config) { // Grab the monster map. SortedMap monsters = getMonsterMap(arena, name, config); - + // Create the wave. DefaultWave result = new DefaultWave(monsters); @@ -167,7 +167,7 @@ public class WaveParser result.setFixed(true); return result; } - + // Grab the WaveGrowth String grw = config.getString("growth", null); if (grw != null && !grw.isEmpty()) { @@ -180,21 +180,21 @@ public class WaveParser } else { result.setGrowth(WaveGrowth.MEDIUM); } - + return result; } - + private static Wave parseSpecialWave(Arena arena, String name, ConfigurationSection config) { SortedMap monsters = getMonsterMap(arena, name, config); - + return new SpecialWave(monsters); } - + private static Wave parseSwarmWave(Arena arena, String name, ConfigurationSection config) { MACreature monster = getSingleMonster(arena, name, config); - + SwarmWave result = new SwarmWave(monster); - + // Grab SwarmAmount String amnt = config.getString("amount", null); if (amnt != null && !amnt.isEmpty()) { @@ -207,15 +207,15 @@ public class WaveParser } else { result.setAmount(SwarmAmount.LOW); } - + return result; } - + private static Wave parseSupplyWave(Arena arena, String name, ConfigurationSection config) { SortedMap monsters = getMonsterMap(arena, name, config); - + SupplyWave result = new SupplyWave(monsters); - + // Grab the loot. List loot = config.getStringList("drops"); if (loot == null || loot.isEmpty()) { @@ -236,28 +236,28 @@ public class WaveParser }) .collect(Collectors.toList()); result.setDropList(stacks); - + return result; } - + private static Wave parseUpgradeWave(Arena arena, String name, ConfigurationSection config) { ThingManager thingman = arena.getPlugin().getThingManager(); Map> upgrades = getUpgradeMap(config, name, arena, thingman); return new UpgradeWave(upgrades); } - + private static Wave parseBossWave(Arena arena, String name, ConfigurationSection config) { MACreature monster = getSingleMonster(arena, name, config); - + BossWave result = new BossWave(monster); - + // Check if there's a specific boss name String bossName = config.getString("name", null); if (bossName != null && !bossName.isEmpty()) { result.setBossName(ChatColor.translateAlternateColorCodes('&', bossName)); } - + // Grab the boss health String healthString = config.getString("health", null); if (healthString != null && !healthString.isEmpty()) { @@ -274,7 +274,7 @@ public class WaveParser } else { result.setHealth(BossHealth.MEDIUM); } - + // And the abilities. List abilities = config.getStringList("abilities"); if (abilities == null || abilities.isEmpty()) { @@ -298,11 +298,11 @@ public class WaveParser return ability; }) .forEach(result::addBossAbility); - + // As well as the ability interval and ability announce. result.setAbilityInterval(config.getInt("ability-interval", 3) * 20); result.setAbilityAnnounce(config.getBoolean("ability-announce", true)); - + // Rewards! String rew = config.getString("reward", null); if (rew != null && !rew.isEmpty()) { @@ -335,10 +335,10 @@ public class WaveParser }) .collect(Collectors.toList()); result.setDrops(stacks); - + return result; } - + /** * Scan the ConfigSection for a "monster" (singular) node, which * must be exactly a single monster. @@ -350,14 +350,14 @@ public class WaveParser if (monster == null || monster.isEmpty()) { throw new ConfigError("Missing 'monster' node for wave " + name + " of arena " + arena.configName()); } - + MACreature result = MACreature.fromString(monster); if (result == null) { throw new ConfigError("Failed to parse monster for wave " + name + " of arena " + arena.configName() + ": " + monster); } return result; } - + /** * Scan the ConfigSection for a "monsters" (plural) node, which * must contain a list of at least one "monster: number" node. @@ -374,31 +374,31 @@ public class WaveParser if (monsters == null || monsters.isEmpty()) { throw new ConfigError("Empty 'monsters' node for wave " + name + " of arena " + arena.configName()); } - + // Prepare the map. SortedMap monsterMap = new TreeMap<>(); int sum = 0; String path = "monsters."; - + // Check all the monsters. for (String monster : monsters) { MACreature creature = MACreature.fromString(monster); if (creature == null) { throw new ConfigError("Failed to parse monster for wave " + name + " of arena " + arena.configName() + ": " + monster); } - + int prob = config.getInt(path + monster, -1); if (prob < 0) { throw new ConfigError("Failed to parse probability for monster " + monster + " in wave " + name + " of arena " + arena.configName()); } - + sum += prob; monsterMap.put(sum, creature); } - + return monsterMap; } - + private static List getSpawnpoints(Arena arena, String name, ConfigurationSection config) { List spawnpoints = config.getStringList("spawnpoints"); if (spawnpoints == null || spawnpoints.isEmpty()) { @@ -408,7 +408,7 @@ public class WaveParser } spawnpoints = Arrays.asList(value.split(";")); } - + ArenaRegion region = arena.getRegion(); return spawnpoints.stream() .map(String::trim) @@ -451,7 +451,7 @@ public class WaveParser }) .collect(Collectors.toList()); } - + private static Map> getUpgradeMap(ConfigurationSection config, String name, Arena arena, ThingManager thingman) { ConfigurationSection section = config.getConfigurationSection("upgrades"); if (section == null) { @@ -462,10 +462,10 @@ public class WaveParser if (classes == null || classes.isEmpty()) { throw new ConfigError("Empty 'upgrades' node for wave " + name + " of arena " + arena.configName()); } - + Map> upgrades = new HashMap<>(); String path = "upgrades."; - + for (String className : classes) { // Legacy support Object val = config.get(path + className, null); @@ -479,7 +479,7 @@ public class WaveParser upgrades.put(className.toLowerCase(), list); } } - + return upgrades; } @@ -570,14 +570,14 @@ public class WaveParser return list; } - + public static Wave createDefaultWave() { SortedMap monsters = new TreeMap<>(); monsters.put(10, MACreature.ZOMBIE); monsters.put(20, MACreature.SKELETON); monsters.put(30, MACreature.SPIDER); monsters.put(40, MACreature.SLIMESMALL); - + DefaultWave result = new DefaultWave(monsters); result.setName("MA_DEFAULT_WAVE"); result.setBranch(WaveBranch.RECURRENT); @@ -587,7 +587,7 @@ public class WaveParser result.setGrowth(WaveGrowth.OLD); result.setHealthMultiplier(1D); result.setAmountMultiplier(1D); - + return result; } } diff --git a/src/main/java/com/garbagemule/MobArena/waves/WaveUtils.java b/src/main/java/com/garbagemule/MobArena/waves/WaveUtils.java index a7d67dd..633c79d 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/WaveUtils.java +++ b/src/main/java/com/garbagemule/MobArena/waves/WaveUtils.java @@ -21,12 +21,12 @@ public class WaveUtils public static List getValidSpawnpoints(Arena arena, List spawnpoints, Collection players) { MobArena plugin = arena.getPlugin(); List result = new ArrayList<>(); - + // Ensure that we do have some spawnpoints. if (spawnpoints == null || spawnpoints.isEmpty()) { spawnpoints = arena.getRegion().getSpawnpointList(); } - + // Loop through each one and check if any players are in range. for (Location l : spawnpoints) { for (Player p : players) { @@ -37,7 +37,7 @@ public class WaveUtils break; } } - + // If no spawnpoints in range, just return all of them. if (result.isEmpty()) { String locs = ""; @@ -50,14 +50,14 @@ public class WaveUtils } return result; } - + public static Player getClosestPlayer(Arena arena, Entity e) { // Set up the comparison variable and the result. double dist = 0; double current = Double.POSITIVE_INFINITY; Player result = null; - + /* Iterate through the ArrayList, and update current and result every * time a squared distance smaller than current is found. */ for (Player p : arena.getPlayersInArena()) @@ -68,7 +68,7 @@ public class WaveUtils p.kickPlayer("[MobArena] Cheater! (Warped out of the arena world.)"); continue; } - + dist = p.getLocation().distanceSquared(e.getLocation()); if (dist < current && dist < MobArena.MIN_PLAYER_DISTANCE_SQUARED) { @@ -84,7 +84,7 @@ public class WaveUtils // Comparators // ////////////////////////////////////////////////////////////////////*/ - + /** * Get a comparator based on the WaveBranch parameter. */ @@ -97,7 +97,7 @@ public class WaveUtils else return null; } - + /** * Get a Comparator that compares Wave objects by wave number. * If the wave numbers are equal, the waves are equal. This is to @@ -118,12 +118,12 @@ public class WaveUtils } }; } - + /** * Get a Comparator that compares Wave objects by priority. * If the priorities are equal, the names are compared. This is to * ALLOW "duplicates" in the RECURRENT WAVES collection. - * @return Comparator whose compare()-method compares wave priorities. + * @return Comparator whose compare()-method compares wave priorities. */ public static Comparator getRecurrentComparator() { diff --git a/src/main/java/com/garbagemule/MobArena/waves/ability/AbilityInfo.java b/src/main/java/com/garbagemule/MobArena/waves/ability/AbilityInfo.java index b3ec469..7db237e 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/ability/AbilityInfo.java +++ b/src/main/java/com/garbagemule/MobArena/waves/ability/AbilityInfo.java @@ -11,7 +11,7 @@ public @interface AbilityInfo * This value is printed when a boss executes the ability in the arena. */ String name(); - + /** * The config aliases for the ability. * This is used by MobArena to parse ability names from the config-file. diff --git a/src/main/java/com/garbagemule/MobArena/waves/ability/AbilityManager.java b/src/main/java/com/garbagemule/MobArena/waves/ability/AbilityManager.java index e05e0a8..14bdd9a 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/ability/AbilityManager.java +++ b/src/main/java/com/garbagemule/MobArena/waves/ability/AbilityManager.java @@ -43,7 +43,7 @@ public class AbilityManager private static final String ma = "plugins" + File.separator + "MobArena.jar"; private static final String cb = System.getProperty("java.class.path"); private static final String classpath = ma + System.getProperty("path.separator") + cb; - + private static Map> abilities; /** @@ -90,7 +90,7 @@ public class AbilityManager register(ThrowTarget.class); register(WarpToPlayer.class); } - + /** * Load the custom abilities from the specified directory. * @param dataDir main plugin data folder @@ -105,7 +105,7 @@ public class AbilityManager // Grab the source directory. File javaDir = new File(classDir, "src"); - + /* If the source directory exists, we need to verify that the system * has a java compiler before attempting anything. If not, we need to * skip the compiling step and just go straight to loading in the @@ -117,7 +117,7 @@ public class AbilityManager Bukkit.getLogger().warning("[MobArena] Found plugins/MobArena/abilities/src/ folder, but no Java compiler. The source files will not be compiled!"); } } - + // Load all the custom abilities. loadClasses(classDir); } @@ -142,38 +142,38 @@ public class AbilityManager // Announce custom abilities if (announce) Bukkit.getLogger().info("[MobArena] Loaded custom ability '" + info.name() + "'"); } - + private static void compileAbilities(File javaDir, File classDir) { if (!javaDir.exists()) return; - + // Make ready a new list of files to compile. List toCompile = getSourceFilesToCompile(javaDir, classDir); - + // No files to compile? if (toCompile.isEmpty()) { return; } - + // Notify the console. Bukkit.getLogger().info("[MobArena] Compiling abilities: " + fileListToString(toCompile)); - + // Get the compiler JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null); - + // Generate some JavaFileObjects try { Iterable compilationUnits = fileManager.getJavaFileObjectsFromFiles(toCompile); - + // Include the MobArena.jar on the classpath, and set the destination folder. List options = Arrays.asList("-classpath", classpath, "-d", classDir.getPath()); - + // Set up the compilation task. JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, null, options, null, compilationUnits); - + // Call the task. task.call(); - + // And close the file manager. fileManager.close(); } @@ -182,17 +182,17 @@ public class AbilityManager e.printStackTrace(); } } - + private static List getSourceFilesToCompile(File javaDir, File classDir) { List result = new ArrayList<>(); - + if (javaDir == null || !javaDir.exists()) { return result; } - + // Grab the array of compiled files. File[] classFiles = classDir.listFiles(); - + // Go through each source file. for (File javaFile : javaDir.listFiles()) { // Skip if it's not a .java file. @@ -200,24 +200,24 @@ public class AbilityManager Bukkit.getLogger().info("[MobArena] Found invalid ability file: " + javaFile.getName()); continue; } - + // Find the associated .class file. File classFile = findClassFile(javaFile, classFiles); - + // If the .class file is newer, we don't need to compile. if (isClassFileNewer(javaFile, classFile)) { continue; } result.add(javaFile); } - + return result; } - + private static File findClassFile(File javaFile, File[] classFiles) { String javaFileName = javaFile.getName(); String classFileName = javaFileName.substring(0, javaFileName.lastIndexOf(".")) + ".class"; - + for (File classFile : classFiles) { if (classFile.getName().equals(classFileName)) { return classFile; @@ -225,13 +225,13 @@ public class AbilityManager } return null; } - + private static boolean isClassFileNewer(File javaFile, File classFile) { if (classFile == null) return false; - + return (classFile.lastModified() > javaFile.lastModified()); } - + /** * (Compiles and) loads all custom abilities in the given directory. * @param classDir a directory @@ -240,21 +240,21 @@ public class AbilityManager // Grab the class loader ClassLoader loader = getLoader(classDir); if (loader == null) return; - + for (File file : classDir.listFiles()) { String filename = file.getName(); - + // Only load .class files. int dot = filename.lastIndexOf(".class"); if (dot < 0) continue; // Trim off the .class extension String name = filename.substring(0, file.getName().lastIndexOf(".")); - + try { // Load the class Class cls = loader.loadClass(name); - + // Verify that it's an Ability, then register it if (Ability.class.isAssignableFrom(cls)) { register(cls.asSubclass(Ability.class), true); @@ -262,7 +262,7 @@ public class AbilityManager } catch (Exception e) {} } } - + /** * Get a ClassLoader for the given directory. * @param dir a directory @@ -274,30 +274,30 @@ public class AbilityManager return loader; } catch (Exception e) {} - + return null; } - + private static String fileListToString(List list) { return fileListToString(list, null); } - + private static String fileListToString(List list, String exclude) { if (list.isEmpty()) return ""; - + StringBuffer buffy = new StringBuffer(); - + for (File file : list) { String name = file.getName(); int dot = name.lastIndexOf("."); - + if (exclude != null && name.contains(exclude)) { continue; } - + buffy.append(", " + name.substring(0, dot)); } - + // Trim off the first ", ". return buffy.substring(2); } diff --git a/src/main/java/com/garbagemule/MobArena/waves/ability/AbilityUtils.java b/src/main/java/com/garbagemule/MobArena/waves/ability/AbilityUtils.java index 23c4887..60e2315 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/ability/AbilityUtils.java +++ b/src/main/java/com/garbagemule/MobArena/waves/ability/AbilityUtils.java @@ -14,7 +14,7 @@ import java.util.Random; public class AbilityUtils { public static Random random = new Random(); - + /** * Get the target player of the LivingEntity if possible. * @param the arena @@ -25,18 +25,18 @@ public class AbilityUtils public static LivingEntity getTarget(Arena arena, LivingEntity entity, boolean random) { if (entity instanceof Creature) { LivingEntity target = ((Creature) entity).getTarget(); - + if (target instanceof Player && arena.inArena((Player) target)) { return target; } } - + if (random) { return getRandomPlayer(arena); } return null; } - + /** * Get a random arena player. * @param arena the arena @@ -45,10 +45,10 @@ public class AbilityUtils public static Player getRandomPlayer(Arena arena) { List list = new ArrayList<>(arena.getPlayersInArena()); if (list.isEmpty()) return null; - + return list.get(random.nextInt(list.size())); } - + /** * Get a list of nearby players * @param arena the arena @@ -65,12 +65,12 @@ public class AbilityUtils } return result; } - + /** * Get a list of distant players * @param arena the arena * @param boss the boss - * @param x the 'radius' in which to exclude players + * @param x the 'radius' in which to exclude players * @return a list of distant players */ public static List getDistantPlayers(Arena arena, Entity boss, int x) { diff --git a/src/main/java/com/garbagemule/MobArena/waves/ability/core/ChainLightning.java b/src/main/java/com/garbagemule/MobArena/waves/ability/core/ChainLightning.java index ece620d..76eaf41 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/ability/core/ChainLightning.java +++ b/src/main/java/com/garbagemule/MobArena/waves/ability/core/ChainLightning.java @@ -18,43 +18,43 @@ import java.util.List; public class ChainLightning implements Ability { /** - * How many blocks the chain lightning can spread over. + * How many blocks the chain lightning can spread over. * Must be greater than 0. */ private static final int RADIUS = 4; - + /** * How many server ticks between each lightning strike. * Must be greater than 0. */ private static final int TICKS = 10; - + @Override public void execute(Arena arena, MABoss boss) { final LivingEntity target = AbilityUtils.getTarget(arena, boss.getEntity(), true); if (target == null || !(target instanceof Player)) return; - + strikeLightning(arena, (Player) target, new ArrayList<>()); } - + private void strikeLightning(final Arena arena, final Player p, final List done) { arena.scheduleTask(new Runnable() { public void run() { if (!arena.isRunning() || !arena.inArena(p)) return; - + // Smite the target arena.getWorld().strikeLightning(p.getLocation()); done.add(p); - + // Grab all nearby players List nearby = AbilityUtils.getNearbyPlayers(arena, p, RADIUS); - + // Remove all that are "done", and return if empty nearby.removeAll(done); if (nearby.isEmpty()) return; - + // Otherwise, smite the next target! strikeLightning(arena, nearby.get(0), done); } diff --git a/src/main/java/com/garbagemule/MobArena/waves/ability/core/DisorientDistant.java b/src/main/java/com/garbagemule/MobArena/waves/ability/core/DisorientDistant.java index 2bd4b97..e8333c6 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/ability/core/DisorientDistant.java +++ b/src/main/java/com/garbagemule/MobArena/waves/ability/core/DisorientDistant.java @@ -18,7 +18,7 @@ public class DisorientDistant implements Ability * How far away players must be to be affected by the ability. */ private static final int RADIUS = 8; - + @Override public void execute(Arena arena, MABoss boss) { for (Player p : AbilityUtils.getDistantPlayers(arena, boss.getEntity(), RADIUS)) { diff --git a/src/main/java/com/garbagemule/MobArena/waves/ability/core/DisorientNearby.java b/src/main/java/com/garbagemule/MobArena/waves/ability/core/DisorientNearby.java index abea49a..ab737db 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/ability/core/DisorientNearby.java +++ b/src/main/java/com/garbagemule/MobArena/waves/ability/core/DisorientNearby.java @@ -19,12 +19,12 @@ public class DisorientNearby implements Ability * How close players must be to be affected by the ability. */ private static final int RADIUS = 5; - + @Override public void execute(Arena arena, MABoss boss) { LivingEntity target = AbilityUtils.getTarget(arena, boss.getEntity(), false); if (target == null) return; - + for (Player p : AbilityUtils.getNearbyPlayers(arena, boss.getEntity(), RADIUS)) { Location loc = p.getLocation(); loc.setYaw(loc.getYaw() + 45 + AbilityUtils.random.nextInt(270)); diff --git a/src/main/java/com/garbagemule/MobArena/waves/ability/core/DisorientTarget.java b/src/main/java/com/garbagemule/MobArena/waves/ability/core/DisorientTarget.java index 13dfe60..436123e 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/ability/core/DisorientTarget.java +++ b/src/main/java/com/garbagemule/MobArena/waves/ability/core/DisorientTarget.java @@ -18,12 +18,12 @@ public class DisorientTarget implements Ability * If the boss has no target, should a random player be selected? */ private static final boolean RANDOM = false; - + @Override public void execute(Arena arena, MABoss boss) { LivingEntity target = AbilityUtils.getTarget(arena, boss.getEntity(), RANDOM); if (target == null) return; - + Location loc = target.getLocation(); loc.setYaw(loc.getYaw() + 45 + AbilityUtils.random.nextInt(270)); target.teleport(loc); diff --git a/src/main/java/com/garbagemule/MobArena/waves/ability/core/FetchDistant.java b/src/main/java/com/garbagemule/MobArena/waves/ability/core/FetchDistant.java index 5647443..be81087 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/ability/core/FetchDistant.java +++ b/src/main/java/com/garbagemule/MobArena/waves/ability/core/FetchDistant.java @@ -18,11 +18,11 @@ public class FetchDistant implements Ability * How far away players must be to be affected by the ability. */ private static final int RADIUS = 8; - + @Override public void execute(Arena arena, MABoss boss) { Location bLoc = boss.getEntity().getLocation(); - + for (Player p : AbilityUtils.getDistantPlayers(arena, boss.getEntity(), RADIUS)) { p.teleport(bLoc); } diff --git a/src/main/java/com/garbagemule/MobArena/waves/ability/core/FetchNearby.java b/src/main/java/com/garbagemule/MobArena/waves/ability/core/FetchNearby.java index e476ebf..abb2a56 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/ability/core/FetchNearby.java +++ b/src/main/java/com/garbagemule/MobArena/waves/ability/core/FetchNearby.java @@ -18,11 +18,11 @@ public class FetchNearby implements Ability * How close players must be to be affected by the ability. */ private static final int RADIUS = 5; - + @Override public void execute(Arena arena, MABoss boss) { Location bLoc = boss.getEntity().getLocation(); - + for (Player p : AbilityUtils.getNearbyPlayers(arena, boss.getEntity(), RADIUS)) { p.teleport(bLoc); } diff --git a/src/main/java/com/garbagemule/MobArena/waves/ability/core/FetchTarget.java b/src/main/java/com/garbagemule/MobArena/waves/ability/core/FetchTarget.java index 824b37f..47c36eb 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/ability/core/FetchTarget.java +++ b/src/main/java/com/garbagemule/MobArena/waves/ability/core/FetchTarget.java @@ -17,12 +17,12 @@ public class FetchTarget implements Ability * If the boss has no target, should a random player be selected? */ private static final boolean RANDOM = true; - + @Override public void execute(Arena arena, MABoss boss) { LivingEntity target = AbilityUtils.getTarget(arena, boss.getEntity(), RANDOM); if (target == null) return; - + target.teleport(boss.getEntity()); } } diff --git a/src/main/java/com/garbagemule/MobArena/waves/ability/core/FireAura.java b/src/main/java/com/garbagemule/MobArena/waves/ability/core/FireAura.java index c828990..b11ec7a 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/ability/core/FireAura.java +++ b/src/main/java/com/garbagemule/MobArena/waves/ability/core/FireAura.java @@ -17,12 +17,12 @@ public class FireAura implements Ability * How close players must be to be affected by the ability. */ private static final int RADIUS = 5; - + /** * How many ticks the players should be on fire for. */ private static final int TICKS = 20; - + @Override public void execute(Arena arena, MABoss boss) { for (Player p : AbilityUtils.getNearbyPlayers(arena, boss.getEntity(), RADIUS)) diff --git a/src/main/java/com/garbagemule/MobArena/waves/ability/core/Flood.java b/src/main/java/com/garbagemule/MobArena/waves/ability/core/Flood.java index e45222d..56de50c 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/ability/core/Flood.java +++ b/src/main/java/com/garbagemule/MobArena/waves/ability/core/Flood.java @@ -19,7 +19,7 @@ public class Flood implements Ability public void execute(Arena arena, MABoss boss) { Player p = AbilityUtils.getRandomPlayer(arena); Block block = p.getLocation().getBlock(); - + if (block.getType() == Material.AIR) { block.setType(Material.WATER); arena.addBlock(block); diff --git a/src/main/java/com/garbagemule/MobArena/waves/ability/core/LightningAura.java b/src/main/java/com/garbagemule/MobArena/waves/ability/core/LightningAura.java index 9d9ebcb..eac4c87 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/ability/core/LightningAura.java +++ b/src/main/java/com/garbagemule/MobArena/waves/ability/core/LightningAura.java @@ -18,7 +18,7 @@ public class LightningAura implements Ability * How close players must be to be affected by the ability. */ private static final int RADIUS = 5; - + @Override public void execute(Arena arena, MABoss boss) { World world = arena.getWorld(); diff --git a/src/main/java/com/garbagemule/MobArena/waves/ability/core/LivingBomb.java b/src/main/java/com/garbagemule/MobArena/waves/ability/core/LivingBomb.java index 036fa6f..36fcade 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/ability/core/LivingBomb.java +++ b/src/main/java/com/garbagemule/MobArena/waves/ability/core/LivingBomb.java @@ -18,29 +18,29 @@ public class LivingBomb implements Ability * How many ticks before the bomb goes off. */ private static final int FUSE = 60; - + /** * How close players must be to be affected by the bomb. */ private static final int RADIUS = 3; - + /** * How many ticks players affected by the bomb should burn. */ private static final int AFTERBURN = 40; - + @Override public void execute(final Arena arena, MABoss boss) { // Grab the target, or a random player. LivingEntity target = AbilityUtils.getTarget(arena, boss.getEntity(), true); - + // We only want players. if (target == null || !(target instanceof Player)) return; final Player p = (Player) target; p.setFireTicks(FUSE + 5); - + // Create an explosion after 4 seconds arena.scheduleTask(new Runnable() { public void run() { @@ -48,10 +48,10 @@ public class LivingBomb implements Ability if (!arena.isRunning() || !arena.inArena(p) || p.getFireTicks() <= 0) { return; } - + // Explode! arena.getWorld().createExplosion(p.getLocation(), 1F); - + // And set every nearby player on fire! for (Player nearby : AbilityUtils.getNearbyPlayers(arena, p, RADIUS)) { nearby.setFireTicks(AFTERBURN); diff --git a/src/main/java/com/garbagemule/MobArena/waves/ability/core/ObsidianBomb.java b/src/main/java/com/garbagemule/MobArena/waves/ability/core/ObsidianBomb.java index 8e6d4f6..a2a4150 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/ability/core/ObsidianBomb.java +++ b/src/main/java/com/garbagemule/MobArena/waves/ability/core/ObsidianBomb.java @@ -23,12 +23,12 @@ public class ObsidianBomb implements Ability * How many ticks before the bomb goes off. */ private static final int FUSE = 80; - + @Override public void execute(final Arena arena, MABoss boss) { // Grab the target, or a random player. LivingEntity target = AbilityUtils.getTarget(arena, boss.getEntity(), true); - + final World world = arena.getWorld(); final Location loc; @@ -53,7 +53,7 @@ public class ObsidianBomb implements Ability public void run() { if (!arena.isRunning()) return; - + world.getBlockAt(loc).setType(Material.AIR); world.createExplosion(loc, 3F); } diff --git a/src/main/java/com/garbagemule/MobArena/waves/ability/core/PullDistant.java b/src/main/java/com/garbagemule/MobArena/waves/ability/core/PullDistant.java index d7d1cca..14a1409 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/ability/core/PullDistant.java +++ b/src/main/java/com/garbagemule/MobArena/waves/ability/core/PullDistant.java @@ -19,19 +19,19 @@ public class PullDistant implements Ability * How far away players must be to be affected by the ability. */ private static final int RADIUS = 8; - + @Override public void execute(Arena arena, MABoss boss) { Location bLoc = boss.getEntity().getLocation(); - + for (Player p : AbilityUtils.getDistantPlayers(arena, boss.getEntity(), RADIUS)) { Location loc = p.getLocation(); Vector v = new Vector(bLoc.getX() - loc.getX(), 0, bLoc.getZ() - loc.getZ()); - + double a = Math.abs(bLoc.getX() - loc.getX()); double b = Math.abs(bLoc.getZ() - loc.getZ()); double c = Math.sqrt((a*a + b*b)); - + p.setVelocity(v.normalize().multiply(c*0.3).setY(0.8)); } } diff --git a/src/main/java/com/garbagemule/MobArena/waves/ability/core/PullNearby.java b/src/main/java/com/garbagemule/MobArena/waves/ability/core/PullNearby.java index f0b7a89..41d1406 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/ability/core/PullNearby.java +++ b/src/main/java/com/garbagemule/MobArena/waves/ability/core/PullNearby.java @@ -19,19 +19,19 @@ public class PullNearby implements Ability * How close players must be to be affected by the ability. */ private static final int RADIUS = 5; - + @Override public void execute(Arena arena, MABoss boss) { Location bLoc = boss.getEntity().getLocation(); - + for (Player p : AbilityUtils.getNearbyPlayers(arena, boss.getEntity(), RADIUS)) { Location loc = p.getLocation(); Vector v = new Vector(bLoc.getX() - loc.getX(), 0, bLoc.getZ() - loc.getZ()); - + double a = Math.abs(bLoc.getX() - loc.getX()); double b = Math.abs(bLoc.getZ() - loc.getZ()); double c = Math.sqrt((a*a + b*b)); - + p.setVelocity(v.normalize().multiply(c*0.3).setY(0.8)); } } diff --git a/src/main/java/com/garbagemule/MobArena/waves/ability/core/PullTarget.java b/src/main/java/com/garbagemule/MobArena/waves/ability/core/PullTarget.java index 3a365e4..7fc2a06 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/ability/core/PullTarget.java +++ b/src/main/java/com/garbagemule/MobArena/waves/ability/core/PullTarget.java @@ -19,20 +19,20 @@ public class PullTarget implements Ability * If the boss has no target, should a random player be selected? */ private static final boolean RANDOM = false; - + @Override public void execute(Arena arena, MABoss boss) { LivingEntity target = AbilityUtils.getTarget(arena, boss.getEntity(), RANDOM); if (target == null) return; - + Location loc = target.getLocation(); Location bLoc = boss.getEntity().getLocation(); Vector v = new Vector(bLoc.getX() - loc.getX(), 0, bLoc.getZ() - loc.getZ()); - + double a = Math.abs(bLoc.getX() - loc.getX()); double b = Math.abs(bLoc.getZ() - loc.getZ()); double c = Math.sqrt((a*a + b*b)); - + target.setVelocity(v.normalize().multiply(c*0.3).setY(0.8)); } } diff --git a/src/main/java/com/garbagemule/MobArena/waves/ability/core/RootTarget.java b/src/main/java/com/garbagemule/MobArena/waves/ability/core/RootTarget.java index 5902b07..d21ed1a 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/ability/core/RootTarget.java +++ b/src/main/java/com/garbagemule/MobArena/waves/ability/core/RootTarget.java @@ -20,12 +20,12 @@ public class RootTarget implements Ability * How long the the potions last (in ticks). */ private static final int DURATION = 30; - + /** * The amplifier for the potions. */ private static final int AMPLIFIER = 100; - + @Override public void execute(Arena arena, MABoss boss) { final LivingEntity target = AbilityUtils.getTarget(arena, boss.getEntity(), true); diff --git a/src/main/java/com/garbagemule/MobArena/waves/ability/core/ShufflePositions.java b/src/main/java/com/garbagemule/MobArena/waves/ability/core/ShufflePositions.java index 2f973f6..ab8ce38 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/ability/core/ShufflePositions.java +++ b/src/main/java/com/garbagemule/MobArena/waves/ability/core/ShufflePositions.java @@ -23,16 +23,16 @@ public class ShufflePositions implements Ability // Grab the players and add the boss List entities = new ArrayList<>(arena.getPlayersInArena()); entities.add(boss.getEntity()); - + // Grab the locations List locations = new LinkedList<>(); for (LivingEntity e : entities) { locations.add(e.getLocation()); } - + // Shuffle the entities list. Collections.shuffle(entities); - + /* The entities are shuffled, but the locations are not, so if * we remove the first element of each list, chances are they * will not match, i.e. shuffle achieved! */ diff --git a/src/main/java/com/garbagemule/MobArena/waves/ability/core/ThrowDistant.java b/src/main/java/com/garbagemule/MobArena/waves/ability/core/ThrowDistant.java index 71d5e19..7250d19 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/ability/core/ThrowDistant.java +++ b/src/main/java/com/garbagemule/MobArena/waves/ability/core/ThrowDistant.java @@ -19,11 +19,11 @@ public class ThrowDistant implements Ability * How far away players must be to be affected by the ability. */ private static final int RADIUS = 8; - + @Override public void execute(Arena arena, MABoss boss) { Location bLoc = boss.getEntity().getLocation(); - + for (Player p : AbilityUtils.getDistantPlayers(arena, boss.getEntity(), RADIUS)) { Location loc = p.getLocation(); Vector v = new Vector(loc.getX() - bLoc.getX(), 0, loc.getZ() - bLoc.getZ()); diff --git a/src/main/java/com/garbagemule/MobArena/waves/ability/core/ThrowNearby.java b/src/main/java/com/garbagemule/MobArena/waves/ability/core/ThrowNearby.java index 8d213f0..df9ab46 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/ability/core/ThrowNearby.java +++ b/src/main/java/com/garbagemule/MobArena/waves/ability/core/ThrowNearby.java @@ -19,11 +19,11 @@ public class ThrowNearby implements Ability * How close players must be to be affected by the ability. */ private static final int RADIUS = 5; - + @Override public void execute(Arena arena, MABoss boss) { Location bLoc = boss.getEntity().getLocation(); - + for (Player p : AbilityUtils.getNearbyPlayers(arena, boss.getEntity(), RADIUS)) { Location loc = p.getLocation(); Vector v = new Vector(loc.getX() - bLoc.getX(), 0, loc.getZ() - bLoc.getZ()); diff --git a/src/main/java/com/garbagemule/MobArena/waves/ability/core/ThrowTarget.java b/src/main/java/com/garbagemule/MobArena/waves/ability/core/ThrowTarget.java index d9f75d2..7dd1da0 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/ability/core/ThrowTarget.java +++ b/src/main/java/com/garbagemule/MobArena/waves/ability/core/ThrowTarget.java @@ -19,7 +19,7 @@ public class ThrowTarget implements Ability * If the boss has no target, should a random player be selected? */ private static final boolean RANDOM = false; - + @Override public void execute(Arena arena, MABoss boss) { LivingEntity target = AbilityUtils.getTarget(arena, boss.getEntity(), RANDOM); @@ -28,7 +28,7 @@ public class ThrowTarget implements Ability Location bLoc = boss.getEntity().getLocation(); Location loc = target.getLocation(); Vector v = new Vector(loc.getX() - bLoc.getX(), 0, loc.getZ() - bLoc.getZ()); - + target.setVelocity(v.normalize().setY(0.8)); } } diff --git a/src/main/java/com/garbagemule/MobArena/waves/enums/BossHealth.java b/src/main/java/com/garbagemule/MobArena/waves/enums/BossHealth.java index 9f6fbc0..08c3c12 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/enums/BossHealth.java +++ b/src/main/java/com/garbagemule/MobArena/waves/enums/BossHealth.java @@ -4,16 +4,16 @@ public enum BossHealth { VERYLOW(4), LOW(8), MEDIUM(15), HIGH(25), VERYHIGH(40), PSYCHO(60); private int multiplier; - + BossHealth(int multiplier) { this.multiplier = multiplier; } - + public int getMax(int playerCount) { return (playerCount + 1) * 20 * multiplier; } - + public int getMultiplier() { return multiplier; } -} \ No newline at end of file +} diff --git a/src/main/java/com/garbagemule/MobArena/waves/enums/SwarmAmount.java b/src/main/java/com/garbagemule/MobArena/waves/enums/SwarmAmount.java index dbbc8c4..3e9afcf 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/enums/SwarmAmount.java +++ b/src/main/java/com/garbagemule/MobArena/waves/enums/SwarmAmount.java @@ -4,12 +4,12 @@ public enum SwarmAmount { LOW(10), MEDIUM(20), HIGH(30), PSYCHO(60); private int multiplier; - + SwarmAmount(int multiplier) { this.multiplier = multiplier; } - + public int getAmount(int playerCount) { return Math.max(1, playerCount / 2) * multiplier; } -} \ No newline at end of file +} diff --git a/src/main/java/com/garbagemule/MobArena/waves/enums/WaveBranch.java b/src/main/java/com/garbagemule/MobArena/waves/enums/WaveBranch.java index eaefcb8..d3f8792 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/enums/WaveBranch.java +++ b/src/main/java/com/garbagemule/MobArena/waves/enums/WaveBranch.java @@ -10,7 +10,7 @@ public enum WaveBranch return (w.getFirstWave() == wave); } }, - + RECURRENT { @Override public boolean matches(int wave, Wave w) { @@ -20,6 +20,6 @@ public enum WaveBranch return ((wave - w.getFirstWave()) % w.getFrequency() == 0); } }; - + public abstract boolean matches(int wave, Wave w); -} \ No newline at end of file +} diff --git a/src/main/java/com/garbagemule/MobArena/waves/enums/WaveGrowth.java b/src/main/java/com/garbagemule/MobArena/waves/enums/WaveGrowth.java index 9b42da3..5c7d378 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/enums/WaveGrowth.java +++ b/src/main/java/com/garbagemule/MobArena/waves/enums/WaveGrowth.java @@ -4,18 +4,18 @@ public enum WaveGrowth { OLD(0), SLOW(0.5), MEDIUM(0.65), FAST(0.8), PSYCHO(1.2); private double exp; - + WaveGrowth(double exp) { this.exp = exp; } - + public int getAmount(int wave, int playerCount) { if (this == OLD) return wave + playerCount; - + double pc = (double) playerCount; double w = (double) wave; - + double base = Math.min(Math.ceil(pc/2) + 1, 13); return (int) ( base * Math.pow(w, exp) ); } -} \ No newline at end of file +} diff --git a/src/main/java/com/garbagemule/MobArena/waves/enums/WaveType.java b/src/main/java/com/garbagemule/MobArena/waves/enums/WaveType.java index 66c8192..30b9774 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/enums/WaveType.java +++ b/src/main/java/com/garbagemule/MobArena/waves/enums/WaveType.java @@ -11,35 +11,35 @@ public enum WaveType arena.announce(Msg.WAVE_DEFAULT, "" + wave); } }, - + SPECIAL { @Override public void announce(Arena arena, int wave) { arena.announce(Msg.WAVE_SPECIAL, "" + wave); } }, - + SWARM { @Override public void announce(Arena arena, int wave) { arena.announce(Msg.WAVE_SWARM, "" + wave); } }, - + SUPPLY { @Override public void announce(Arena arena, int wave) { arena.announce(Msg.WAVE_SUPPLY, "" + wave); } }, - + BOSS { @Override public void announce(Arena arena, int wave) { arena.announce(Msg.WAVE_BOSS, "" + wave); } }, - + UPGRADE { @Override public void announce(Arena arena, int wave) { @@ -48,7 +48,7 @@ public enum WaveType }; public abstract void announce(Arena arena, int wave); - + public static WaveType fromString(String string) { try { return WaveType.valueOf(string.toUpperCase()); @@ -56,4 +56,4 @@ public enum WaveType return null; } } -} \ No newline at end of file +} diff --git a/src/main/java/com/garbagemule/MobArena/waves/types/BossWave.java b/src/main/java/com/garbagemule/MobArena/waves/types/BossWave.java index f4c685d..9b4c17d 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/types/BossWave.java +++ b/src/main/java/com/garbagemule/MobArena/waves/types/BossWave.java @@ -24,22 +24,22 @@ import java.util.Set; public class BossWave extends AbstractWave { private String bossName; - + private MACreature monster; private Set bosses; - + private boolean useHealthMultiplier; private int healthMultiplier; private int flatHealth; - + private List abilities; private boolean activated, abilityAnnounce; - + private int abilityInterval; private Thing reward; private List drops; - + public BossWave(MACreature monster) { this.monster = monster; this.bosses = new HashSet<>(); @@ -47,48 +47,48 @@ public class BossWave extends AbstractWave this.activated = false; this.abilityAnnounce = false; this.setType(WaveType.BOSS); - + this.useHealthMultiplier = true; this.healthMultiplier = 0; this.flatHealth = 0; } - + @Override public Map getMonstersToSpawn(int wave, int playerCount, Arena arena) { Map result = new HashMap<>(); result.put(monster, 1); return result; } - + public String getBossName() { return bossName; } - + public void setBossName(String bossName) { this.bossName = bossName; } - + public int getMaxHealth(int playerCount) { if (useHealthMultiplier) { return (playerCount + 1) * 20 * healthMultiplier; } return flatHealth; } - + public void setHealth(BossHealth health) { this.healthMultiplier = health.getMultiplier(); this.useHealthMultiplier = true; } - + public void setFlatHealth(int flatHealth) { this.flatHealth = flatHealth; this.useHealthMultiplier = false; } - + public void addMABoss(MABoss boss) { bosses.add(boss); } - + public Set getMABosses() { Set result = new HashSet<>(); for (MABoss b : bosses) { @@ -98,27 +98,27 @@ public class BossWave extends AbstractWave } return result; } - + public void addBossAbility(Ability ability) { abilities.add(ability); } - + public int getAbilityInterval() { return abilityInterval; } - + public void setAbilityInterval(int abilityInterval) { this.abilityInterval = abilityInterval; } - + public boolean getAbilityAnnounce() { return abilityAnnounce; } - + public void setAbilityAnnounce(boolean abilityAnnounce) { this.abilityAnnounce = abilityAnnounce; } - + public Thing getReward() { return reward; } @@ -134,17 +134,17 @@ public class BossWave extends AbstractWave public void setDrops(List drops) { this.drops = drops; } - + public void activateAbilities(Arena arena) { if (activated) { return; } - + BossAbilityThread bat = new BossAbilityThread(this, abilities, arena); arena.scheduleTask(bat, 100); activated = true; } - + public void announceAbility(Ability ability, MABoss boss, Arena arena) { if(getAbilityAnnounce()) { AbilityInfo info = ability.getClass().getAnnotation(AbilityInfo.class); diff --git a/src/main/java/com/garbagemule/MobArena/waves/types/DefaultWave.java b/src/main/java/com/garbagemule/MobArena/waves/types/DefaultWave.java index 5605c3f..829a874 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/types/DefaultWave.java +++ b/src/main/java/com/garbagemule/MobArena/waves/types/DefaultWave.java @@ -17,38 +17,38 @@ public class DefaultWave extends AbstractWave private SortedMap monsterMap; private WaveGrowth growth; private boolean fixed; - + public DefaultWave(SortedMap monsterMap) { this.monsterMap = monsterMap; this.growth = WaveGrowth.OLD; this.setType(WaveType.DEFAULT); } - + @Override public Map getMonstersToSpawn(int wave, int playerCount, Arena arena) { if (fixed) return getFixed(); // Get the amount of monsters to spawn. int toSpawn = (int) Math.max(1D, growth.getAmount(wave, playerCount) * super.getAmountMultiplier()); - + // Grab the total probability sum. int total = monsterMap.lastKey(); - + // Random number generator. Random random = new Random(); - + // Prepare the monster map. Map monsters = new HashMap<>(); - + // Generate some random amounts. for (int i = 0; i < toSpawn; i++) { int value = random.nextInt(total) + 1; - + for (Map.Entry entry : monsterMap.entrySet()) { if (value > entry.getKey()) { continue; } - + Integer current = monsters.get(entry.getValue()); monsters.put(entry.getValue(), (current == null ? 1 : current + 1)); break; @@ -70,11 +70,11 @@ public class DefaultWave extends AbstractWave return result; } - + public WaveGrowth getGrowth() { return growth; } - + public void setGrowth(WaveGrowth growth) { this.growth = growth; this.fixed = false; diff --git a/src/main/java/com/garbagemule/MobArena/waves/types/SpecialWave.java b/src/main/java/com/garbagemule/MobArena/waves/types/SpecialWave.java index 24c602b..20084b7 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/types/SpecialWave.java +++ b/src/main/java/com/garbagemule/MobArena/waves/types/SpecialWave.java @@ -14,26 +14,26 @@ import java.util.SortedMap; public class SpecialWave extends AbstractWave { private SortedMap monsterMap; - + public SpecialWave(SortedMap monsterMap) { this.monsterMap = monsterMap; this.setType(WaveType.SPECIAL); } - + @Override public Map getMonstersToSpawn(int wave, int playerCount, Arena arena) { // Random number. Random random = new Random(); - int value = random.nextInt(monsterMap.lastKey()); + int value = random.nextInt(monsterMap.lastKey()); // Prepare the monster map. Map result = new HashMap<>(); - + for (Map.Entry entry : monsterMap.entrySet()) { if (value > entry.getKey()) { continue; } - + int amount; switch (entry.getValue().getName()) { case "poweredcreeper": @@ -44,12 +44,12 @@ public class SpecialWave extends AbstractWave case "ghast": amount = 2; break; default: amount = playerCount + 1; break; } - + amount = (int) Math.max(1D, amount * super.getAmountMultiplier()); result.put(entry.getValue(), amount); break; } - + return result; } diff --git a/src/main/java/com/garbagemule/MobArena/waves/types/SupplyWave.java b/src/main/java/com/garbagemule/MobArena/waves/types/SupplyWave.java index c21d040..8673e9d 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/types/SupplyWave.java +++ b/src/main/java/com/garbagemule/MobArena/waves/types/SupplyWave.java @@ -18,48 +18,48 @@ public class SupplyWave extends AbstractWave { private SortedMap monsterMap; private List drops; - + public SupplyWave(SortedMap monsterMap) { this.monsterMap = monsterMap; this.setType(WaveType.SUPPLY); } - + @Override public Map getMonstersToSpawn(int wave, int playerCount, Arena arena) { // Grab the total probability sum. int total = monsterMap.lastKey(); - + // Random number generator. Random random = new Random(); - + // Prepare the monster map. Map monsters = new HashMap<>(); - + int toSpawn = (int) Math.max(1D, playerCount * super.getAmountMultiplier()); - + // Spawn a monster for each player. for (int i = 0; i < toSpawn; i++) { int value = random.nextInt(total) + 1; - + for (Map.Entry entry : monsterMap.entrySet()) { if (value > entry.getKey()) { continue; } - + Integer current = monsters.get(entry.getValue()); monsters.put(entry.getValue(), (current == null ? 1 : current + 1)); break; } } - + // Return the map. return monsters; } - + public List getDropList() { return drops; } - + public void setDropList(List drops) { this.drops = drops; } diff --git a/src/main/java/com/garbagemule/MobArena/waves/types/SwarmWave.java b/src/main/java/com/garbagemule/MobArena/waves/types/SwarmWave.java index 8576f7b..e7378c0 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/types/SwarmWave.java +++ b/src/main/java/com/garbagemule/MobArena/waves/types/SwarmWave.java @@ -14,29 +14,29 @@ public class SwarmWave extends AbstractWave { private MACreature monster; private SwarmAmount amount; - + public SwarmWave(MACreature monster) { this.monster = monster; this.amount = SwarmAmount.LOW; this.setType(WaveType.SWARM); } - + @Override public Map getMonstersToSpawn(int wave, int playerCount, Arena arena) { // Prepare the monster map. Map result = new HashMap<>(); - + // Add the monster and the swarm amount. int toSpawn = (int) Math.max(1D, amount.getAmount(playerCount) * super.getAmountMultiplier()); result.put(monster, toSpawn); - + return result; } - + public SwarmAmount getAmount() { return amount; } - + public void setAmount(SwarmAmount amount) { this.amount = amount; } diff --git a/src/main/java/com/garbagemule/MobArena/waves/types/UpgradeWave.java b/src/main/java/com/garbagemule/MobArena/waves/types/UpgradeWave.java index eb818ce..32e5a20 100644 --- a/src/main/java/com/garbagemule/MobArena/waves/types/UpgradeWave.java +++ b/src/main/java/com/garbagemule/MobArena/waves/types/UpgradeWave.java @@ -21,7 +21,7 @@ public class UpgradeWave extends AbstractWave this.upgrades = upgrades; this.setType(WaveType.UPGRADE); } - + @Override public Map getMonstersToSpawn(int wave, int playerCount, Arena arena) { return new HashMap<>(); @@ -33,7 +33,7 @@ public class UpgradeWave extends AbstractWave list.forEach(thing -> thing.giveTo(p)); } - + public Wave copy() { Map> upgrades = new HashMap<>(); for (Map.Entry> entry : this.upgrades.entrySet()) { diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 2e8d39e..da33e97 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -36,7 +36,7 @@ permissions: mobarena.use.ready: description: Ready to start the battle default: true - + mobarena.admin: description: Gives access to all admin commands default: op @@ -61,7 +61,7 @@ permissions: mobarena.admin.teleport: description: Immune to teleport blocking rules. default: false - + mobarena.setup: description: Gives access to all setup commands default: op diff --git a/src/main/resources/res/config.yml b/src/main/resources/res/config.yml index d10997b..f341e78 100644 --- a/src/main/resources/res/config.yml +++ b/src/main/resources/res/config.yml @@ -1,3 +1,3 @@ global-settings: {} classes: {} -arenas: {} \ No newline at end of file +arenas: {} diff --git a/src/main/resources/res/rewards.yml b/src/main/resources/res/rewards.yml index 452f5c5..f6f278b 100644 --- a/src/main/resources/res/rewards.yml +++ b/src/main/resources/res/rewards.yml @@ -6,4 +6,4 @@ waves: after: '7': minecart, chest_minecart, furnace_minecart '13': iron_sword, iron_pickaxe, iron_shovel - '16': diamond_sword \ No newline at end of file + '16': diamond_sword diff --git a/src/main/resources/res/settings.yml b/src/main/resources/res/settings.yml index 3711fce..8cdd58c 100644 --- a/src/main/resources/res/settings.yml +++ b/src/main/resources/res/settings.yml @@ -43,4 +43,4 @@ use-scoreboards: true isolated-chat: false global-join-announce: false global-end-announce: false -show-death-messages: true \ No newline at end of file +show-death-messages: true diff --git a/src/main/resources/res/waves.yml b/src/main/resources/res/waves.yml index ea946e3..f72566b 100644 --- a/src/main/resources/res/waves.yml +++ b/src/main/resources/res/waves.yml @@ -29,4 +29,4 @@ single: wave: 10 monster: cave_spider health: high - abilities: arrows, root-target, throw-nearby \ No newline at end of file + abilities: arrows, root-target, throw-nearby