From 3d604a66a858ac299b5fc16b718cb92cbecf5b55 Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Thu, 23 Jul 2026 09:31:53 +0200 Subject: [PATCH 1/4] chore(player): switch to collection --- .../xerus/api/ItemShiftOption.java | 10 ++-- .../net/theevilreaper/xerus/api/Joinable.java | 50 +++++++++---------- .../theevilreaper/xerus/api/team/Team.java | 5 +- .../api/team/event/MultiPlayerTeamEvent.java | 14 +++--- 4 files changed, 40 insertions(+), 39 deletions(-) diff --git a/src/main/java/net/theevilreaper/xerus/api/ItemShiftOption.java b/src/main/java/net/theevilreaper/xerus/api/ItemShiftOption.java index a61f6d0..4298b4b 100644 --- a/src/main/java/net/theevilreaper/xerus/api/ItemShiftOption.java +++ b/src/main/java/net/theevilreaper/xerus/api/ItemShiftOption.java @@ -3,14 +3,14 @@ import net.minestom.server.entity.Player; import net.minestom.server.utils.validate.Check; -import java.util.List; +import java.util.Collection; import java.util.Locale; /** * Contains some methods that help to set the player items. * * @author theEvilReaper - * @version 1.1.0 + * @version 1.2.0 * @since 1.2.0 **/ @FunctionalInterface @@ -42,11 +42,11 @@ default void setEquipment(Player player, int... shiftedSlots) { * @param players the players who receive the equipment * @param shiftedSlots array containing shifted slots for the items */ - default void setEquipment(List players, int... shiftedSlots) { + default void setEquipment(Collection players, int... shiftedSlots) { if (players.isEmpty()) return; - for (int i = 0; i < players.size(); i++) { - this.setEquipment(players.get(i), shiftedSlots); + for (Player player : players) { + this.setEquipment(player, shiftedSlots); } } } diff --git a/src/main/java/net/theevilreaper/xerus/api/Joinable.java b/src/main/java/net/theevilreaper/xerus/api/Joinable.java index cbbafa5..c6e2e37 100644 --- a/src/main/java/net/theevilreaper/xerus/api/Joinable.java +++ b/src/main/java/net/theevilreaper/xerus/api/Joinable.java @@ -3,76 +3,76 @@ import net.minestom.server.entity.Player; import org.jetbrains.annotations.Nullable; -import java.util.Set; +import java.util.Collection; import java.util.function.Consumer; /** - * The interface provides some method to add a single player object or a set off players. + * The interface provides some method to add a single player object or a collection of players. * Each developer can implement the interface into his class but must write his own logic for the methods. * * @author theEvilReaper - * @version 1.1.0 + * @version 1.2.0 * @since 1.0.0 */ public interface Joinable { /** * Add a single player - * @param paramPlayer The player to add + * @param player The player to add */ - default void addPlayer(Player paramPlayer) { - this.addPlayer(paramPlayer, null); + default void addPlayer(Player player) { + this.addPlayer(player, null); } /** * Add a single {@link Player} entry to a structure. - * @param paramPlayer the player to add + * @param player the player to add * @param consumer a consumer which is called to execute some logic */ - void addPlayer(Player paramPlayer, @Nullable Consumer consumer); + void addPlayer(Player player, @Nullable Consumer consumer); /** - * Add a set off players - * @param players The set which contains the players to add + * Add a collection of players + * @param players The collection which contains the players to add */ - default void addPlayers(Set players) { + default void addPlayers(Collection players) { this.addPlayers(players, null); } /** - * Add a set off players - * @param players The set which contains the players to add + * Add a collection of players + * @param players The collection which contains the players to add * @param consumer a consumer which is called to execute some logic */ - void addPlayers(Set players, @Nullable Consumer consumer); + void addPlayers(Collection players, @Nullable Consumer consumer); /** * Remove a single player - * @param paramPlayer The player to remove + * @param player The player to remove */ - default void removePlayer(Player paramPlayer) { - this.removePlayer(paramPlayer, null); + default void removePlayer(Player player) { + this.removePlayer(player, null); } /** * Remove a single {@link Player} entry from a structure. - * @param paramPlayer the player to remove + * @param player the player to remove * @param consumer a consumer which is called to execute some logic */ - void removePlayer(Player paramPlayer, @Nullable Consumer consumer); + void removePlayer(Player player, @Nullable Consumer consumer); /** - * Remove a set off players - * @param players The set which contains the players to remove + * Remove a collection of players + * @param players The collection which contains the players to remove */ - default void removePlayers(Set players) { + default void removePlayers(Collection players) { this.removePlayers(players, null); } /** - * Remove a set off players - * @param players The set which contains the players to remove + * Remove a collection of players + * @param players The collection which contains the players to remove * @param consumer a consumer which is called to execute some logic */ - void removePlayers(Set players, @Nullable Consumer consumer); + void removePlayers(Collection players, @Nullable Consumer consumer); } \ No newline at end of file diff --git a/src/main/java/net/theevilreaper/xerus/api/team/Team.java b/src/main/java/net/theevilreaper/xerus/api/team/Team.java index a11aece..b687cc1 100644 --- a/src/main/java/net/theevilreaper/xerus/api/team/Team.java +++ b/src/main/java/net/theevilreaper/xerus/api/team/Team.java @@ -11,6 +11,7 @@ import net.theevilreaper.xerus.api.team.event.TeamAction; import org.jetbrains.annotations.*; +import java.util.Collection; import java.util.Comparator; import java.util.Set; import java.util.function.Consumer; @@ -75,7 +76,7 @@ default void addPlayer(@NotNull Player player, @Nullable Consumer consum * @param consumer a consumer which is called to execute some logic */ @Override - default void addPlayers(@NotNull Set players, @Nullable Consumer consumer) { + default void addPlayers(@NotNull Collection players, @Nullable Consumer consumer) { if (players.isEmpty()) return; players.removeIf(player -> !getPlayers().add(player)); Runnable successCallback = consumer == null ? EMPTY : () -> getPlayers().forEach(consumer); @@ -103,7 +104,7 @@ default void removePlayer(@NotNull Player paramPlayer, @Nullable Consumer players, @Nullable Consumer consumer) { + default void removePlayers(@NotNull Collection players, @Nullable Consumer consumer) { if (players.isEmpty()) return; players.removeIf(player -> getPlayers().contains(player)); Runnable successCallback = consumer == null ? EMPTY : () -> getPlayers().forEach(consumer); diff --git a/src/main/java/net/theevilreaper/xerus/api/team/event/MultiPlayerTeamEvent.java b/src/main/java/net/theevilreaper/xerus/api/team/event/MultiPlayerTeamEvent.java index 1f3fab6..0bf9e4f 100644 --- a/src/main/java/net/theevilreaper/xerus/api/team/event/MultiPlayerTeamEvent.java +++ b/src/main/java/net/theevilreaper/xerus/api/team/event/MultiPlayerTeamEvent.java @@ -6,20 +6,20 @@ import net.minestom.server.event.trait.CancellableEvent; import org.jetbrains.annotations.NotNull; -import java.util.Set; +import java.util.Collection; /** * The event will be fired if an action is applied to a team where more than one player is involved. * There is a separate event for it, so that the event is called with only one player less * * @author theEvilReaper - * @version 1.1.0 + * @version 1.2.0 * @since 1.0.11 **/ public class MultiPlayerTeamEvent implements Event, CancellableEvent { private final Team team; - private final Set players; + private final Collection players; private final TeamAction action; private boolean cancelled; @@ -27,10 +27,10 @@ public class MultiPlayerTeamEvent implements Event, CancellableEvent { * Event is called when multiple players interact with a team. * * @param team the team which is involved in the event - * @param players the set with the players who are involved in the event + * @param players the collection with the players who are involved in the event * @param teamAction the action for the event */ - public MultiPlayerTeamEvent(@NotNull Team team, @NotNull Set players, @NotNull TeamAction teamAction) { + public MultiPlayerTeamEvent(@NotNull Team team, @NotNull Collection players, @NotNull TeamAction teamAction) { this.team = team; this.players = players; this.action = teamAction; @@ -59,10 +59,10 @@ public boolean isCancelled() { /** * Returns the players who are involved in this event. * - * @return the set with the involved players + * @return the collection with the involved players */ @NotNull - public Set getPlayers() { + public Collection getPlayers() { return players; } From d9df955a1e11be6fcaf01a595c60e1bf323663d6 Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Thu, 23 Jul 2026 09:32:04 +0200 Subject: [PATCH 2/4] test(player): update tests --- .../theevilreaper/xerus/api/JoinableTest.java | 16 ++++++++ .../xerus/api/mocks/TestJoinableImpl.java | 39 ++++++++++++------- 2 files changed, 40 insertions(+), 15 deletions(-) diff --git a/src/test/java/net/theevilreaper/xerus/api/JoinableTest.java b/src/test/java/net/theevilreaper/xerus/api/JoinableTest.java index 1374340..b671fee 100644 --- a/src/test/java/net/theevilreaper/xerus/api/JoinableTest.java +++ b/src/test/java/net/theevilreaper/xerus/api/JoinableTest.java @@ -50,4 +50,20 @@ void testMultipleOperation(Env env) { this.joinable.removePlayers(players); assertTrue(this.joinable.getPlayers().isEmpty()); } + + @Test + void testMultipleOperationWithList(Env env) { + final Instance instance = env.createFlatInstance(); + final var playersList = java.util.List.of( + env.createPlayer(instance, Pos.ZERO), + env.createPlayer(instance, Pos.ZERO) + ); + + assertTrue(this.joinable.getPlayers().isEmpty()); + this.joinable.addPlayers(playersList); + assertEquals(2, this.joinable.getPlayers().size()); + + this.joinable.removePlayers(playersList); + assertTrue(this.joinable.getPlayers().isEmpty()); + } } diff --git a/src/test/java/net/theevilreaper/xerus/api/mocks/TestJoinableImpl.java b/src/test/java/net/theevilreaper/xerus/api/mocks/TestJoinableImpl.java index dd85765..6c9f56d 100644 --- a/src/test/java/net/theevilreaper/xerus/api/mocks/TestJoinableImpl.java +++ b/src/test/java/net/theevilreaper/xerus/api/mocks/TestJoinableImpl.java @@ -5,6 +5,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; import java.util.HashSet; import java.util.Set; import java.util.function.Consumer; @@ -18,47 +19,55 @@ public TestJoinableImpl() { } @Override - public void addPlayer(@NotNull Player paramPlayer) { - this.players.add(paramPlayer); + public void addPlayer(@NotNull Player player) { + this.players.add(player); } @Override - public void addPlayer(@NotNull Player paramPlayer, @Nullable Consumer consumer) { - this.players.add(paramPlayer); + public void addPlayer(@NotNull Player player, @Nullable Consumer consumer) { + this.players.add(player); if (consumer != null) { - consumer.accept(paramPlayer); + consumer.accept(player); } } @Override - public void addPlayers(@NotNull Set players) { + public void addPlayers(@NotNull Collection players) { this.players.addAll(players); } @Override - public void addPlayers(@NotNull Set players, @Nullable Consumer consumer) { - + public void addPlayers(@NotNull Collection players, @Nullable Consumer consumer) { + this.players.addAll(players); + if (consumer != null) { + players.forEach(consumer); + } } @Override - public void removePlayer(@NotNull Player paramPlayer) { - this.players.remove(paramPlayer); + public void removePlayer(@NotNull Player player) { + this.players.remove(player); } @Override - public void removePlayer(@NotNull Player paramPlayer, @Nullable Consumer consumer) { - + public void removePlayer(@NotNull Player player, @Nullable Consumer consumer) { + if (this.players.remove(player) && consumer != null) { + consumer.accept(player); + } } @Override - public void removePlayers(@NotNull Set players) { + public void removePlayers(@NotNull Collection players) { this.players.removeAll(players); } @Override - public void removePlayers(@NotNull Set players, @Nullable Consumer consumer) { - + public void removePlayers(@NotNull Collection players, @Nullable Consumer consumer) { + this.players.removeAll(players); + if (consumer != null) { + players.forEach(consumer); + } } public Set getPlayers() { From 4fa9ea31e73eadd43c83a91fecfdf92ee76b71aa Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Thu, 23 Jul 2026 09:34:44 +0200 Subject: [PATCH 3/4] docs(item): improve documentation --- .../java/net/theevilreaper/xerus/api/ItemShiftOption.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/theevilreaper/xerus/api/ItemShiftOption.java b/src/main/java/net/theevilreaper/xerus/api/ItemShiftOption.java index 4298b4b..24f4bbc 100644 --- a/src/main/java/net/theevilreaper/xerus/api/ItemShiftOption.java +++ b/src/main/java/net/theevilreaper/xerus/api/ItemShiftOption.java @@ -10,7 +10,7 @@ * Contains some methods that help to set the player items. * * @author theEvilReaper - * @version 1.2.0 + * @version 1.3.0 * @since 1.2.0 **/ @FunctionalInterface @@ -26,7 +26,7 @@ public interface ItemShiftOption { void setEquipment(Player player, Locale locale, int... shiftedSlots); /** - * Sets an equipment to an specific player. + * Sets equipment to a specific player. * * @param player the player who receives the equipment * @param shiftedSlots array containing shifted slots for the items @@ -45,8 +45,6 @@ default void setEquipment(Player player, int... shiftedSlots) { default void setEquipment(Collection players, int... shiftedSlots) { if (players.isEmpty()) return; - for (Player player : players) { - this.setEquipment(player, shiftedSlots); - } + players.forEach(player -> setEquipment(player, shiftedSlots)); } } From e70ffe80e9fe3793bc634ee7e7a99d03eda714a5 Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Thu, 23 Jul 2026 09:35:09 +0200 Subject: [PATCH 4/4] chore(item): add missing annotation --- src/main/java/net/theevilreaper/xerus/api/ItemShiftOption.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/theevilreaper/xerus/api/ItemShiftOption.java b/src/main/java/net/theevilreaper/xerus/api/ItemShiftOption.java index 24f4bbc..78e766e 100644 --- a/src/main/java/net/theevilreaper/xerus/api/ItemShiftOption.java +++ b/src/main/java/net/theevilreaper/xerus/api/ItemShiftOption.java @@ -2,6 +2,7 @@ import net.minestom.server.entity.Player; import net.minestom.server.utils.validate.Check; +import org.jetbrains.annotations.Nullable; import java.util.Collection; import java.util.Locale; @@ -23,7 +24,7 @@ public interface ItemShiftOption { * @param locale the locale to determine the right items * @param shiftedSlots specifies whether the items should be added in a different order */ - void setEquipment(Player player, Locale locale, int... shiftedSlots); + void setEquipment(Player player, @Nullable Locale locale, int @Nullable ... shiftedSlots); /** * Sets equipment to a specific player.