|
10 | 10 | import net.buildtheearth.buildteamtools.modules.network.NetworkModule; |
11 | 11 | import net.buildtheearth.buildteamtools.modules.network.model.BuildTeam; |
12 | 12 | import net.buildtheearth.buildteamtools.modules.network.model.Permissions; |
| 13 | +import net.buildtheearth.buildteamtools.utils.Utils; |
13 | 14 | import org.bukkit.command.Command; |
14 | 15 | import org.bukkit.command.CommandExecutor; |
15 | 16 | import org.bukkit.command.CommandSender; |
|
18 | 19 | import org.jetbrains.annotations.Nullable; |
19 | 20 | import org.jspecify.annotations.NonNull; |
20 | 21 |
|
| 22 | +import java.util.ArrayList; |
21 | 23 | import java.util.Arrays; |
22 | 24 | import java.util.Collections; |
23 | 25 | import java.util.List; |
@@ -51,6 +53,10 @@ public boolean onCommand(@NonNull CommandSender sender, @NonNull Command command |
51 | 53 | return handleMigrateCommand(player, args); |
52 | 54 | } |
53 | 55 |
|
| 56 | + if (args[0].equalsIgnoreCase("random")) { |
| 57 | + return handleRandomWarpCommand(player, args); |
| 58 | + } |
| 59 | + |
54 | 60 | return handleWarpTeleport(player, args); |
55 | 61 | } |
56 | 62 |
|
@@ -100,6 +106,38 @@ private boolean handleMigrateCommand(@NonNull Player player, String @NonNull [] |
100 | 106 | return true; |
101 | 107 | } |
102 | 108 |
|
| 109 | + private boolean handleRandomWarpCommand(@NonNull Player player, String @NonNull [] args) { |
| 110 | + |
| 111 | + if (!player.hasPermission(Permissions.WARP_RANDOM)) { |
| 112 | + Utils.sendNoPermissionMessage(player, Permissions.WARP_RANDOM); |
| 113 | + return true; |
| 114 | + } |
| 115 | + |
| 116 | + if (args.length > 1) { |
| 117 | + player.sendMessage(ChatHelper.getErrorComponent("Usage: /warp random")); |
| 118 | + return true; |
| 119 | + } |
| 120 | + |
| 121 | + BuildTeam buildTeam = NetworkModule.getInstance().getBuildTeam(); |
| 122 | + if (buildTeam == null) { |
| 123 | + return true; |
| 124 | + } |
| 125 | + |
| 126 | + List<Warp> warps = buildTeam.getWarpGroups().stream() |
| 127 | + .flatMap(group -> group.getWarps().stream()) |
| 128 | + .toList(); |
| 129 | + |
| 130 | + Warp warp = Utils.pickRandom(warps); |
| 131 | + if (warp == null) { |
| 132 | + player.sendMessage("No warp found"); |
| 133 | + return true; |
| 134 | + } |
| 135 | + |
| 136 | + NavigationModule.getInstance().getWarpsComponent().warpPlayer(player, warp); |
| 137 | + |
| 138 | + return true; |
| 139 | + } |
| 140 | + |
103 | 141 | private void handleMigrationResult(@NonNull Player player, @NonNull MigrationResult result, @Nullable Throwable throwable) { |
104 | 142 | if (throwable != null) { |
105 | 143 | player.sendMessage(ChatHelper.getErrorComponent("Something went wrong while migrating the warps: %s", |
@@ -152,14 +190,25 @@ private static boolean checkForWarpUsePermissionAndMessage(@NonNull Player playe |
152 | 190 | @Override |
153 | 191 | public @Nullable List<String> onTabComplete(@NonNull CommandSender sender, @NonNull Command command, @NonNull String label, String @NonNull [] args) { |
154 | 192 | if (args.length == 1) { |
| 193 | + List<String> list = new ArrayList<>(); |
| 194 | + if (sender.hasPermission(Permissions.WARP_CREATE)) list.add("create"); |
| 195 | + if (sender.hasPermission(Permissions.WARP_MIGRATE)) list.add("migrate"); |
| 196 | + if (sender.hasPermission(Permissions.WARP_RANDOM)) list.add("random"); |
| 197 | + |
155 | 198 | String partial = args[0].toLowerCase(); |
156 | 199 | BuildTeam buildTeam = NetworkModule.getInstance().getBuildTeam(); |
157 | 200 | if (buildTeam != null && buildTeam.getWarpGroups() != null) { |
158 | | - return buildTeam.getWarpGroups().stream() |
| 201 | + List<String> warps = buildTeam.getWarpGroups().stream() |
159 | 202 | .flatMap(gr -> gr.getWarps().stream().map(Warp::getName)) |
160 | 203 | .filter(s -> s.toLowerCase().startsWith(partial)) |
161 | 204 | .toList(); |
| 205 | + |
| 206 | + list.addAll(warps); |
162 | 207 | } |
| 208 | + |
| 209 | + return list.stream() |
| 210 | + .filter(s -> s.toLowerCase().startsWith(partial)) |
| 211 | + .toList(); |
163 | 212 | } |
164 | 213 | return Collections.emptyList(); |
165 | 214 |
|
|
0 commit comments