mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-17 01:15:52 +01:00
Convert to the superior language system. (pt. 2)
This commit is contained in:
@@ -8,6 +8,8 @@ import org.reflections.Reflections;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import static emu.grasscutter.utils.Language.translate;
|
||||
|
||||
@SuppressWarnings({"UnusedReturnValue", "unused"})
|
||||
public final class CommandMap {
|
||||
private final Map<String, CommandHandler> commands = new HashMap<>();
|
||||
@@ -109,7 +111,7 @@ public final class CommandMap {
|
||||
public void invoke(Player player, Player targetPlayer, String rawMessage) {
|
||||
rawMessage = rawMessage.trim();
|
||||
if (rawMessage.length() == 0) {
|
||||
CommandHandler.sendMessage(player, Grasscutter.getLanguage().No_command_specified);
|
||||
CommandHandler.sendMessage(player, translate("commands.generic.not_specified"));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -118,11 +120,12 @@ public final class CommandMap {
|
||||
List<String> args = new LinkedList<>(Arrays.asList(split));
|
||||
String label = args.remove(0);
|
||||
String playerId = (player == null) ? consoleId : player.getAccount().getId();
|
||||
// Check for special cases - currently only target command
|
||||
|
||||
// Check for special cases - currently only target command.
|
||||
String targetUidStr = null;
|
||||
if (label.startsWith("@")) { // @[UID]
|
||||
if (label.startsWith("@")) { // @[UID]
|
||||
targetUidStr = label.substring(1);
|
||||
} else if (label.equalsIgnoreCase("target")) { // target [[@]UID]
|
||||
} else if (label.equalsIgnoreCase("target")) { // target [[@]UID]
|
||||
if (args.size() > 0) {
|
||||
targetUidStr = args.get(0);
|
||||
if (targetUidStr.startsWith("@")) {
|
||||
@@ -133,68 +136,64 @@ public final class CommandMap {
|
||||
}
|
||||
}
|
||||
if (targetUidStr != null) {
|
||||
if (targetUidStr.equals("")) { // Clears default targetPlayer
|
||||
if (targetUidStr.equals("")) { // Clears the default targetPlayer.
|
||||
targetPlayerIds.remove(playerId);
|
||||
CommandHandler.sendMessage(player, Grasscutter.getLanguage().Target_cleared);
|
||||
return;
|
||||
} else { // Sets default targetPlayer to the UID given
|
||||
CommandHandler.sendMessage(player, translate("commands.execution.clear_target"));
|
||||
} else { // Sets default targetPlayer to the UID provided.
|
||||
try {
|
||||
int uid = Integer.parseInt(targetUidStr);
|
||||
targetPlayer = Grasscutter.getGameServer().getPlayerByUid(uid);
|
||||
if (targetPlayer == null) {
|
||||
CommandHandler.sendMessage(player, Grasscutter.getLanguage().Player_not_found_or_offline);
|
||||
CommandHandler.sendMessage(player, translate("commands.generic.execution.player_exist_offline_error"));
|
||||
} else {
|
||||
targetPlayerIds.put(playerId, uid);
|
||||
CommandHandler.sendMessage(player, Grasscutter.getLanguage().Target_set.replace("{uid}", targetUidStr));
|
||||
CommandHandler.sendMessage(player, translate("commands.execution.set_target", targetUidStr));
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
CommandHandler.sendMessage(player, Grasscutter.getLanguage().Invalid_UID);
|
||||
CommandHandler.sendMessage(player, translate("commands.execution.uid_error"));
|
||||
}
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Get command handler.
|
||||
CommandHandler handler = this.commands.get(label);
|
||||
if (handler == null) {
|
||||
CommandHandler.sendMessage(player, Grasscutter.getLanguage().Unknown_command + label);
|
||||
CommandHandler.sendMessage(player, translate("commands.generic.unknown_command", label));
|
||||
return;
|
||||
}
|
||||
|
||||
// If any @UID argument is present, override targetPlayer with it
|
||||
// If any @UID argument is present, override targetPlayer with it.
|
||||
for (int i = 0; i < args.size(); i++) {
|
||||
String arg = args.get(i);
|
||||
if (!arg.startsWith("@")) {
|
||||
continue;
|
||||
} else {
|
||||
if (arg.startsWith("@")) {
|
||||
arg = args.remove(i).substring(1);
|
||||
try {
|
||||
int uid = Integer.parseInt(arg);
|
||||
targetPlayer = Grasscutter.getGameServer().getPlayerByUid(uid);
|
||||
if (targetPlayer == null) {
|
||||
CommandHandler.sendMessage(player, Grasscutter.getLanguage().Player_not_found_or_offline);
|
||||
CommandHandler.sendMessage(player, translate("commands.generic.execution.player_exist_offline_error"));
|
||||
return;
|
||||
}
|
||||
break;
|
||||
} catch (NumberFormatException e) {
|
||||
CommandHandler.sendMessage(player, Grasscutter.getLanguage().Invalid_UID);
|
||||
CommandHandler.sendMessage(player, translate("commands.execution.uid_error"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If there's still no targetPlayer at this point, use previously-set target
|
||||
if (targetPlayer == null) {
|
||||
if (targetPlayerIds.containsKey(playerId)) {
|
||||
targetPlayer = Grasscutter.getGameServer().getPlayerByUid(targetPlayerIds.get(playerId)); // We check every time in case the target goes offline after being targeted
|
||||
if (targetPlayer == null) {
|
||||
CommandHandler.sendMessage(player, Grasscutter.getLanguage().Player_not_found_or_offline);
|
||||
CommandHandler.sendMessage(player, translate("commands.generic.execution.player_exist_offline_error"));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
// If there's still no targetPlayer at this point, use local player
|
||||
if (targetPlayer == null) {
|
||||
targetPlayer = player;
|
||||
}
|
||||
// If there's still no targetPlayer at this point, use executor.
|
||||
targetPlayer = player;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -205,12 +204,12 @@ public final class CommandMap {
|
||||
Account account = player.getAccount();
|
||||
if (player != targetPlayer) { // Additional permission required for targeting another player
|
||||
if (!permissionNodeTargeted.isEmpty() && !account.hasPermission(permissionNodeTargeted)) {
|
||||
CommandHandler.sendMessage(player, Grasscutter.getLanguage().You_not_permission_run_command);
|
||||
CommandHandler.sendMessage(player, translate("commands.generic.permission_error"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (!permissionNode.isEmpty() && !account.hasPermission(permissionNode)) {
|
||||
CommandHandler.sendMessage(player, Grasscutter.getLanguage().You_not_permission_run_command);
|
||||
CommandHandler.sendMessage(player, translate("commands.generic.permission_error"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -220,10 +219,8 @@ public final class CommandMap {
|
||||
final Player targetPlayerF = targetPlayer; // Is there a better way to do this?
|
||||
Runnable runnable = () -> handler.execute(player, targetPlayerF, args);
|
||||
if(threading) {
|
||||
Thread command = new Thread(runnable);
|
||||
command.start();
|
||||
}
|
||||
else {
|
||||
new Thread(runnable).start();
|
||||
} else {
|
||||
runnable.run();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user