diff --git a/src/main/java/net/minecraft/entity/player/EntityPlayerMP.java b/src/main/java/net/minecraft/entity/player/EntityPlayerMP.java index 3af849d..2ca8b6b 100644 --- a/src/main/java/net/minecraft/entity/player/EntityPlayerMP.java +++ b/src/main/java/net/minecraft/entity/player/EntityPlayerMP.java @@ -106,6 +106,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.ultramine.server.PermissionHandler; +import org.ultramine.server.UMHooks; import org.ultramine.server.chunk.ChunkSendManager; import org.ultramine.server.data.player.PlayerData; import org.ultramine.server.event.UMEventFactory; @@ -820,7 +821,7 @@ public void addChatComponentMessage(IChatComponent p_146105_1_) { - this.playerNetServerHandler.sendPacket(new S02PacketChat(p_146105_1_)); + this.playerNetServerHandler.sendPacket(new S02PacketChat(UMHooks.onChatSend(this, p_146105_1_))); } protected void onItemUseFinish() @@ -902,7 +903,7 @@ public void addChatMessage(IChatComponent p_145747_1_) { - this.playerNetServerHandler.sendPacket(new S02PacketChat(p_145747_1_)); + this.playerNetServerHandler.sendPacket(new S02PacketChat(UMHooks.onChatSend(this, p_145747_1_))); } public boolean canCommandSenderUseCommand(int p_70003_1_, String p_70003_2_) @@ -1010,6 +1011,11 @@ { return renderDistance; } + + public String getTranslator() + { + return translator; + } public PlayerData getData() { diff --git a/src/main/java/org/ultramine/commands/CommandContext.java b/src/main/java/org/ultramine/commands/CommandContext.java index 73df0e7..f8fae7a 100644 --- a/src/main/java/org/ultramine/commands/CommandContext.java +++ b/src/main/java/org/ultramine/commands/CommandContext.java @@ -125,7 +125,7 @@ public void checkSenderPermission(String permission) { - checkSenderPermission(permission, "commands.generic.permission"); + checkSenderPermission(permission, "command.generic.permission"); } public void checkSenderPermission(String permission, String msg) @@ -137,7 +137,7 @@ public void checkSenderPermissionInWorld(String world, String permission) { if (!senderIsServer() && !PermissionHandler.getInstance().has(world, sender.getCommandSenderName(), permission)) - throw new CommandException("commands.generic.permission"); + throw new CommandException("command.generic.permission"); } public void checkPermissionIfArg(String arg, String permission, String msg) @@ -388,7 +388,7 @@ { WorldServer world = MinecraftServer.getServer().getMultiWorld().getWorldByNameOrID(value); if(world == null) - throw new CommandException("commands.generic.world.invalid", value); + throw new CommandException("command.generic.world.invalid", value); return world; } diff --git a/src/main/java/org/ultramine/server/Teleporter.java b/src/main/java/org/ultramine/server/Teleporter.java index f2ab461..7853151 100644 --- a/src/main/java/org/ultramine/server/Teleporter.java +++ b/src/main/java/org/ultramine/server/Teleporter.java @@ -53,7 +53,7 @@ long timeto = target.getData().core().getNextTeleportationTime() - System.currentTimeMillis(); if(timeto > 0 && !target.hasPermission("admin.abilities.skipteleportcooldown")) { - target.addChatMessage(new ChatComponentTranslation("teleporter.fail.cooldownd", timeto/1000).setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED))); + target.addChatMessage(new ChatComponentTranslation("ultramine.teleporter.fail.cooldownd", timeto/1000).setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED))); return; } @@ -89,7 +89,7 @@ player.getData().core().setLastLocation(WarpLocation.getFromPlayer(player)); if(!player.setWorldPositionAndRotation(dimension, x, y, z, yaw, pitch)) - player.addChatMessage(new ChatComponentTranslation("teleporter.fail.dim").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED))); + player.addChatMessage(new ChatComponentTranslation("ultramine.teleporter.fail.dim").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED))); if(isServer) { @@ -117,7 +117,7 @@ this.dst = dst; int delay = ConfigurationHandler.getServerConfig().settings.teleportation.delay; timeEnd = System.currentTimeMillis() + delay*1000; - target.addChatMessage(new ChatComponentTranslation("teleporter.delay", delay).setChatStyle(new ChatStyle().setColor(EnumChatFormatting.GOLD))); + target.addChatMessage(new ChatComponentTranslation("ultramine.teleporter.delay", delay).setChatStyle(new ChatStyle().setColor(EnumChatFormatting.GOLD))); } @@ -141,7 +141,7 @@ { teleporters.remove(this); target.getData().core().setTeleporter(null); - target.addChatMessage(new ChatComponentTranslation("teleporter.canceled").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED))); + target.addChatMessage(new ChatComponentTranslation("ultramine.teleporter.canceled").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED))); } } diff --git a/src/main/java/org/ultramine/server/UMHooks.java b/src/main/java/org/ultramine/server/UMHooks.java index b7a0200..4963ab4 100644 --- a/src/main/java/org/ultramine/server/UMHooks.java +++ b/src/main/java/org/ultramine/server/UMHooks.java @@ -2,12 +2,16 @@ import java.util.UUID; +import cpw.mods.fml.common.registry.LanguageRegistry; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.server.MinecraftServer; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.IChatComponent; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.ultramine.server.event.WorldEventProxy; @@ -99,4 +103,37 @@ if(username != null) nbt.setString("#", username); } + + public static IChatComponent onChatSend(EntityPlayerMP player, IChatComponent msg) + { + if(msg instanceof ChatComponentTranslation) + return onChatSend(player, (ChatComponentTranslation) msg); + return msg; + } + + public static IChatComponent onChatSend(EntityPlayerMP player, ChatComponentTranslation msg) + { + String key = msg.getKey(); + Object[] oldArgs = msg.getFormatArgs(); + Object[] newArgs = new Object[oldArgs.length]; + boolean argsChanged = false; + for(int i = 0; i < oldArgs.length; i++) + { + Object o = oldArgs[i]; + Object o1 = o; + if(o instanceof ChatComponentTranslation) + o1 = onChatSend(player, (ChatComponentTranslation)o); + newArgs[i] = o1; + if(o != o1) + argsChanged = true; + } + if(!argsChanged && !key.startsWith("ultramine.") && !key.startsWith("command.")) //TODO add api for all + return msg; + String translated = LanguageRegistry.instance().getStringLocalization(key, player.getTranslator()); + if(translated.isEmpty()) + translated = LanguageRegistry.instance().getStringLocalization(key, "en_US"); + ChatComponentTranslation text = new ChatComponentTranslation(translated.isEmpty() ? key : translated, newArgs); + text.setChatStyle(msg.getChatStyle()); + return text; + } } diff --git a/src/main/resources/assets/ultramine/lang/en_US.lang b/src/main/resources/assets/ultramine/lang/en_US.lang index a3daf7d..b0e8d33 100644 --- a/src/main/resources/assets/ultramine/lang/en_US.lang +++ b/src/main/resources/assets/ultramine/lang/en_US.lang @@ -1,8 +1,8 @@ #Server core -teleporter.fail.cooldownd=You will be able to teleport in %s seconds -teleporter.fail.dim=Failed to teleport: the world is not exists or was held -teleporter.delay=You will be teleported in %s seconds -teleporter.canceled=Teleportation canceled +ultramine.teleporter.fail.cooldownd=You will be able to teleport in %s seconds +ultramine.teleporter.fail.dim=Failed to teleport: the world is not exists or was held +ultramine.teleporter.delay=You will be teleported in %s seconds +ultramine.teleporter.canceled=Teleportation canceled ultramine.autobroadcast.debugmsg=Server load: %s (Peak: %s), TPS: %s/20, Mobs: %s, Items: %s, Players: %s ultramine.autobackup.start=Autobackup started @@ -22,9 +22,9 @@ ultramine.hidden.chat=You can't write to chat in invisibility #Command generic -commands.generic.world.invalid=Can't find world '%s' -commands.generic.itemstack.data=Failed to parse item data: %s -commands.generic.itemstack.size=Failed to parse stack size: %s +command.generic.world.invalid=Can't find world '%s' +command.generic.itemstack.data=Failed to parse item data: %s +command.generic.itemstack.size=Failed to parse stack size: %s #Vanilla replacements command.tp.usage=/tp [target player] OR /tp [target player] [world] diff --git a/src/main/resources/assets/ultramine/lang/ru_RU.lang b/src/main/resources/assets/ultramine/lang/ru_RU.lang index 8e7ddeb..f6b396f 100644 --- a/src/main/resources/assets/ultramine/lang/ru_RU.lang +++ b/src/main/resources/assets/ultramine/lang/ru_RU.lang @@ -1,8 +1,8 @@ #Server core -teleporter.fail.cooldownd=Вы сможете телепортироваться через %s секунд -teleporter.fail.dim=Не удалось телепортироваться: мир не существует или заблокирован -teleporter.delay=Вы будете телепортированы через %s секунд -teleporter.canceled=Телепортация отменена +ultramine.teleporter.fail.cooldownd=Вы сможете телепортироваться через %s секунд +ultramine.teleporter.fail.dim=Не удалось телепортироваться: мир не существует или заблокирован +ultramine.teleporter.delay=Вы будете телепортированы через %s секунд +ultramine.teleporter.canceled=Телепортация отменена ultramine.autobroadcast.debugmsg=Сервер нагружен на %s (В пике - %s), Тиков в секунду: %s/20, Мобов: %s, Предметов: %s, Игроков: %s ultramine.autobackup.start=Выполняется автоматический бэкап мира @@ -22,9 +22,9 @@ ultramine.hidden.chat=Вы не можете писать в чат в невидимости #Command generic -commands.generic.world.invalid=Указанный мир не существует или неинициализирован '%s' -commands.generic.itemstack.data=Не удалось разобрать предмет: %s -commands.generic.itemstack.size=Не удалось разобрать количество предметов: %s +command.generic.world.invalid=Указанный мир не существует или неинициализирован '%s' +command.generic.itemstack.data=Не удалось разобрать предмет: %s +command.generic.itemstack.size=Не удалось разобрать количество предметов: %s #Vanilla replacements command.tp.usage=/tp [кого] <к кому> ИЛИ /tp [кого] [мир]