diff --git a/src/main/java/io/icker/factions/util/Message.java b/src/main/java/io/icker/factions/util/Message.java index cffc35cd..9c49a53d 100644 --- a/src/main/java/io/icker/factions/util/Message.java +++ b/src/main/java/io/icker/factions/util/Message.java @@ -11,30 +11,38 @@ import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import java.util.ArrayList; +import java.util.UUID; + public class Message { public static PlayerManager manager; private MutableText text; + private final ArrayList children = new ArrayList<>(); public Message(String message) { text = (MutableText) Text.of(message); } + public Message(Text message) { + text = (MutableText) message; + } + public Message(String message, Object... args) { text = (MutableText) Text.of(String.format(message, args)); } public Message add(String message) { - text.append(message); + children.add(new Message(message)); return this; } public Message add(String message, Object... args) { - text.append(String.format(message, args)); + children.add(new Message(String.format(message, args))); return this; } public Message add(Message message) { - text.append(message.raw()); + children.add(message); return this; } @@ -59,7 +67,7 @@ public Message click(String message) { } public Message send(PlayerEntity player, boolean actionBar) { - player.sendMessage(text, actionBar); + player.sendMessage(this.build(player.getUuid()), actionBar); return this; } @@ -87,20 +95,37 @@ public void sendToFactionChat(Faction faction) { } public Message prependFaction(Faction faction) { - text = new Message("") - .add(new Message(faction.getColor().toString() + Formatting.BOLD + faction.getName()).hover(faction.getDescription())) - .filler("»") - .raw() - .append(text); - return this; + Message message = new Message("").add(new Message(faction.getColor().toString() + Formatting.BOLD + faction.getName()).hover(faction.getDescription())) + .filler("»"); + message.add(this); + return message; } public Message filler(String symbol) { - text.append(Text.of(" " + Formatting.RESET + Formatting.DARK_GRAY + symbol + Formatting.RESET + " ")); + children.add(new Message(Text.of(" " + Formatting.RESET + Formatting.DARK_GRAY + symbol + Formatting.RESET + " "))); return this; } public MutableText raw() { - return text; + MutableText built = text; + + for (Message message : children) { + built.append(message.raw()); + } + + return built; + } + + public MutableText build(UUID userId) { + MutableText built = text; + if (text.getString().startsWith("translate:")) { + built = Text.of(Translator.get(text.getString(), User.get(userId).language)).copy().setStyle(text.getStyle()); + } + + for (Message message : children) { + built.append(message.build(userId)); + } + + return built; } } diff --git a/src/main/java/io/icker/factions/util/Translator.java b/src/main/java/io/icker/factions/util/Translator.java new file mode 100644 index 00000000..bbd82bb8 --- /dev/null +++ b/src/main/java/io/icker/factions/util/Translator.java @@ -0,0 +1,45 @@ +package io.icker.factions.util; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; +import net.fabricmc.loader.api.FabricLoader; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.nio.file.Path; +import java.util.HashMap; + +public class Translator { + private static final HashMap> CACHE = new HashMap<>(); + private static final Path DIR = FabricLoader.getInstance().getGameDir().resolve("factions"); + + public static String get(String key, String lang) { + if (!CACHE.containsKey(lang)) { + loadFile(lang); + } + + if (CACHE.get(lang).containsKey(key)) { + return CACHE.get(lang).get(key); + } + + return key; + } + + private static void loadFile(String lang) { + File file = DIR.resolve(lang+".json").toFile(); + + if (!file.exists()) { + CACHE.put(lang, new HashMap<>()); + } else { + Gson gson = new GsonBuilder().create(); + + try { + CACHE.put(lang, gson.fromJson(new FileReader(file), new TypeToken>(){}.getType())); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } + } +}