forked from GeyserMC/Geyser
Added argument parsing to serverside language processing
This commit is contained in:
parent
c809ddb618
commit
18311e3c1c
2 changed files with 41 additions and 7 deletions
|
@ -34,6 +34,8 @@ import com.github.steveice10.mc.protocol.data.message.TranslationMessage;
|
||||||
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerChatPacket;
|
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerChatPacket;
|
||||||
import com.nukkitx.protocol.bedrock.packet.TextPacket;
|
import com.nukkitx.protocol.bedrock.packet.TextPacket;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Translator(packet = ServerChatPacket.class)
|
@Translator(packet = ServerChatPacket.class)
|
||||||
public class JavaChatTranslator extends PacketTranslator<ServerChatPacket> {
|
public class JavaChatTranslator extends PacketTranslator<ServerChatPacket> {
|
||||||
|
|
||||||
|
@ -61,10 +63,21 @@ public class JavaChatTranslator extends PacketTranslator<ServerChatPacket> {
|
||||||
if (packet.getMessage() instanceof TranslationMessage) {
|
if (packet.getMessage() instanceof TranslationMessage) {
|
||||||
textPacket.setType(TextPacket.Type.TRANSLATION);
|
textPacket.setType(TextPacket.Type.TRANSLATION);
|
||||||
textPacket.setNeedsTranslation(true);
|
textPacket.setNeedsTranslation(true);
|
||||||
textPacket.setParameters(MessageUtils.getTranslationParams(((TranslationMessage) packet.getMessage()).getTranslationParams()));
|
|
||||||
textPacket.setMessage(MessageUtils.getTranslatedBedrockMessage(packet.getMessage(), session.getClientData().getLanguageCode()));
|
String locale = session.getClientData().getLanguageCode();
|
||||||
|
|
||||||
|
List<String> paramsTranslated = MessageUtils.getTranslationParams(((TranslationMessage) packet.getMessage()).getTranslationParams(), locale);
|
||||||
|
textPacket.setParameters(paramsTranslated);
|
||||||
|
|
||||||
|
textPacket.setMessage(MessageUtils.insertParams(MessageUtils.getTranslatedBedrockMessage(packet.getMessage(), locale), paramsTranslated));
|
||||||
} else {
|
} else {
|
||||||
textPacket.setNeedsTranslation(false);
|
textPacket.setNeedsTranslation(false);
|
||||||
|
|
||||||
|
// This make every message get translated which fixes alot of formatting issues
|
||||||
|
// but also causes players to be able to send translation strings as messages
|
||||||
|
// if thats all they send
|
||||||
|
// textPacket.setMessage(MessageUtils.getTranslatedBedrockMessage(packet.getMessage(), session.getClientData().getLanguageCode()));
|
||||||
|
|
||||||
textPacket.setMessage(MessageUtils.getBedrockMessage(packet.getMessage()));
|
textPacket.setMessage(MessageUtils.getBedrockMessage(packet.getMessage()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,14 +41,16 @@ import java.util.*;
|
||||||
|
|
||||||
public class MessageUtils {
|
public class MessageUtils {
|
||||||
|
|
||||||
public static List<String> getTranslationParams(Message[] messages) {
|
public static List<String> getTranslationParams(Message[] messages, String locale) {
|
||||||
List<String> strings = new ArrayList<>();
|
List<String> strings = new ArrayList<>();
|
||||||
for (Message message : messages) {
|
for (Message message : messages) {
|
||||||
if (message instanceof TranslationMessage) {
|
if (message instanceof TranslationMessage) {
|
||||||
TranslationMessage translation = (TranslationMessage) message;
|
TranslationMessage translation = (TranslationMessage) message;
|
||||||
|
|
||||||
|
if (locale == null) {
|
||||||
String builder = "%" + translation.getTranslationKey();
|
String builder = "%" + translation.getTranslationKey();
|
||||||
strings.add(builder);
|
strings.add(builder);
|
||||||
|
}
|
||||||
|
|
||||||
if (translation.getTranslationKey().equals("commands.gamemode.success.other")) {
|
if (translation.getTranslationKey().equals("commands.gamemode.success.other")) {
|
||||||
strings.add("");
|
strings.add("");
|
||||||
|
@ -58,7 +60,12 @@ public class MessageUtils {
|
||||||
strings.add(" - no permission or invalid command!");
|
strings.add(" - no permission or invalid command!");
|
||||||
}
|
}
|
||||||
|
|
||||||
strings.addAll(getTranslationParams(translation.getTranslationParams()));
|
List<String> furtherParams = getTranslationParams(translation.getTranslationParams());
|
||||||
|
if (locale != null) {
|
||||||
|
strings.add(insertParams(getLocaleString(translation.getTranslationKey(), locale), furtherParams));
|
||||||
|
}else{
|
||||||
|
strings.addAll(furtherParams);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
String builder = getFormat(message.getStyle().getFormats()) +
|
String builder = getFormat(message.getStyle().getFormats()) +
|
||||||
getColor(message.getStyle().getColor()) +
|
getColor(message.getStyle().getColor()) +
|
||||||
|
@ -70,6 +77,10 @@ public class MessageUtils {
|
||||||
return strings;
|
return strings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static List<String> getTranslationParams(Message[] messages) {
|
||||||
|
return getTranslationParams(messages, null);
|
||||||
|
}
|
||||||
|
|
||||||
public static String getTranslationText(TranslationMessage message) {
|
public static String getTranslationText(TranslationMessage message) {
|
||||||
return getFormat(message.getStyle().getFormats()) + getColor(message.getStyle().getColor())
|
return getFormat(message.getStyle().getFormats()) + getColor(message.getStyle().getColor())
|
||||||
+ "%" + message.getTranslationKey();
|
+ "%" + message.getTranslationKey();
|
||||||
|
@ -92,7 +103,7 @@ public class MessageUtils {
|
||||||
builder.append(getFormat(msg.getStyle().getFormats()));
|
builder.append(getFormat(msg.getStyle().getFormats()));
|
||||||
builder.append(getColor(msg.getStyle().getColor()));
|
builder.append(getColor(msg.getStyle().getColor()));
|
||||||
if (!(msg.getText() == null)) {
|
if (!(msg.getText() == null)) {
|
||||||
builder.append(getBedrockMessage(msg));
|
builder.append(getTranslatedBedrockMessage(msg, locale));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return builder.toString();
|
return builder.toString();
|
||||||
|
@ -117,6 +128,16 @@ public class MessageUtils {
|
||||||
return getTranslatedBedrockMessage(message);
|
return getTranslatedBedrockMessage(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String insertParams(String message, List<String> params) {
|
||||||
|
String newMessage = message;
|
||||||
|
|
||||||
|
for (String text : params) {
|
||||||
|
newMessage = newMessage.replaceFirst("%s", text);
|
||||||
|
}
|
||||||
|
|
||||||
|
return newMessage;
|
||||||
|
}
|
||||||
|
|
||||||
private static String getColor(ChatColor color) {
|
private static String getColor(ChatColor color) {
|
||||||
String base = "\u00a7";
|
String base = "\u00a7";
|
||||||
switch (color) {
|
switch (color) {
|
||||||
|
|
Loading…
Reference in a new issue