From b79d7f91c65db37c3280e989a928d1b90261655c Mon Sep 17 00:00:00 2001 From: Daniel Saukel Date: Thu, 21 Sep 2017 18:15:49 +0200 Subject: [PATCH] Use PlayerCollection --- README.md | 2 +- pom.xml | 4 +- .../dre2n/dungeonsxl/announcer/Announcer.java | 4 +- .../announcer/AnnouncerStartGameTask.java | 2 +- .../dungeonsxl/command/EnterCommand.java | 2 +- .../dungeonsxl/command/GroupCommand.java | 6 +- .../dre2n/dungeonsxl/command/PlayCommand.java | 2 +- .../dre2n/dungeonsxl/command/TestCommand.java | 2 +- .../io/github/dre2n/dungeonsxl/game/Game.java | 2 +- .../dre2n/dungeonsxl/global/GroupSign.java | 2 +- .../dre2n/dungeonsxl/player/DGamePlayer.java | 33 ++++++----- .../dungeonsxl/player/DGlobalPlayer.java | 17 +++--- .../dre2n/dungeonsxl/player/DGroup.java | 55 ++++++++----------- .../dre2n/dungeonsxl/player/DPlayerCache.java | 14 ++++- .../dungeonsxl/player/TimeIsRunningTask.java | 2 +- .../dungeonsxl/world/block/RewardChest.java | 2 +- 16 files changed, 82 insertions(+), 69 deletions(-) diff --git a/README.md b/README.md index d3fa8d7b..2c6d5f66 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ Building DungeonsXL from source requires [Apache Maven](https://maven.apache.org Maven automatically fetches all dependencies and builds DungeonsXL; just run _build.bat_ or enter the command _mvn clean install_. #### DRECommons -[DRECommons](https://github.com/DRE2N/DRECommons) is a util library for common tasks. DungeonsXL contains BRCommons 3.1.1. +[DRECommons](https://github.com/DRE2N/DRECommons) is a util library for common tasks. DungeonsXL contains BRCommons 3.1.2. #### Caliburn API [Caliburn](https://github.com/DRE2N/CaliburnAPI) is an API to read custom items and mobs from config files. DungeonsXL contains Caliburn Beta 0.3. diff --git a/pom.xml b/pom.xml index 43c08223..1ac3412e 100644 --- a/pom.xml +++ b/pom.xml @@ -65,7 +65,7 @@ org.spigotmc spigot-api - 1.12-R0.1-SNAPSHOT + 1.12.2-R0.1-SNAPSHOT provided @@ -77,7 +77,7 @@ io.github.dre2n commons - 3.1.1 + 3.1.3 io.github.dre2n diff --git a/src/main/java/io/github/dre2n/dungeonsxl/announcer/Announcer.java b/src/main/java/io/github/dre2n/dungeonsxl/announcer/Announcer.java index 0c40f04c..70edb3a3 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/announcer/Announcer.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/announcer/Announcer.java @@ -429,8 +429,8 @@ public class Announcer { } else if (dGroup != null) { name = ChatColor.AQUA + dGroup.getName(); playerCount = dGroup.getPlayers().size(); - for (Player player : dGroup.getPlayers()) { - lore.add((dGroup.getCaptain() == player ? ChatColor.GOLD : ChatColor.GRAY) + player.getName()); + for (Player player : dGroup.getPlayers().getOnlinePlayers()) { + lore.add((dGroup.getCaptain().equals(player) ? ChatColor.GOLD : ChatColor.GRAY) + player.getName()); } } diff --git a/src/main/java/io/github/dre2n/dungeonsxl/announcer/AnnouncerStartGameTask.java b/src/main/java/io/github/dre2n/dungeonsxl/announcer/AnnouncerStartGameTask.java index 135d9c1e..f013c9bc 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/announcer/AnnouncerStartGameTask.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/announcer/AnnouncerStartGameTask.java @@ -41,7 +41,7 @@ public class AnnouncerStartGameTask extends BukkitRunnable { if (dGroup == null) { continue; } - for (Player player : dGroup.getPlayers()) { + for (Player player : dGroup.getPlayers().getOnlinePlayers()) { players.add(player); } } diff --git a/src/main/java/io/github/dre2n/dungeonsxl/command/EnterCommand.java b/src/main/java/io/github/dre2n/dungeonsxl/command/EnterCommand.java index 66630fd7..b136f860 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/command/EnterCommand.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/command/EnterCommand.java @@ -85,7 +85,7 @@ public class EnterCommand extends DRECommand { game.addDGroup(joining); joining.sendMessage(DMessage.CMD_ENTER_SUCCESS.getMessage(joining.getName(), target.getName())); - for (Player player : joining.getPlayers()) { + for (Player player : joining.getPlayers().getOnlinePlayers()) { DGamePlayer.create(player, game.getWorld(), game.getType()); } } diff --git a/src/main/java/io/github/dre2n/dungeonsxl/command/GroupCommand.java b/src/main/java/io/github/dre2n/dungeonsxl/command/GroupCommand.java index a4c1a4b4..c7457bd7 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/command/GroupCommand.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/command/GroupCommand.java @@ -254,9 +254,9 @@ public class GroupCommand extends DRECommand { MessageUtil.sendCenteredMessage(sender, "&4&l[ &6" + dGroup.getName() + " &4&l]"); MessageUtil.sendMessage(sender, "&bCaptain: &e" + dGroup.getCaptain().getName()); - String players = ""; - for (Player player : dGroup.getPlayers()) { - players += (player == dGroup.getPlayers().get(0) ? "" : "&b, &e") + player.getName(); + String players = new String(); + for (String player : dGroup.getPlayers().getNames()) { + players += (players.isEmpty() ? "" : "&b, &e") + player; } MessageUtil.sendMessage(sender, "&bPlayers: &e" + players); MessageUtil.sendMessage(sender, "&bDungeon: &e" + (dGroup.getDungeonName() == null ? "N/A" : dGroup.getDungeonName())); diff --git a/src/main/java/io/github/dre2n/dungeonsxl/command/PlayCommand.java b/src/main/java/io/github/dre2n/dungeonsxl/command/PlayCommand.java index 71b63218..c83f0d8a 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/command/PlayCommand.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/command/PlayCommand.java @@ -88,7 +88,7 @@ public class PlayCommand extends DRECommand { dGroup.setDungeon(dungeon); new Game(dGroup, dungeon.getMap()); - for (Player groupPlayer : dGroup.getPlayers()) { + for (Player groupPlayer : dGroup.getPlayers().getOnlinePlayers()) { DGamePlayer.create(groupPlayer, dGroup.getGameWorld()); } } diff --git a/src/main/java/io/github/dre2n/dungeonsxl/command/TestCommand.java b/src/main/java/io/github/dre2n/dungeonsxl/command/TestCommand.java index b6da0241..db7c7938 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/command/TestCommand.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/command/TestCommand.java @@ -77,7 +77,7 @@ public class TestCommand extends DRECommand { return; } - for (Player groupPlayer : dGroup.getPlayers()) { + for (Player groupPlayer : dGroup.getPlayers().getOnlinePlayers()) { DGamePlayer.getByPlayer(groupPlayer).ready(GameTypeDefault.TEST); } diff --git a/src/main/java/io/github/dre2n/dungeonsxl/game/Game.java b/src/main/java/io/github/dre2n/dungeonsxl/game/Game.java index e7618dc4..60c220bd 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/game/Game.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/game/Game.java @@ -377,7 +377,7 @@ public class Game { public Set getPlayers() { Set toReturn = new HashSet<>(); for (DGroup dGroup : dGroups) { - toReturn.addAll(dGroup.getPlayers()); + toReturn.addAll(dGroup.getPlayers().getOnlinePlayers()); } return toReturn; } diff --git a/src/main/java/io/github/dre2n/dungeonsxl/global/GroupSign.java b/src/main/java/io/github/dre2n/dungeonsxl/global/GroupSign.java index 1398fe69..d1a4adc2 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/global/GroupSign.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/global/GroupSign.java @@ -168,7 +168,7 @@ public class GroupSign extends GlobalProtection { int j = 1; Sign rowSign = sign; - for (Player player : dGroup.getPlayers()) { + for (Player player : dGroup.getPlayers().getOnlinePlayers()) { if (j > 3) { j = 0; rowSign = (Sign) sign.getBlock().getRelative(0, -1, 0).getState(); diff --git a/src/main/java/io/github/dre2n/dungeonsxl/player/DGamePlayer.java b/src/main/java/io/github/dre2n/dungeonsxl/player/DGamePlayer.java index 2ae20189..4e4f2372 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/player/DGamePlayer.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/player/DGamePlayer.java @@ -534,26 +534,33 @@ public class DGamePlayer extends DInstancePlayer { }*/ // Give secure objects to other players - int i = 0; - Player groupPlayer; - do { - groupPlayer = dGroup.getPlayers().get(i); - if (groupPlayer != null) { - for (ItemStack itemStack : getPlayer().getInventory()) { - if (itemStack != null) { - if (gameWorld.getSecureObjects().contains(itemStack)) { - groupPlayer.getInventory().addItem(itemStack); - } + Player groupPlayer = null; + for (Player player : dGroup.getPlayers().getOnlinePlayers()) { + if (player.isOnline()) { + groupPlayer = player; + break; + } + } + if (groupPlayer != null) { + for (ItemStack itemStack : getPlayer().getInventory()) { + if (itemStack != null) { + if (gameWorld.getSecureObjects().contains(itemStack)) { + groupPlayer.getInventory().addItem(itemStack); } } } - i++; - } while (groupPlayer == null); + } } if (dGroup.getCaptain().equals(getPlayer()) && dGroup.getPlayers().size() > 0) { // Captain here! - Player newCaptain = dGroup.getPlayers().get(0); + Player newCaptain = null; + for (Player player : dGroup.getPlayers().getOnlinePlayers()) { + if (player.isOnline()) { + newCaptain = player; + break; + } + } dGroup.setCaptain(newCaptain); if (message) { MessageUtil.sendMessage(newCaptain, DMessage.PLAYER_NEW_CAPTAIN.getMessage()); diff --git a/src/main/java/io/github/dre2n/dungeonsxl/player/DGlobalPlayer.java b/src/main/java/io/github/dre2n/dungeonsxl/player/DGlobalPlayer.java index 8f714d82..b73f6601 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/player/DGlobalPlayer.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/player/DGlobalPlayer.java @@ -20,6 +20,7 @@ import io.github.dre2n.commons.chat.MessageUtil; import io.github.dre2n.commons.compatibility.CompatibilityHandler; import io.github.dre2n.commons.compatibility.Version; import io.github.dre2n.commons.player.PlayerUtil; +import io.github.dre2n.commons.player.PlayerWrapper; import io.github.dre2n.dungeonsxl.DungeonsXL; import io.github.dre2n.dungeonsxl.config.DMessage; import io.github.dre2n.dungeonsxl.event.dgroup.DGroupCreateEvent; @@ -28,6 +29,7 @@ import io.github.dre2n.dungeonsxl.global.DPortal; import io.github.dre2n.dungeonsxl.world.DGameWorld; import io.github.dre2n.dungeonsxl.world.DResourceWorld; import java.io.File; +import java.util.UUID; import java.util.concurrent.CopyOnWriteArrayList; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -39,7 +41,7 @@ import org.bukkit.potion.PotionEffect; * * @author Daniel Saukel */ -public class DGlobalPlayer { +public class DGlobalPlayer implements PlayerWrapper { DungeonsXL plugin = DungeonsXL.getInstance(); @@ -86,20 +88,21 @@ public class DGlobalPlayer { } /* Getters and setters */ - /** - * @return the player's name - */ + @Override public String getName() { return player.getName(); } - /** - * @return the Bukkit player - */ + @Override public Player getPlayer() { return player; } + @Override + public UUID getUniqueId() { + return player.getUniqueId(); + } + /** * @return the saved data */ diff --git a/src/main/java/io/github/dre2n/dungeonsxl/player/DGroup.java b/src/main/java/io/github/dre2n/dungeonsxl/player/DGroup.java index a69627e9..af770af6 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/player/DGroup.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/player/DGroup.java @@ -18,6 +18,7 @@ package io.github.dre2n.dungeonsxl.player; import io.github.dre2n.commons.chat.MessageUtil; import io.github.dre2n.commons.misc.NumberUtil; +import io.github.dre2n.commons.player.PlayerCollection; import io.github.dre2n.dungeonsxl.DungeonsXL; import io.github.dre2n.dungeonsxl.config.DMessage; import io.github.dre2n.dungeonsxl.dungeon.Dungeon; @@ -42,6 +43,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -59,8 +61,8 @@ public class DGroup { private String name; private UUID captain; - private List players = new ArrayList<>(); - private List invitedPlayers = new ArrayList<>(); + private PlayerCollection players = new PlayerCollection(); + private PlayerCollection invitedPlayers = new PlayerCollection(); private Dungeon dungeon; private List unplayedFloors = new ArrayList<>(); private DGameWorld gameWorld; @@ -203,23 +205,19 @@ public class DGroup { } /** - * @return the players as a Set + * @return the players */ - public List getPlayers() { - List players = new ArrayList<>(); - for (UUID uuid : this.players) { - players.add(Bukkit.getPlayer(uuid)); - } + public PlayerCollection getPlayers() { return players; } /** * @return the players as a Set */ - public List getDGlobalPlayers() { - List players = new ArrayList<>(); - for (UUID uuid : this.players) { - players.add(dPlayers.getByPlayer(Bukkit.getPlayer(uuid))); + public Set getDGlobalPlayers() { + Set players = new HashSet<>(); + for (UUID uuid : this.players.getUniqueIds()) { + players.add(dPlayers.getByUniqueId(uuid)); } return players; } @@ -227,10 +225,10 @@ public class DGroup { /** * @return the players as a Set */ - public List getDGamePlayers() { - List players = new ArrayList<>(); - for (UUID uuid : this.players) { - DGlobalPlayer dPlayer = dPlayers.getByPlayer(Bukkit.getPlayer(uuid)); + public Set getDGamePlayers() { + Set players = new HashSet<>(); + for (UUID uuid : this.players.getUniqueIds()) { + DGlobalPlayer dPlayer = dPlayers.getByUniqueId(uuid); if (dPlayer instanceof DGamePlayer) { players.add((DGamePlayer) dPlayer); } @@ -305,13 +303,8 @@ public class DGroup { /** * @return the players */ - public List getInvitedPlayers() { - ArrayList players = new ArrayList<>(); - for (UUID uuid : invitedPlayers) { - players.add(Bukkit.getPlayer(uuid)); - } - - return players; + public PlayerCollection getInvitedPlayers() { + return invitedPlayers; } /** @@ -365,7 +358,7 @@ public class DGroup { // Send message if (!silent) { - for (Player groupPlayer : getPlayers()) { + for (Player groupPlayer : players.getOnlinePlayers()) { MessageUtil.sendMessage(groupPlayer, DungeonsXL.getInstance().getMessageConfig().getMessage(DMessage.GROUP_UNINVITED_PLAYER, getCaptain().getName(), player.getName(), name)); } } @@ -378,13 +371,11 @@ public class DGroup { */ public void clearOfflineInvitedPlayers() { ArrayList toRemove = new ArrayList<>(); - - for (UUID uuid : invitedPlayers) { + for (UUID uuid : invitedPlayers.getUniqueIds()) { if (Bukkit.getPlayer(uuid) == null) { toRemove.add(uuid); } } - invitedPlayers.removeAll(toRemove); } @@ -565,7 +556,7 @@ public class DGroup { * @return whether there are players in the group */ public boolean isEmpty() { - return players.isEmpty(); + return players.size() == 0; } /** @@ -773,7 +764,7 @@ public class DGroup { } boolean ready = true; - for (Player player : dGroup.getPlayers()) { + for (Player player : dGroup.getPlayers().getOnlinePlayers()) { DGamePlayer dPlayer = DGamePlayer.getByPlayer(player); if (dPlayer == null) { dPlayer = new DGamePlayer(player, gameWorld); @@ -808,7 +799,7 @@ public class DGroup { floorCount++; - for (Player player : getPlayers()) { + for (Player player : players.getOnlinePlayers()) { DGamePlayer dPlayer = DGamePlayer.getByPlayer(player); if (dPlayer == null) { continue; @@ -910,7 +901,7 @@ public class DGroup { * Send a message to all players in the group */ public void sendMessage(String message) { - for (Player player : getPlayers()) { + for (Player player : players.getOnlinePlayers()) { if (player.isOnline()) { MessageUtil.sendMessage(player, message); } @@ -925,7 +916,7 @@ public class DGroup { */ public void sendMessage(String message, Player... except) { HashSet exceptSet = new HashSet<>(Arrays.asList(except)); - for (Player player : getPlayers()) { + for (Player player : players.getOnlinePlayers()) { if (player.isOnline() && !exceptSet.contains(player)) { MessageUtil.sendMessage(player, message); } diff --git a/src/main/java/io/github/dre2n/dungeonsxl/player/DPlayerCache.java b/src/main/java/io/github/dre2n/dungeonsxl/player/DPlayerCache.java index f3366989..3e7ca6a4 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/player/DPlayerCache.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/player/DPlayerCache.java @@ -20,6 +20,7 @@ import io.github.dre2n.dungeonsxl.DungeonsXL; import io.github.dre2n.dungeonsxl.config.MainConfig; import java.util.ArrayList; import java.util.List; +import java.util.UUID; import java.util.concurrent.CopyOnWriteArrayList; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -60,10 +61,21 @@ public class DPlayerCache { return dGlobalPlayer; } } - return new DGlobalPlayer(player); } + /** + * @return the DGlobalPlayer which represents the player with this UUID + */ + public DGlobalPlayer getByUniqueId(UUID uuid) { + for (DGlobalPlayer dGlobalPlayer : dGlobalPlayers) { + if (dGlobalPlayer.getUniqueId().equals(uuid)) { + return dGlobalPlayer; + } + } + return null; + } + /** * @return the dGlobalPlayers */ diff --git a/src/main/java/io/github/dre2n/dungeonsxl/player/TimeIsRunningTask.java b/src/main/java/io/github/dre2n/dungeonsxl/player/TimeIsRunningTask.java index 4d61c790..9945dc15 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/player/TimeIsRunningTask.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/player/TimeIsRunningTask.java @@ -57,7 +57,7 @@ public class TimeIsRunningTask extends BukkitRunnable { color = ChatColor.DARK_RED.toString(); } finally { - for (Player player : dGroup.getPlayers()) { + for (Player player : dGroup.getPlayers().getOnlinePlayers()) { MessageUtil.sendActionBarMessage(player, DMessage.PLAYER_TIME_LEFT.getMessage(color, String.valueOf(timeLeft))); DGamePlayer dPlayer = DGamePlayer.getByPlayer(player); diff --git a/src/main/java/io/github/dre2n/dungeonsxl/world/block/RewardChest.java b/src/main/java/io/github/dre2n/dungeonsxl/world/block/RewardChest.java index 6a4d1679..20da13f8 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/world/block/RewardChest.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/world/block/RewardChest.java @@ -192,7 +192,7 @@ public class RewardChest extends GameBlock { } } - for (Player player : dGroup.getPlayers()) { + for (Player player : dGroup.getPlayers().getOnlinePlayers()) { DGamePlayer dPlayer = DGamePlayer.getByPlayer(player); if (dPlayer == null) { continue;