diff --git a/src/main/java/net/minecraft/entity/player/EntityPlayerMP.java b/src/main/java/net/minecraft/entity/player/EntityPlayerMP.java index d7ad265..5314d20 100644 --- a/src/main/java/net/minecraft/entity/player/EntityPlayerMP.java +++ b/src/main/java/net/minecraft/entity/player/EntityPlayerMP.java @@ -3,6 +3,7 @@ import com.google.common.collect.Sets; import com.mojang.authlib.GameProfile; +import cpw.mods.fml.common.registry.LanguageRegistry; import io.netty.buffer.Unpooled; import java.io.IOException; @@ -1042,6 +1043,14 @@ EnumChatFormatting color = meta.isEmpty() ? null : BasicTypeParser.parseColor(meta); return color == null ? getCommandSenderName() : color.toString() + getCommandSenderName(); } + + public String translate(String key) + { + String translated = LanguageRegistry.instance().getStringLocalization(key, getTranslator()); + if(translated.isEmpty()) + translated = LanguageRegistry.instance().getStringLocalization(key, "en_US"); + return translated.isEmpty() ? key : translated; + } /** * Переносит игрока в другой мир без использования порталов. Обратите diff --git a/src/main/java/org/ultramine/server/Restarter.java b/src/main/java/org/ultramine/server/Restarter.java index f599986..9654320 100644 --- a/src/main/java/org/ultramine/server/Restarter.java +++ b/src/main/java/org/ultramine/server/Restarter.java @@ -1,5 +1,7 @@ package org.ultramine.server; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.ChatStyle; import org.ultramine.server.util.BasicTypeFormatter; import cpw.mods.fml.common.FMLCommonHandler; @@ -11,7 +13,8 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.server.MinecraftServer; import net.minecraft.server.management.ServerConfigurationManager; -import net.minecraft.util.ChatComponentText; + +import static net.minecraft.util.EnumChatFormatting.DARK_PURPLE; @SideOnly(Side.SERVER) public class Restarter @@ -48,11 +51,12 @@ if(toRestart == 3600 || toRestart == 1800 || toRestart == 900 || toRestart == 600 || toRestart == 300 || toRestart == 120 || toRestart == 60 || toRestart == 40 || toRestart == 20 || toRestart == 15 || toRestart < 11) { - mgr.sendChatMsg(new ChatComponentText("\u00a75Рестарт сервера через " + BasicTypeFormatter.formatTime(toRestart*1000, true))); + mgr.sendChatMsg(new ChatComponentTranslation("ultramine.restart.after", BasicTypeFormatter.formatTime(toRestart*1000, true)) + .setChatStyle(new ChatStyle().setColor(DARK_PURPLE))); if(toRestart == 1) { - mgr.sendChatMsg(new ChatComponentText("\u00a75Рестарт сервера!")); - mgr.sendChatMsg(new ChatComponentText("\u00a75Вы будете автоматически отключены от сервера")); + mgr.sendChatMsg(new ChatComponentTranslation("ultramine.restart.now1").setChatStyle(new ChatStyle().setColor(DARK_PURPLE))); + mgr.sendChatMsg(new ChatComponentTranslation("ultramine.restart.now2").setChatStyle(new ChatStyle().setColor(DARK_PURPLE))); } } } @@ -64,7 +68,7 @@ { mgr.saveAllPlayerData(); for(EntityPlayerMP player : GenericIterableFactory.newCastingIterable(mgr.playerEntityList, EntityPlayerMP.class)) - player.playerNetServerHandler.kickPlayerFromServer("\u00a75Сервер был перезапущен\n\u00a7dВы сможете войти через несколько минут"); + player.playerNetServerHandler.kickPlayerFromServer("\u00a75"+player.translate("ultramine.restart.kick1")+"\n\u00a7d"+player.translate("ultramine.restart.kick2")); mgr.getServerInstance().initiateShutdown(); } diff --git a/src/main/java/org/ultramine/server/util/BasicTypeFormatter.java b/src/main/java/org/ultramine/server/util/BasicTypeFormatter.java index abcc7a1..0f170ab 100644 --- a/src/main/java/org/ultramine/server/util/BasicTypeFormatter.java +++ b/src/main/java/org/ultramine/server/util/BasicTypeFormatter.java @@ -6,66 +6,85 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IChatComponent; +import java.time.Duration; + public class BasicTypeFormatter { - public static String formatTime(long timeMills) + public static IChatComponent formatTime(Duration duration) + { + return formatTime(duration, false); + } + + public static IChatComponent formatTime(Duration duration, boolean genitive) + { + return formatTime(duration, genitive, true); + } + + public static IChatComponent formatTime(Duration duration, boolean genitive, boolean printSec) + { + return formatTime(duration.getSeconds()*1000, genitive, printSec); + } + + public static IChatComponent formatTime(long timeMills) { return formatTime(timeMills, false); } - public static String formatTime(long timeMills, boolean genitive) + public static IChatComponent formatTime(long timeMills, boolean genitive) { return formatTime(timeMills, genitive, true); } - public static String formatTime(long timeMills, boolean genitive, boolean printSec) + public static IChatComponent formatTime(long timeMills, boolean genitive, boolean printSec) { int seconds = (int) ((timeMills / 1000) % 60); int minutes = (int) ((timeMills / (60000)) % 60); int hours = (int) ((timeMills / (3600000)) % 24); long days = (timeMills / (86400000)); - String dayN = "дней"; + String dayN; int daydd = (int)(days % 10); - if(daydd == 0 || days > 4 && days < 21) - dayN = "дней"; - else if(daydd == 1) - dayN = "день"; + if(daydd == 1) + dayN = "ultramine.time.day.1"; else if(daydd > 1 && daydd < 5) - dayN = "дня"; + dayN = "ultramine.time.day.2"; + else + dayN = "ultramine.time.day.3"; - String hourN = "часов"; + String hourN; int hourdd = hours % 10; - if(hourdd == 0 || hours > 4 && hours < 21) - hourN = "часов"; - else if(hourdd == 1) - hourN = "час"; + if(hourdd == 1) + hourN = "ultramine.time.hour.1"; else if(hourdd > 1 && hourdd < 5) - hourN = "часа"; + hourN = "ultramine.time.hour.2"; + else + hourN = "ultramine.time.hour.3"; - String minN = "минут"; + String minN; int mindd = minutes % 10; - if(minutes == 0 || minutes > 4 && minutes < 21) - minN = "минут"; - else if(mindd == 1) - minN = genitive ? "минуту" : "минута"; + if(mindd == 1) + minN = genitive ? "ultramine.time.min.1.gen" : "ultramine.time.min.1"; else if(mindd > 1 && mindd < 5) - minN = "минуты"; + minN = "ultramine.time.min.2"; + else + minN = "ultramine.time.min.3"; - String secN = "секунд"; + String secN; int secdd = seconds % 10; - if(secdd == 0 || seconds > 4 && seconds < 21) - secN = "секунд"; - else if(secdd == 1) - secN = genitive ? "секунду" : "секунда"; + if(secdd == 1) + secN = genitive ? "ultramine.time.sec.1.gen" : "ultramine.time.sec.1"; else if(secdd > 1 && secdd < 5) - secN = "секунды"; - - return - (days > 0 ? days + " " + dayN + " " : "") + - (hours > 0 ? hours + " " + hourN + " " : "") + - (minutes > 0 ? minutes + " " + minN + " " : "") + - (printSec && (seconds != 0 || minutes == 0 && hours == 0 && days == 0) ? seconds + " " + secN : ""); + secN = "ultramine.time.sec.2"; + else + secN = "ultramine.time.sec.3"; + + Object comp1 = days > 0 ? new ChatComponentTranslation("%s %s ", days, new ChatComponentTranslation(dayN)) : ""; + Object comp2 = hours > 0 ? new ChatComponentTranslation("%s %s ", hours, new ChatComponentTranslation(hourN)) : ""; + Object comp3 = minutes > 0 ? new ChatComponentTranslation("%s %s ", minutes, new ChatComponentTranslation(minN)) : ""; + Object comp4 = (printSec && (seconds != 0 || minutes == 0 && hours == 0 && days == 0)) ? + new ChatComponentTranslation("%s %s", seconds, new ChatComponentTranslation(secN)) : ""; + + return new ChatComponentTranslation("%s%s%s%s", comp1, comp2, comp3, comp4); } public static IChatComponent formatMessage(EnumChatFormatting tplColor, EnumChatFormatting argsColor, String msg, Object... args) diff --git a/src/main/resources/assets/ultramine/lang/en_US.lang b/src/main/resources/assets/ultramine/lang/en_US.lang index 49180ae..b7d9550 100644 --- a/src/main/resources/assets/ultramine/lang/en_US.lang +++ b/src/main/resources/assets/ultramine/lang/en_US.lang @@ -21,6 +21,27 @@ ultramine.notify.loggedhidden=Joined the server in invisibility ultramine.hidden.chat=You can't write to chat in invisibility +ultramine.time.day.1=day +ultramine.time.day.2=days +ultramine.time.day.3=days +ultramine.time.hour.1=hour +ultramine.time.hour.2=hours +ultramine.time.hour.3=hours +ultramine.time.min.1=minute +ultramine.time.min.1.gen=minute +ultramine.time.min.2=minutes +ultramine.time.min.3=minutes +ultramine.time.sec.1=second +ultramine.time.sec.1.gen=second +ultramine.time.sec.2=seconds +ultramine.time.sec.3=seconds + +ultramine.restart.after=The server will restart in %s +ultramine.restart.now1=The server is restarting now! +ultramine.restart.now2=You will be automatically disconnected from server +ultramine.restart.kick1=The server has been restarted +ultramine.restart.kick2=You will be able to login in few minutes + #Command generic command.generic.world.invalid=Can't find world '%s' command.generic.itemstack.data=Failed to parse item data: %s diff --git a/src/main/resources/assets/ultramine/lang/ru_RU.lang b/src/main/resources/assets/ultramine/lang/ru_RU.lang index 29f259c..56f6de5 100644 --- a/src/main/resources/assets/ultramine/lang/ru_RU.lang +++ b/src/main/resources/assets/ultramine/lang/ru_RU.lang @@ -21,6 +21,27 @@ ultramine.notify.loggedhidden=Присоединился к игре невидимым ultramine.hidden.chat=Вы не можете писать в чат в невидимости +ultramine.time.day.1=день +ultramine.time.day.2=дня +ultramine.time.day.3=дней +ultramine.time.hour.1=час +ultramine.time.hour.2=часа +ultramine.time.hour.3=часов +ultramine.time.min.1=минута +ultramine.time.min.1.gen=минуту +ultramine.time.min.2=минуты +ultramine.time.min.3=минут +ultramine.time.sec.1=секунда +ultramine.time.sec.1.gen=секунду +ultramine.time.sec.2=секунды +ultramine.time.sec.3=секунд + +ultramine.restart.after=Рестарт сервера через %s +ultramine.restart.now1=Рестарт сервера! +ultramine.restart.now2=Вы будете автоматически отключены от сервера +ultramine.restart.kick1=Сервер был перезапущен +ultramine.restart.kick2=Вы сможете войти через несколько минут + #Command generic command.generic.world.invalid=Указанный мир не существует или неинициализирован '%s' command.generic.itemstack.data=Не удалось разобрать предмет: %s