Skip to content

Commit be04617

Browse files
committed
Prevent Concurrent Modification Exception in tab completation
1 parent 5aceff3 commit be04617

File tree

15 files changed

+42
-34
lines changed

15 files changed

+42
-34
lines changed

addons/SkylliaBank/src/main/java/fr/euphyllia/skylliabank/commands/BankAdminCommand.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.jetbrains.annotations.NotNull;
1919
import org.jetbrains.annotations.Nullable;
2020

21+
import java.util.ArrayList;
2122
import java.util.List;
2223
import java.util.UUID;
2324
import java.util.concurrent.CompletableFuture;
@@ -535,7 +536,7 @@ public boolean onCommand(@NotNull Plugin plugin, @NotNull CommandSender sender,
535536
String partial = args[1].trim().toLowerCase();
536537

537538
return switch (command) {
538-
case "balance", "setbalance" -> Bukkit.getOnlinePlayers().stream()
539+
case "balance", "setbalance" -> new ArrayList<>(Bukkit.getOnlinePlayers()).stream()
539540
.map(Player::getName)
540541
.filter(name -> name.toLowerCase().startsWith(partial))
541542
.sorted()

addons/SkylliaOre/src/main/java/fr/euphyllia/skylliaore/commands/OreCommands.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.jetbrains.annotations.NotNull;
1919
import org.jetbrains.annotations.Nullable;
2020

21+
import java.util.ArrayList;
2122
import java.util.Collections;
2223
import java.util.List;
2324
import java.util.Map;
@@ -65,9 +66,10 @@ public boolean onCommand(@NotNull Plugin plugin, @NotNull CommandSender sender,
6566
if (args.length == 1) {
6667
String partial = args[0].trim().toLowerCase();
6768

68-
return Bukkit.getOnlinePlayers().stream()
69+
return new ArrayList<>(Bukkit.getOnlinePlayers()).stream()
6970
.map(Player::getName)
7071
.filter(name -> name.toLowerCase().startsWith(partial))
72+
.sorted()
7173
.collect(Collectors.toList());
7274
}
7375

plugin/src/main/java/fr/euphyllia/skyllia/commands/admin/subcommands/ForceDeleteSubCommands.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.bukkit.plugin.Plugin;
2323
import org.jetbrains.annotations.NotNull;
2424

25+
import java.util.ArrayList;
2526
import java.util.Collections;
2627
import java.util.List;
2728
import java.util.UUID;
@@ -92,9 +93,10 @@ public boolean onCommand(@NotNull Plugin plugin, @NotNull CommandSender sender,
9293
if (args.length == 1) {
9394
String partial = args[0].trim().toLowerCase();
9495

95-
return Bukkit.getOnlinePlayers().stream()
96+
return new ArrayList<>(Bukkit.getOnlinePlayers()).stream()
9697
.map(Player::getName)
9798
.filter(name -> name.toLowerCase().startsWith(partial))
99+
.sorted()
98100
.collect(Collectors.toList());
99101

100102
} else if (args.length == 2) {

plugin/src/main/java/fr/euphyllia/skyllia/commands/admin/subcommands/ForceTransferSubCommands.java

+5-9
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.bukkit.plugin.Plugin;
1919
import org.jetbrains.annotations.NotNull;
2020

21+
import java.util.ArrayList;
2122
import java.util.Collections;
2223
import java.util.List;
2324
import java.util.UUID;
@@ -56,13 +57,6 @@ public boolean onCommand(@NotNull Plugin plugin, @NotNull CommandSender sender,
5657
previousOwnerId = Bukkit.getPlayerUniqueId(previousOwnerName);
5758
}
5859

59-
UUID newOwnerId;
60-
try {
61-
newOwnerId = UUID.fromString(newOwnerName);
62-
} catch (IllegalArgumentException ignored) {
63-
newOwnerId = Bukkit.getPlayerUniqueId(newOwnerName);
64-
}
65-
6660
SkyblockManager skyblockManager = Main.getPlugin(Main.class).getInterneAPI().getSkyblockManager();
6761
Island island = skyblockManager.getIslandByOwner(previousOwnerId).join();
6862

@@ -126,18 +120,20 @@ public boolean onCommand(@NotNull Plugin plugin, @NotNull CommandSender sender,
126120
// ARG 1 → Nom du premier joueur
127121
if (args.length == 1) {
128122
String partial = args[0].trim().toLowerCase();
129-
return Bukkit.getOnlinePlayers().stream()
123+
return new ArrayList<>(Bukkit.getOnlinePlayers()).stream()
130124
.map(Player::getName)
131125
.filter(name -> name.toLowerCase().startsWith(partial))
126+
.sorted()
132127
.collect(Collectors.toList());
133128
}
134129

135130
// ARG 2 → Nom du deuxième joueur
136131
if (args.length == 2) {
137132
String partial = args[1].trim().toLowerCase();
138-
return Bukkit.getOnlinePlayers().stream()
133+
return new ArrayList<>(Bukkit.getOnlinePlayers()).stream()
139134
.map(Player::getName)
140135
.filter(name -> name.toLowerCase().startsWith(partial))
136+
.sorted()
141137
.collect(Collectors.toList());
142138
}
143139

plugin/src/main/java/fr/euphyllia/skyllia/commands/admin/subcommands/SetMaxMembersSubCommands.java

+3-5
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,7 @@
1515
import org.bukkit.plugin.Plugin;
1616
import org.jetbrains.annotations.NotNull;
1717

18-
import java.util.Arrays;
19-
import java.util.Collections;
20-
import java.util.List;
21-
import java.util.UUID;
18+
import java.util.*;
2219
import java.util.stream.Collectors;
2320
import java.util.stream.Stream;
2421

@@ -86,9 +83,10 @@ public boolean onCommand(@NotNull Plugin plugin, @NotNull CommandSender sender,
8683
// ARG #1 → Nom du joueur
8784
if (args.length == 1) {
8885
String partial = args[0].trim().toLowerCase();
89-
return Bukkit.getOnlinePlayers().stream()
86+
return new ArrayList<>(Bukkit.getOnlinePlayers()).stream()
9087
.map(Player::getName)
9188
.filter(name -> name.toLowerCase().startsWith(partial))
89+
.sorted()
9290
.collect(Collectors.toList());
9391
} else if (args.length == 2) {
9492
String partial = args[1].trim().toLowerCase();

plugin/src/main/java/fr/euphyllia/skyllia/commands/admin/subcommands/SetSizeSubCommands.java

+3-5
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,7 @@
1515
import org.bukkit.plugin.Plugin;
1616
import org.jetbrains.annotations.NotNull;
1717

18-
import java.util.Arrays;
19-
import java.util.Collections;
20-
import java.util.List;
21-
import java.util.UUID;
18+
import java.util.*;
2219
import java.util.stream.Collectors;
2320
import java.util.stream.Stream;
2421

@@ -86,9 +83,10 @@ public boolean onCommand(@NotNull Plugin plugin, @NotNull CommandSender sender,
8683
// ---------- ARG #1 : Nom du joueur ----------
8784
if (args.length == 1) {
8885
String partial = args[0].trim().toLowerCase();
89-
return Bukkit.getOnlinePlayers().stream()
86+
return new ArrayList<>(Bukkit.getOnlinePlayers()).stream()
9087
.map(Player::getName)
9188
.filter(name -> name.toLowerCase().startsWith(partial))
89+
.sorted()
9290
.collect(Collectors.toList());
9391
}
9492

plugin/src/main/java/fr/euphyllia/skyllia/commands/common/subcommands/BanSubCommand.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.bukkit.plugin.Plugin;
1919
import org.jetbrains.annotations.NotNull;
2020

21+
import java.util.ArrayList;
2122
import java.util.Collections;
2223
import java.util.List;
2324
import java.util.stream.Collectors;
@@ -79,9 +80,10 @@ public boolean onCommand(@NotNull Plugin plugin, @NotNull CommandSender sender,
7980
public @NotNull List<String> onTabComplete(@NotNull Plugin plugin, @NotNull CommandSender sender, @NotNull String[] args) {
8081
if (args.length == 1) {
8182
String partial = args[0].trim().toLowerCase();
82-
return Bukkit.getOnlinePlayers().stream()
83+
return new ArrayList<>(Bukkit.getOnlinePlayers()).stream()
8384
.map(CommandSender::getName)
8485
.filter(name -> name.toLowerCase().startsWith(partial))
86+
.sorted()
8587
.collect(Collectors.toList());
8688
}
8789
return Collections.emptyList();

plugin/src/main/java/fr/euphyllia/skyllia/commands/common/subcommands/CreateSubCommand.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535

3636
import java.util.*;
3737
import java.util.concurrent.CompletableFuture;
38+
import java.util.concurrent.ConcurrentHashMap;
3839
import java.util.concurrent.atomic.AtomicReference;
3940

4041
public class CreateSubCommand implements SubCommandInterface {
@@ -139,12 +140,13 @@ public boolean onCommand(@NotNull Plugin plugin, @NotNull CommandSender sender,
139140
if (args.length == 1) {
140141
String partial = args[0].trim().toLowerCase();
141142
List<String> nameSchem = new ArrayList<>();
142-
ConfigToml.schematicWorldMap.forEach((key, schematicWorld) -> {
143+
for (Map.Entry<String, ConcurrentHashMap<String, SchematicSetting>> entry : ConfigToml.schematicWorldMap.entrySet()) {
144+
String key = entry.getKey();
143145
if (CacheCommands.createTabCompleteCache.getUnchecked(new CacheCommands.CreateCacheCommandsTabs(sender, key))
144146
&& key.toLowerCase().startsWith(partial)) {
145147
nameSchem.add(key);
146148
}
147-
});
149+
}
148150

149151
return nameSchem;
150152
}

plugin/src/main/java/fr/euphyllia/skyllia/commands/common/subcommands/DelWarpSubCommand.java

+1
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ public boolean onCommand(@NotNull Plugin plugin, @NotNull CommandSender sender,
8484
List<String> warpList = CacheCommands.warpTabCompleteCache.getUnchecked(player.getUniqueId());
8585
return warpList.stream()
8686
.filter(warp -> warp.toLowerCase().startsWith(partial))
87+
.sorted()
8788
.collect(Collectors.toList());
8889
}
8990
}

plugin/src/main/java/fr/euphyllia/skyllia/commands/common/subcommands/DemoteSubCommand.java

+1
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ public boolean onCommand(@NotNull Plugin plugin, @NotNull CommandSender sender,
9393
return island.getMembersCached().stream()
9494
.map(Players::getLastKnowName)
9595
.filter(cmd -> cmd.toLowerCase().startsWith(partial))
96+
.sorted()
9697
.toList();
9798
}
9899
return Collections.emptyList();

plugin/src/main/java/fr/euphyllia/skyllia/commands/common/subcommands/ExpelSubCommand.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.bukkit.plugin.Plugin;
2424
import org.jetbrains.annotations.NotNull;
2525

26+
import java.util.ArrayList;
2627
import java.util.Collections;
2728
import java.util.List;
2829
import java.util.stream.Collectors;
@@ -114,9 +115,10 @@ public boolean onCommand(@NotNull Plugin plugin, @NotNull CommandSender sender,
114115
public @NotNull List<String> onTabComplete(@NotNull Plugin plugin, @NotNull CommandSender sender, @NotNull String[] args) {
115116
if (args.length == 1) {
116117
String partial = args[0].trim().toLowerCase();
117-
return Bukkit.getOnlinePlayers().stream()
118+
return new ArrayList<>(Bukkit.getOnlinePlayers()).stream()
118119
.map(CommandSender::getName)
119120
.filter(name -> name.toLowerCase().startsWith(partial))
121+
.sorted()
120122
.collect(Collectors.toList());
121123
}
122124
return Collections.emptyList();

plugin/src/main/java/fr/euphyllia/skyllia/commands/common/subcommands/InviteSubCommand.java

+4-6
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,7 @@
2121
import org.bukkit.plugin.Plugin;
2222
import org.jetbrains.annotations.NotNull;
2323

24-
import java.util.Collections;
25-
import java.util.LinkedList;
26-
import java.util.List;
27-
import java.util.UUID;
24+
import java.util.*;
2825
import java.util.stream.Collectors;
2926
import java.util.stream.Stream;
3027

@@ -81,16 +78,17 @@ public boolean onCommand(@NotNull Plugin plugin, @NotNull CommandSender sender,
8178
String partial = args[0].trim().toLowerCase();
8279
return Stream.concat(
8380
Stream.of("accept", "decline", "delete"),
84-
Bukkit.getOnlinePlayers()
81+
new ArrayList<>(Bukkit.getOnlinePlayers())
8582
.stream()
8683
.map(Player::getName)
8784
).filter(cmd -> cmd.toLowerCase().startsWith(partial)).collect(Collectors.toList());
8885
} else if (args.length == 2) {
8986
String partial = args[1].trim().toLowerCase();
9087

91-
return Bukkit.getOnlinePlayers().stream()
88+
return new ArrayList<>(Bukkit.getOnlinePlayers()).stream()
9289
.map(CommandSender::getName)
9390
.filter(name -> name.toLowerCase().startsWith(partial))
91+
.sorted()
9492
.collect(Collectors.toList());
9593
}
9694
return Collections.emptyList();

plugin/src/main/java/fr/euphyllia/skyllia/commands/common/subcommands/KickSubCommand.java

+1
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ public boolean onCommand(@NotNull Plugin plugin, @NotNull CommandSender sender,
8787
return island.getMembersCached().stream()
8888
.map(Players::getLastKnowName)
8989
.filter(cmd -> cmd.toLowerCase().startsWith(partial))
90+
.sorted()
9091
.toList();
9192
}
9293
return Collections.emptyList();

plugin/src/main/java/fr/euphyllia/skyllia/commands/common/subcommands/TrustSubCommand.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.bukkit.plugin.Plugin;
2020
import org.jetbrains.annotations.NotNull;
2121

22+
import java.util.ArrayList;
2223
import java.util.Collections;
2324
import java.util.List;
2425
import java.util.UUID;
@@ -75,9 +76,10 @@ public boolean onCommand(@NotNull Plugin plugin, @NotNull CommandSender sender,
7576
public @NotNull List<String> onTabComplete(@NotNull Plugin plugin, @NotNull CommandSender sender, @NotNull String[] args) {
7677
if (args.length == 1) {
7778
String partial = args[0].trim().toLowerCase();
78-
return Bukkit.getOnlinePlayers().stream()
79+
return new ArrayList<>(Bukkit.getOnlinePlayers()).stream()
7980
.map(CommandSender::getName)
8081
.filter(name -> name.toLowerCase().startsWith(partial))
82+
.sorted()
8183
.collect(Collectors.toList());
8284
}
8385
return Collections.emptyList();

plugin/src/main/java/fr/euphyllia/skyllia/commands/common/subcommands/VisitSubCommand.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.bukkit.plugin.Plugin;
2525
import org.jetbrains.annotations.NotNull;
2626

27+
import java.util.ArrayList;
2728
import java.util.Collections;
2829
import java.util.List;
2930
import java.util.UUID;
@@ -106,9 +107,10 @@ public boolean onCommand(@NotNull Plugin plugin, @NotNull CommandSender sender,
106107
public @NotNull List<String> onTabComplete(@NotNull Plugin plugin, @NotNull CommandSender sender, @NotNull String[] args) {
107108
if (args.length == 1) {
108109
String partial = args[0].trim().toLowerCase();
109-
return Bukkit.getOnlinePlayers().stream()
110+
return new ArrayList<>(Bukkit.getOnlinePlayers()).stream()
110111
.map(CommandSender::getName)
111112
.filter(name -> name.toLowerCase().startsWith(partial))
113+
.sorted()
112114
.collect(Collectors.toList());
113115
}
114116
return Collections.emptyList();

0 commit comments

Comments
 (0)