diff --git a/src/main/java/de/lunarakai/minecleaner/ArenaList.java b/src/main/java/de/lunarakai/minecleaner/ArenaList.java index 90068d2..b343547 100644 --- a/src/main/java/de/lunarakai/minecleaner/ArenaList.java +++ b/src/main/java/de/lunarakai/minecleaner/ArenaList.java @@ -8,6 +8,7 @@ import java.util.HashMap; import java.util.Iterator; import java.util.UUID; import java.util.logging.Level; +import de.lunarakai.minecleaner.utils.MinecleanerUtils; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.block.Block; @@ -100,6 +101,13 @@ public class ArenaList { save(); } + /** + * checks for any other arena that might be at the same location as the new MinecleanerArena + * + * @param newArena the new Arena that is set to be created + * @return true if another MinecleanerArena (or at least one Block of another arena) is at the same location as newArena otherwise false + * @see MinecleanerArena + */ public boolean collidesWithArena(MinecleanerArena newArena) { for(Location location : newArena.getBlocks()) { if(arenaBlocks.get(location) != null) { @@ -125,7 +133,7 @@ public class ArenaList { if(playersInArena.get(player.getUniqueId()) == null) { return null; } - int arraySize = plugin.getGroupManager().getGroup(player) != null ? plugin.getGroupManager().getGroup(player).getPlayers().size() : 1; + int arraySize = MinecleanerUtils.isPlayerInGroup(plugin, player) ? plugin.getGroupManager().getGroupSize(player) : 1; Player[] players = new Player[arraySize]; if(plugin.getGroupManager().getGroup(player) != null) { @@ -191,18 +199,27 @@ public class ArenaList { if(arena.hasPlayers()) { plugin.getManager().leaveArena(arena.getCurrentPlayers(), true, true); } - - for(UUID id : arena.getBlockDisplays()) { - if(id != null) { - arenaBlockDisplays.remove(id); - } - } - for(Location block : arena.getBlocks()) { - arenaBlocks.remove(block); - } + + removeArenaBlockDisplayIDs(arena); + removeArenaBlocks(arena); + arena.removeBlockDisplays(); arenas.remove(arena.getName()); save(); } + + private void removeArenaBlocks(MinecleanerArena arena) { + for(Location block : arena.getBlocks()) { + arenaBlocks.remove(block); + } + } + + private void removeArenaBlockDisplayIDs(MinecleanerArena arena) { + for(UUID id : arena.getBlockDisplays()) { + if(id != null) { + arenaBlockDisplays.remove(id); + } + } + } } diff --git a/src/main/java/de/lunarakai/minecleaner/ArenaStatus.java b/src/main/java/de/lunarakai/minecleaner/ArenaStatus.java index c348494..0d5eb2a 100644 --- a/src/main/java/de/lunarakai/minecleaner/ArenaStatus.java +++ b/src/main/java/de/lunarakai/minecleaner/ArenaStatus.java @@ -1,8 +1,35 @@ package de.lunarakai.minecleaner; +/** + * Possible Status of a MinecleanerArena + *
  • {@link #INACTIVE}
  • + *
  • {@link #CONFIRM_PLAYING}
  • + *
  • {@link #PLAYING}
  • + *
  • {@link #COMPLETED}
  • + * + * @see MinecleanerArena + * + */ public enum ArenaStatus { + /** + * default state + */ INACTIVE, + + /** + * Active when the player (or group leader) has interacted with an {@link #INACTIVE} arena and + * sees the confirmPlayingInventory to decide if they start a Game or not + * @see MinecleanerManager#getConfirmPlayingInventory() + */ CONFIRM_PLAYING, + + /** + * Active when a Player (or Group) has confirmed to start a Minecleaner Game (and while playing) + */ PLAYING, + + /** + * Active when a Player (or Group) has either won or lost a Mineclenaer Game and the Arena the scheduled for a reset -> {@link #INACTIVE} + */ COMPLETED } diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java index 21fa246..ec3c7b3 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerGroupManager.java @@ -116,6 +116,12 @@ public class MinecleanerGroupManager { return null; } + /** + * loops through all MinecleanerGroups to check if the player is invited to any group + * + * @param player Minecraft Player + * @return the MinecleanerGroup the Player is invited to or null + */ public MinecleanerGroup getInvitedGroup(Player player){ UUID playerUUID = player.getUniqueId(); for (MinecleanerGroup group : groups) { @@ -130,7 +136,20 @@ public class MinecleanerGroupManager { groups.remove(minecleanerGroup); } + /** + * removes all MinecleanerGroups + */ public void deleteAllGroups() { groups.clear(); } + + /** + * Returns the size of the MinecleanerGroup the player is in + * + * @param player the Minecraft Player + * @return the size of the group the player is in + */ + public int getGroupSize(Player player) { + return getGroup(player).getPlayers().size(); + } } diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java index 74a2a53..89f79fd 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java @@ -5,7 +5,6 @@ import java.util.Arrays; import java.util.Iterator; import java.util.UUID; import java.util.logging.Level; -import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.block.Block; @@ -153,7 +152,7 @@ public class MinecleanerListener implements Listener { if(hasConfirmed) { Player[] players; if(plugin.getGroupManager().getGroup(player) != null) { - players = new Player[plugin.getGroupManager().getGroup(player).getPlayers().size()]; + players = new Player[plugin.getGroupManager().getGroupSize(player)]; players[0] = player; } else { players = new Player[1]; @@ -176,7 +175,7 @@ public class MinecleanerListener implements Listener { MinecleanerArena arena = plugin.getArenaList().getPlayerArena(player); if(arena != null) { if(arena.getArenaStatus() == ArenaStatus.CONFIRM_PLAYING && e.getInventory().equals(plugin.getManager().getConfirmPlayingInventory())) { - int arraySize = plugin.getGroupManager().getGroup(player) != null ? plugin.getGroupManager().getGroup(player).getPlayers().size() : 1; + int arraySize = plugin.getGroupManager().getGroup(player) != null ? plugin.getGroupManager().getGroupSize(player) : 1; Player[] players = new Player[arraySize]; if(plugin.getGroupManager().getGroup(player) != null) { diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java index aae4d07..29914f8 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java @@ -158,18 +158,11 @@ public class MinecleanerManager { } public void leaveArena(Player[] players, boolean message, boolean reset) { - MinecleanerGroupManager.MinecleanerGroup group = null; - MinecleanerArena arena; - if(plugin.getGroupManager().getGroup(players[0]) != null) { - group = plugin.getGroupManager().getGroup(players[0]); - arena = plugin.getArenaList().getPlayerArena(Objects.requireNonNull(Bukkit.getPlayer(group.getOwner()))); - } else { - arena = plugin.getArenaList().getPlayerArena(players); - } - Player[] players1 = group != null ? new Player[group.getPlayers().size()] : new Player[1]; + getGroupLeaderOrPlayer player = getGetGroupLeaderOrPlayer(players); + Player[] players1 = player.group() != null ? new Player[player.group().getPlayers().size()] : new Player[1]; if(plugin.getGroupManager().getGroup(players[0]) != null) { int i = 0; - for(Iterator iterator = group.getPlayers().iterator(); iterator.hasNext();) { + for(Iterator iterator = player.group().getPlayers().iterator(); iterator.hasNext();) { Player iteratorPlayer = Bukkit.getPlayer(iterator.next()); players1[i] = iteratorPlayer; i++; @@ -178,14 +171,14 @@ public class MinecleanerManager { players1 = players; } - Preconditions.checkArgument(arena != null, "player is in no arena"); + Preconditions.checkArgument(player.arena() != null, "player is in no arena"); if(reset) { - arena.setArenaStaus(ArenaStatus.INACTIVE); + player.arena().setArenaStaus(ArenaStatus.INACTIVE); for(int i = 0; i < players1.length; i++) { players1[i].closeInventory(); } - arena.removePlayers(); + player.arena().removePlayers(); if(message) { for(int i = 0; i < players.length; i++) { players1[i].sendMessage(NamedTextColor.YELLOW + "Das " + plugin.getDisplayedPluginName() + "spiel wurde abgebrochen."); @@ -196,6 +189,21 @@ public class MinecleanerManager { plugin.getArenaList().setArenaForPlayers(players1, null); } + private @NotNull getGroupLeaderOrPlayer getGetGroupLeaderOrPlayer(Player[] players) { + MinecleanerGroupManager.MinecleanerGroup group = null; + MinecleanerArena arena; + if(plugin.getGroupManager().getGroup(players[0]) != null) { + group = plugin.getGroupManager().getGroup(players[0]); + arena = plugin.getArenaList().getPlayerArena(Objects.requireNonNull(Bukkit.getPlayer(group.getOwner()))); + } else { + arena = plugin.getArenaList().getPlayerArena(players); + } + return new getGroupLeaderOrPlayer(group, arena); + } + + private record getGroupLeaderOrPlayer(MinecleanerGroupManager.MinecleanerGroup group, MinecleanerArena arena) { + } + public void startGame(Player[] players) { MinecleanerArena arena = plugin.getArenaList().getPlayerArena(players); @@ -359,7 +367,7 @@ public class MinecleanerManager { if (arena.getCurrentPlayers() == null) { arena.removePlayers(); } else { - int arraySize = plugin.getGroupManager().getGroup(player) != null ? plugin.getGroupManager().getGroup(player).getPlayers().size() : 1; + int arraySize = plugin.getGroupManager().getGroup(player) != null ? plugin.getGroupManager().getGroupSize(player) : 1; Player[] players = new Player[arraySize]; int i = 0; if(plugin.getGroupManager().getGroup(player) != null) { diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java index a06bc7d..afe57a8 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerPlugin.java @@ -56,17 +56,9 @@ public final class MinecleanerPlugin extends JavaPlugin { } public void onLateEnable() { - if(getServer().getPluginManager().getPlugin("PlayerUUIDCache") != null) { - playerUUIDCache = (PlayerUUIDCache) getServer().getPluginManager().getPlugin("PlayerUUIDCache"); - } else { - this.getLogger().log(Level.WARNING, "PlayerUUIDCache not found."); - } + checkForPlayerUUIDChache(); - if(getServer().getPluginManager().getPlugin("CubesideStatistics") != null) { - cubesideStatistics = getServer().getServicesManager().load(CubesideStatisticsAPI.class); - } else { - this.getLogger().log(Level.WARNING, "Cubeside Statistics not found. No Statistics will be available"); - } + checkForCubesideStatistics(); arenaList = new ArenaList(this); arenaList.load(); @@ -90,6 +82,10 @@ public final class MinecleanerPlugin extends JavaPlugin { minecleanerCommand.addCommandMapping(new DismantleGroupCommand(this), "dismantlegroup"); minecleanerCommand.addCommandMapping(new ListGroupMembersCommand(this), "groupmembers"); + enableCubesideStatisticsCommands(minecleanerCommand); + } + + private void enableCubesideStatisticsCommands(CommandRouter minecleanerCommand) { if(isStatisticsEnabled()) { minecleanerCommand.addCommandMapping(new SettingsCommand(this), "settings"); minecleanerCommand.addCommandMapping(new StatsCommand(this), "stats"); @@ -97,6 +93,22 @@ public final class MinecleanerPlugin extends JavaPlugin { } } + private void checkForCubesideStatistics() { + if(getServer().getPluginManager().getPlugin("CubesideStatistics") != null) { + cubesideStatistics = getServer().getServicesManager().load(CubesideStatisticsAPI.class); + } else { + this.getLogger().log(Level.WARNING, "Cubeside Statistics not found. No Statistics will be available"); + } + } + + private void checkForPlayerUUIDChache() { + if(getServer().getPluginManager().getPlugin("PlayerUUIDCache") != null) { + playerUUIDCache = (PlayerUUIDCache) getServer().getPluginManager().getPlugin("PlayerUUIDCache"); + } else { + this.getLogger().log(Level.WARNING, "PlayerUUIDCache not found."); + } + } + @Override public void onDisable() { if(minecleanerManager != null) { diff --git a/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerUtils.java b/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerUtils.java new file mode 100644 index 0000000..cb9ab00 --- /dev/null +++ b/src/main/java/de/lunarakai/minecleaner/utils/MinecleanerUtils.java @@ -0,0 +1,11 @@ +package de.lunarakai.minecleaner.utils; + +import de.lunarakai.minecleaner.MinecleanerPlugin; +import org.bukkit.entity.Player; + +public class MinecleanerUtils { + + public static boolean isPlayerInGroup(MinecleanerPlugin plugin, Player player) { + return plugin.getGroupManager().getGroup(player) != null; + } +}