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;