mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-02-09 05:52:52 +08:00
Improve translate function
Make commands pass ints and floats instead of manually casting them to string first
This commit is contained in:
parent
4b03770ec1
commit
955004343f
@ -87,7 +87,7 @@ public final class AccountCommand implements CommandHandler {
|
|||||||
account.addPermission("*");
|
account.addPermission("*");
|
||||||
account.save(); // Save account to database.
|
account.save(); // Save account to database.
|
||||||
|
|
||||||
CommandHandler.sendMessage(sender, translate(sender, "commands.account.create", Integer.toString(account.getReservedPlayerUid())));
|
CommandHandler.sendMessage(sender, translate(sender, "commands.account.create", account.getReservedPlayerUid()));
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case "delete":
|
case "delete":
|
||||||
|
@ -211,7 +211,7 @@ public final class GiveCommand implements CommandHandler {
|
|||||||
if (param.avatarData != null) {
|
if (param.avatarData != null) {
|
||||||
Avatar avatar = makeAvatar(param);
|
Avatar avatar = makeAvatar(param);
|
||||||
targetPlayer.addAvatar(avatar);
|
targetPlayer.addAvatar(avatar);
|
||||||
CommandHandler.sendTranslatedMessage(sender, "commands.give.given_avatar", Integer.toString(param.id), Integer.toString(param.lvl), Integer.toString(targetPlayer.getUid()));
|
CommandHandler.sendTranslatedMessage(sender, "commands.give.given_avatar", param.id, param.lvl, targetPlayer.getUid());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// If it's not an avatar, it needs to be a valid item
|
// If it's not an avatar, it needs to be a valid item
|
||||||
@ -223,15 +223,15 @@ public final class GiveCommand implements CommandHandler {
|
|||||||
switch (param.data.getItemType()) {
|
switch (param.data.getItemType()) {
|
||||||
case ITEM_WEAPON:
|
case ITEM_WEAPON:
|
||||||
targetPlayer.getInventory().addItems(makeUnstackableItems(param), ActionReason.SubfieldDrop);
|
targetPlayer.getInventory().addItems(makeUnstackableItems(param), ActionReason.SubfieldDrop);
|
||||||
CommandHandler.sendTranslatedMessage(sender, "commands.give.given_with_level_and_refinement", Integer.toString(param.id), Integer.toString(param.lvl), Integer.toString(param.refinement), Integer.toString(param.amount), Integer.toString(targetPlayer.getUid()));
|
CommandHandler.sendTranslatedMessage(sender, "commands.give.given_with_level_and_refinement", param.id, param.lvl, param.refinement, param.amount, targetPlayer.getUid());
|
||||||
return;
|
return;
|
||||||
case ITEM_RELIQUARY:
|
case ITEM_RELIQUARY:
|
||||||
targetPlayer.getInventory().addItems(makeArtifacts(param), ActionReason.SubfieldDrop);
|
targetPlayer.getInventory().addItems(makeArtifacts(param), ActionReason.SubfieldDrop);
|
||||||
CommandHandler.sendTranslatedMessage(sender, "commands.give.given_level", Integer.toString(param.id), Integer.toString(param.lvl), Integer.toString(param.amount), Integer.toString(targetPlayer.getUid()));
|
CommandHandler.sendTranslatedMessage(sender, "commands.give.given_level", param.id, param.lvl, param.amount, targetPlayer.getUid());
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
targetPlayer.getInventory().addItem(new GameItem(param.data, param.amount), ActionReason.SubfieldDrop);
|
targetPlayer.getInventory().addItem(new GameItem(param.data, param.amount), ActionReason.SubfieldDrop);
|
||||||
CommandHandler.sendTranslatedMessage(sender, "commands.give.given", Integer.toString(param.amount), Integer.toString(param.id), Integer.toString(targetPlayer.getUid()));
|
CommandHandler.sendTranslatedMessage(sender, "commands.give.given", param.amount, param.id, targetPlayer.getUid());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} catch (IllegalArgumentException ignored) {
|
} catch (IllegalArgumentException ignored) {
|
||||||
|
@ -13,11 +13,11 @@ public final class KickCommand implements CommandHandler {
|
|||||||
public void execute(Player sender, Player targetPlayer, List<String> args) {
|
public void execute(Player sender, Player targetPlayer, List<String> args) {
|
||||||
if (sender != null) {
|
if (sender != null) {
|
||||||
CommandHandler.sendTranslatedMessage(sender, "commands.kick.player_kick_player",
|
CommandHandler.sendTranslatedMessage(sender, "commands.kick.player_kick_player",
|
||||||
Integer.toString(sender.getUid()), sender.getAccount().getUsername(),
|
sender.getUid(), sender.getAccount().getUsername(),
|
||||||
Integer.toString(targetPlayer.getUid()), targetPlayer.getAccount().getUsername());
|
targetPlayer.getUid(), targetPlayer.getAccount().getUsername());
|
||||||
} else {
|
} else {
|
||||||
CommandHandler.sendTranslatedMessage(sender, "commands.kick.server_kick_player",
|
CommandHandler.sendTranslatedMessage(sender, "commands.kick.server_kick_player",
|
||||||
Integer.toString(targetPlayer.getUid()), targetPlayer.getAccount().getUsername());
|
targetPlayer.getUid(), targetPlayer.getAccount().getUsername());
|
||||||
}
|
}
|
||||||
|
|
||||||
targetPlayer.getSession().close();
|
targetPlayer.getSession().close();
|
||||||
|
@ -42,6 +42,6 @@ public final class KillAllCommand implements CommandHandler {
|
|||||||
.filter(entity -> entity instanceof EntityMonster)
|
.filter(entity -> entity instanceof EntityMonster)
|
||||||
.toList();
|
.toList();
|
||||||
toKill.forEach(entity -> sceneF.killEntity(entity, 0));
|
toKill.forEach(entity -> sceneF.killEntity(entity, 0));
|
||||||
CommandHandler.sendMessage(sender, translate(sender, "commands.killall.kill_monsters_in_scene", Integer.toString(toKill.size()), Integer.toString(scene.getId())));
|
CommandHandler.sendMessage(sender, translate(sender, "commands.killall.kill_monsters_in_scene", toKill.size(), scene.getId()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ public final class ListCommand implements CommandHandler {
|
|||||||
needUID = args.get(0).equals("uid");
|
needUID = args.get(0).equals("uid");
|
||||||
}
|
}
|
||||||
|
|
||||||
CommandHandler.sendMessage(sender, translate(sender, "commands.list.success", Integer.toString(playersMap.size())));
|
CommandHandler.sendMessage(sender, translate(sender, "commands.list.success", playersMap.size()));
|
||||||
|
|
||||||
if (playersMap.size() != 0) {
|
if (playersMap.size() != 0) {
|
||||||
StringBuilder playerSet = new StringBuilder();
|
StringBuilder playerSet = new StringBuilder();
|
||||||
|
@ -14,7 +14,6 @@ public final class PositionCommand implements CommandHandler {
|
|||||||
public void execute(Player sender, Player targetPlayer, List<String> args) {
|
public void execute(Player sender, Player targetPlayer, List<String> args) {
|
||||||
Position pos = targetPlayer.getPosition();
|
Position pos = targetPlayer.getPosition();
|
||||||
CommandHandler.sendTranslatedMessage(sender, "commands.position.success",
|
CommandHandler.sendTranslatedMessage(sender, "commands.position.success",
|
||||||
Float.toString(pos.getX()), Float.toString(pos.getY()), Float.toString(pos.getZ()),
|
pos.getX(), pos.getY(), pos.getZ(), targetPlayer.getSceneId());
|
||||||
Integer.toString(targetPlayer.getSceneId()));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -76,7 +76,7 @@ public final class SendMailCommand implements CommandHandler {
|
|||||||
if (mailBuilder.constructionStage == 3) {
|
if (mailBuilder.constructionStage == 3) {
|
||||||
if (!mailBuilder.sendToAll) {
|
if (!mailBuilder.sendToAll) {
|
||||||
Grasscutter.getGameServer().getPlayerByUid(mailBuilder.recipient, true).sendMail(mailBuilder.mail);
|
Grasscutter.getGameServer().getPlayerByUid(mailBuilder.recipient, true).sendMail(mailBuilder.mail);
|
||||||
CommandHandler.sendMessage(sender, translate(sender, "commands.sendMail.send_done", Integer.toString(mailBuilder.recipient)));
|
CommandHandler.sendMessage(sender, translate(sender, "commands.sendMail.send_done", mailBuilder.recipient));
|
||||||
} else {
|
} else {
|
||||||
for (Player player : DatabaseHelper.getAllPlayers()) {
|
for (Player player : DatabaseHelper.getAllPlayers()) {
|
||||||
Grasscutter.getGameServer().getPlayerByUid(player.getUid(), true).sendMail(mailBuilder.mail);
|
Grasscutter.getGameServer().getPlayerByUid(player.getUid(), true).sendMail(mailBuilder.mail);
|
||||||
@ -154,7 +154,7 @@ public final class SendMailCommand implements CommandHandler {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mailBuilder.mail.itemList.add(new Mail.MailItem(item, amount, lvl));
|
mailBuilder.mail.itemList.add(new Mail.MailItem(item, amount, lvl));
|
||||||
CommandHandler.sendMessage(sender, translate(sender, "commands.sendMail.send", Integer.toString(amount), Integer.toString(item), Integer.toString(lvl)));
|
CommandHandler.sendMessage(sender, translate(sender, "commands.sendMail.send", amount, item, lvl));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -171,7 +171,7 @@ public final class SendMailCommand implements CommandHandler {
|
|||||||
case 1 -> translate(sender, "commands.sendMail.message");
|
case 1 -> translate(sender, "commands.sendMail.message");
|
||||||
case 2 -> translate(sender, "commands.sendMail.sender");
|
case 2 -> translate(sender, "commands.sendMail.sender");
|
||||||
case 3 -> translate(sender, "commands.sendMail.arguments");
|
case 3 -> translate(sender, "commands.sendMail.arguments");
|
||||||
default -> translate(sender, "commands.sendMail.error", Integer.toString(stage));
|
default -> translate(sender, "commands.sendMail.error", stage);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,8 +160,8 @@ public final class SetPropCommand implements CommandHandler {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (prop.prop != PlayerProperty.PROP_NONE) { // PseudoProps need to do their own error messages
|
if (prop.prop != PlayerProperty.PROP_NONE) { // PseudoProps need to do their own error messages
|
||||||
String min = Integer.toString(targetPlayer.getPropertyMin(prop.prop));
|
int min = targetPlayer.getPropertyMin(prop.prop);
|
||||||
String max = Integer.toString(targetPlayer.getPropertyMax(prop.prop));
|
int max = targetPlayer.getPropertyMax(prop.prop);
|
||||||
CommandHandler.sendTranslatedMessage(sender, "commands.generic.invalid.value_between", prop.name, min, max);
|
CommandHandler.sendTranslatedMessage(sender, "commands.generic.invalid.value_between", prop.name, min, max);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -170,9 +170,7 @@ public final class SetPropCommand implements CommandHandler {
|
|||||||
private boolean setTowerLevel(Player sender, Player targetPlayer, int topFloor) {
|
private boolean setTowerLevel(Player sender, Player targetPlayer, int topFloor) {
|
||||||
List<Integer> floorIds = targetPlayer.getServer().getTowerSystem().getAllFloors();
|
List<Integer> floorIds = targetPlayer.getServer().getTowerSystem().getAllFloors();
|
||||||
if (topFloor < 0 || topFloor > floorIds.size()) {
|
if (topFloor < 0 || topFloor > floorIds.size()) {
|
||||||
String min = Integer.toString(0);
|
CommandHandler.sendTranslatedMessage(sender, "commands.generic.invalid.value_between", "Tower Level", 0, floorIds.size());
|
||||||
String max = Integer.toString(floorIds.size());
|
|
||||||
CommandHandler.sendTranslatedMessage(sender, "commands.generic.invalid.value_between", "Tower Level", min, max);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,7 +116,7 @@ public final class SpawnCommand implements CommandHandler {
|
|||||||
|
|
||||||
scene.addEntity(entity);
|
scene.addEntity(entity);
|
||||||
}
|
}
|
||||||
CommandHandler.sendMessage(sender, translate(sender, "commands.spawn.success", Integer.toString(amount), Integer.toString(id)));
|
CommandHandler.sendMessage(sender, translate(sender, "commands.spawn.success", amount, id));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Position GetRandomPositionInCircle(Position origin, double radius) {
|
private Position GetRandomPositionInCircle(Position origin, double radius) {
|
||||||
|
@ -91,9 +91,9 @@ public final class TalentCommand implements CommandHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
case "getid" -> {
|
case "getid" -> {
|
||||||
CommandHandler.sendTranslatedMessage(sender, "commands.talent.normal_attack_id", Integer.toString(skillIdNorAtk));
|
CommandHandler.sendTranslatedMessage(sender, "commands.talent.normal_attack_id", skillIdNorAtk);
|
||||||
CommandHandler.sendTranslatedMessage(sender, "commands.talent.e_skill_id", Integer.toString(skillIdE));
|
CommandHandler.sendTranslatedMessage(sender, "commands.talent.e_skill_id", skillIdE);
|
||||||
CommandHandler.sendTranslatedMessage(sender, "commands.talent.q_skill_id", Integer.toString(skillIdQ));
|
CommandHandler.sendTranslatedMessage(sender, "commands.talent.q_skill_id", skillIdQ);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -60,8 +60,7 @@ public final class TeleportCommand implements CommandHandler {
|
|||||||
CommandHandler.sendMessage(sender, translate(sender, "commands.teleport.exists_error"));
|
CommandHandler.sendMessage(sender, translate(sender, "commands.teleport.exists_error"));
|
||||||
} else {
|
} else {
|
||||||
CommandHandler.sendMessage(sender, translate(sender, "commands.teleport.success",
|
CommandHandler.sendMessage(sender, translate(sender, "commands.teleport.success",
|
||||||
targetPlayer.getNickname(), Float.toString(x), Float.toString(y),
|
targetPlayer.getNickname(), x, y, z, sceneId)
|
||||||
Float.toString(z), Integer.toString(sceneId))
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ public final class WeatherCommand implements CommandHandler {
|
|||||||
|
|
||||||
if (args.isEmpty()) {
|
if (args.isEmpty()) {
|
||||||
climate = targetPlayer.getClimate();
|
climate = targetPlayer.getClimate();
|
||||||
CommandHandler.sendTranslatedMessage(sender, "commands.weather.status", Integer.toString(weatherId), climate.getShortName());
|
CommandHandler.sendTranslatedMessage(sender, "commands.weather.status", weatherId, climate.getShortName());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,6 +38,6 @@ public final class WeatherCommand implements CommandHandler {
|
|||||||
|
|
||||||
targetPlayer.setWeather(weatherId, climate);
|
targetPlayer.setWeather(weatherId, climate);
|
||||||
climate = targetPlayer.getClimate(); // Might be different to what we set
|
climate = targetPlayer.getClimate(); // Might be different to what we set
|
||||||
CommandHandler.sendTranslatedMessage(sender, "commands.weather.success", Integer.toString(weatherId), climate.getShortName());
|
CommandHandler.sendTranslatedMessage(sender, "commands.weather.success", weatherId, climate.getShortName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -84,6 +84,14 @@ public final class Language {
|
|||||||
public static String translate(String key, Object... args) {
|
public static String translate(String key, Object... args) {
|
||||||
String translated = Grasscutter.getLanguage().get(key);
|
String translated = Grasscutter.getLanguage().get(key);
|
||||||
|
|
||||||
|
for (int i = 0; i < args.length; i++) {
|
||||||
|
args[i] = switch(args[i].getClass().getSimpleName()) {
|
||||||
|
case "String" -> args[i];
|
||||||
|
case "TextStrings" -> ((TextStrings) args[i]).get(0).replace("\\\\n", "\\n"); // TODO: Change this to server language
|
||||||
|
default -> args[i].toString();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return translated.formatted(args);
|
return translated.formatted(args);
|
||||||
} catch (Exception exception) {
|
} catch (Exception exception) {
|
||||||
@ -107,6 +115,14 @@ public final class Language {
|
|||||||
var langCode = Utils.getLanguageCode(player.getAccount().getLocale());
|
var langCode = Utils.getLanguageCode(player.getAccount().getLocale());
|
||||||
String translated = getLanguage(langCode).get(key);
|
String translated = getLanguage(langCode).get(key);
|
||||||
|
|
||||||
|
for (int i = 0; i < args.length; i++) {
|
||||||
|
args[i] = switch(args[i].getClass().getSimpleName()) {
|
||||||
|
case "String" -> args[i];
|
||||||
|
case "TextStrings" -> ((TextStrings) args[i]).getGC(langCode).replace("\\\\n", "\n"); // Note that we don't unescape \n for server console
|
||||||
|
default -> args[i].toString();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return translated.formatted(args);
|
return translated.formatted(args);
|
||||||
} catch (Exception exception) {
|
} catch (Exception exception) {
|
||||||
@ -248,6 +264,11 @@ public final class Language {
|
|||||||
IntStream.range(0, ARR_LANGUAGES.length)
|
IntStream.range(0, ARR_LANGUAGES.length)
|
||||||
.boxed()
|
.boxed()
|
||||||
.collect(Collectors.toMap(i -> ARR_LANGUAGES[i], i -> i)));
|
.collect(Collectors.toMap(i -> ARR_LANGUAGES[i], i -> i)));
|
||||||
|
public static final Object2IntMap<String> MAP_GC_LANGUAGES = // Map "en-US": 0, "zh-CN": 1, ...
|
||||||
|
new Object2IntOpenHashMap<>(
|
||||||
|
IntStream.range(0, ARR_GC_LANGUAGES.length)
|
||||||
|
.boxed()
|
||||||
|
.collect(Collectors.toMap(i -> ARR_GC_LANGUAGES[i], i -> i, (i1, i2) -> i1))); // Have to handle duplicates referring back to the first
|
||||||
public String[] strings = new String[ARR_LANGUAGES.length];
|
public String[] strings = new String[ARR_LANGUAGES.length];
|
||||||
|
|
||||||
public TextStrings() {};
|
public TextStrings() {};
|
||||||
@ -288,6 +309,10 @@ public final class Language {
|
|||||||
return strings[MAP_LANGUAGES.getOrDefault(languageCode, 0)];
|
return strings[MAP_LANGUAGES.getOrDefault(languageCode, 0)];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getGC(String languageCode) {
|
||||||
|
return strings[MAP_GC_LANGUAGES.getOrDefault(languageCode, 0)];
|
||||||
|
}
|
||||||
|
|
||||||
public boolean set(String languageCode, String string) {
|
public boolean set(String languageCode, String string) {
|
||||||
int index = MAP_LANGUAGES.getOrDefault(languageCode, -1);
|
int index = MAP_LANGUAGES.getOrDefault(languageCode, -1);
|
||||||
if (index < 0) return false;
|
if (index < 0) return false;
|
||||||
@ -410,6 +435,9 @@ public final class Language {
|
|||||||
ResourceLoader.loadAll();
|
ResourceLoader.loadAll();
|
||||||
IntSet usedHashes = new IntOpenHashSet();
|
IntSet usedHashes = new IntOpenHashSet();
|
||||||
GameData.getAvatarDataMap().forEach((k, v) -> usedHashes.add((int) v.getNameTextMapHash()));
|
GameData.getAvatarDataMap().forEach((k, v) -> usedHashes.add((int) v.getNameTextMapHash()));
|
||||||
|
GameData.getAvatarSkillDataMap().forEach((k, v) -> {
|
||||||
|
usedHashes.add((int) v.getNameTextMapHash());
|
||||||
|
});
|
||||||
GameData.getItemDataMap().forEach((k, v) -> usedHashes.add((int) v.getNameTextMapHash()));
|
GameData.getItemDataMap().forEach((k, v) -> usedHashes.add((int) v.getNameTextMapHash()));
|
||||||
GameData.getMonsterDataMap().forEach((k, v) -> usedHashes.add((int) v.getNameTextMapHash()));
|
GameData.getMonsterDataMap().forEach((k, v) -> usedHashes.add((int) v.getNameTextMapHash()));
|
||||||
GameData.getMainQuestDataMap().forEach((k, v) -> usedHashes.add((int) v.getTitleTextMapHash()));
|
GameData.getMainQuestDataMap().forEach((k, v) -> usedHashes.add((int) v.getTitleTextMapHash()));
|
||||||
|
@ -305,7 +305,7 @@
|
|||||||
"team": {
|
"team": {
|
||||||
"invalid_usage": "Invalid usage.",
|
"invalid_usage": "Invalid usage.",
|
||||||
"invalid_index": "Index is invalid.",
|
"invalid_index": "Index is invalid.",
|
||||||
"add_too_much": "The server only allows you to have at most %d avatar(s) in your team.",
|
"add_too_much": "The server only allows you to have at most %s avatar(s) in your team.",
|
||||||
"failed_to_add_avatar": "Failed to add avatar ID %s.",
|
"failed_to_add_avatar": "Failed to add avatar ID %s.",
|
||||||
"failed_to_parse_index": "Failed to parse index: %s",
|
"failed_to_parse_index": "Failed to parse index: %s",
|
||||||
"remove_too_much": "You can't remove all your avatars.",
|
"remove_too_much": "You can't remove all your avatars.",
|
||||||
@ -313,7 +313,7 @@
|
|||||||
"index_out_of_range": "The index you specified is out of range.",
|
"index_out_of_range": "The index you specified is out of range.",
|
||||||
"failed_parse_avatar_id": "Failed to parse avatar ID: %s",
|
"failed_parse_avatar_id": "Failed to parse avatar ID: %s",
|
||||||
"avatar_already_in_team": "Avatar is already in team.",
|
"avatar_already_in_team": "Avatar is already in team.",
|
||||||
"avatar_not_found": "Avatar %d not found.",
|
"avatar_not_found": "Avatar %s not found.",
|
||||||
"description": "Modify your team manually."
|
"description": "Modify your team manually."
|
||||||
},
|
},
|
||||||
"teleportAll": {
|
"teleportAll": {
|
||||||
|
Loading…
Reference in New Issue
Block a user