Add support for arguments in translatable text

This commit is contained in:
Felix Cravic 2020-06-29 22:17:28 +02:00
parent 7b9c093709
commit bd3aa9881e
2 changed files with 63 additions and 2 deletions

View File

@ -4,7 +4,9 @@ import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
public class ColoredText {
@ -164,8 +166,27 @@ public class ColoredText {
}
// Translatable component
if (formatString.startsWith("@")) {
String translatableCode = formatString.substring(1);
objects.add(getMessagePart(MessageType.TRANSLATABLE, translatableCode, currentColor));
final String translatableCode = formatString.substring(1);
final boolean hasArgs = translatableCode.contains(",");
if (!hasArgs) {
objects.add(getMessagePart(MessageType.TRANSLATABLE, translatableCode, currentColor));
} else {
// Arguments parsing
// ex: {@translatable.key,arg1,arg2,etc}
final String[] split = translatableCode.split(Pattern.quote(","));
final String finalTranslatableCode = split[0];
final String[] arguments = Arrays.copyOfRange(split, 1, split.length);
JsonObject translatableObject = getMessagePart(MessageType.TRANSLATABLE, finalTranslatableCode, currentColor);
if (arguments.length > 0) {
JsonArray argArray = new JsonArray();
for (String arg : arguments) {
argArray.add(getMessagePart(MessageType.RAW, arg, currentColor));
}
translatableObject.add("with", argArray);
objects.add(translatableObject);
}
}
continue;
}
// Keybind component
@ -186,6 +207,14 @@ public class ColoredText {
return objects;
}
/**
* Get the object representing a message (raw/keybind/translatable)
*
* @param messageType the message type
* @param message the message
* @param color the last color
* @return a json object representing a message
*/
private JsonObject getMessagePart(MessageType messageType, String message, String color) {
JsonObject object = new JsonObject();
switch (messageType) {

View File

@ -0,0 +1,32 @@
package net.minestom.server.chat;
public class TranslatableText {
private String code;
private String[] arguments;
private TranslatableText(String code, String[] arguments) {
this.code = code;
this.arguments = arguments;
}
public static TranslatableText TranslatableText(String code, String... arguments) {
return new TranslatableText(code, arguments);
}
@Override
public String toString() {
final String prefix = "{@";
final String suffix = "}";
String content = code;
if (arguments != null && arguments.length > 0) {
for (String arg : arguments) {
content += "," + arg;
}
}
return prefix + content + suffix;
}
}