diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java index 8030bdf..b0a8d1e 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -406,6 +406,7 @@ if(!isSinglePlayer()) WatchdogThread.doStart(); long curWait = 0L; + long curPickWait = 0L; for (long lastTick = 0L; this.serverRunning; this.serverIsRunning = true) { long curTime = System.nanoTime(); @@ -426,6 +427,13 @@ currentTPS = (currentTPS * 0.95) + (1E9 / (curTime - lastTick) * 0.05); currentWait = (long)(currentWait * 0.95 + curWait * 0.05); + if(curWait < curPickWait) + curPickWait = curWait; + if(tickCounter % 20 == 0) + { + pickWait = curPickWait; + curPickWait = TICK_TIME; + } curWait = 0; lastTick = curTime; @@ -1480,6 +1488,7 @@ public double currentTPS = 20; private long catchupTime = 0; public long currentWait = TICK_TIME; + public long pickWait = TICK_TIME; public final long startTime = System.currentTimeMillis(); private final MultiWorld multiworld = new MultiWorld(this); private IPermissionManager permissionManager; diff --git a/src/main/java/org/ultramine/commands/CommandContext.java b/src/main/java/org/ultramine/commands/CommandContext.java index 8a4a741..0c9b4e1 100644 --- a/src/main/java/org/ultramine/commands/CommandContext.java +++ b/src/main/java/org/ultramine/commands/CommandContext.java @@ -139,7 +139,8 @@ checkSenderPermission(permission, msg); } - public void sendMessage(EnumChatFormatting tplColor, EnumChatFormatting argsColor, String msg, Object... args) + + private IChatComponent formatMessage(EnumChatFormatting tplColor, EnumChatFormatting argsColor, String msg, Object... args) { for(int i = 0; i < args.length; i++) { @@ -150,7 +151,12 @@ ChatComponentTranslation comp = new ChatComponentTranslation(msg, args); comp.getChatStyle().setColor(tplColor); - sender.addChatMessage(comp); + return comp; + } + + public void sendMessage(EnumChatFormatting tplColor, EnumChatFormatting argsColor, String msg, Object... args) + { + sender.addChatMessage(formatMessage(tplColor, argsColor, msg, args)); } public void sendMessage(EnumChatFormatting argsColor, String msg, Object... args) @@ -160,7 +166,22 @@ public void sendMessage(String msg, Object... args) { - sendMessage(EnumChatFormatting.GOLD, EnumChatFormatting.YELLOW, msg, args); + sendMessage(EnumChatFormatting.YELLOW, msg, args); + } + + public void broadcast(EnumChatFormatting tplColor, EnumChatFormatting argsColor, String msg, Object... args) + { + getServer().getConfigurationManager().sendChatMsg(formatMessage(tplColor, argsColor, msg, args)); + } + + public void broadcast(EnumChatFormatting argsColor, String msg, Object... args) + { + broadcast(EnumChatFormatting.DARK_PURPLE, argsColor, msg, args); + } + + public void broadcast(String msg, Object... args) + { + broadcast(EnumChatFormatting.DARK_PURPLE, msg, args); } public void throwBadUsage() @@ -344,6 +365,11 @@ { return BasicTypeParser.parseItemStack(asString()); } + + public int asTimeMills() + { + return BasicTypeParser.parseTime(asString()); + } } public static class Builder diff --git a/src/main/java/org/ultramine/commands/basic/BasicCommands.java b/src/main/java/org/ultramine/commands/basic/BasicCommands.java index 4171fc2..ee64ac0 100644 --- a/src/main/java/org/ultramine/commands/basic/BasicCommands.java +++ b/src/main/java/org/ultramine/commands/basic/BasicCommands.java @@ -5,6 +5,7 @@ import static net.minecraft.util.EnumChatFormatting.*; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; import net.minecraft.util.ChatComponentTranslation; import net.minecraft.util.ChatStyle; import net.minecraft.util.MathHelper; @@ -333,4 +334,22 @@ player.setGameType(newtype); } + + @Command( + name = "custmsg", + group = "admin", + permissions = {"command.custmsg"}, + syntax = { + "[all] ...", + " ..." + } + ) + public static void custmsg(CommandContext ctx) + { + String msg = ctx.get("msg").asString().replace('&', '\u00a7'); + if(ctx.getAction().equals("all")) + ctx.broadcast(WHITE, WHITE, msg); + else + ctx.get("player").asPlayer().addChatMessage(new ChatComponentText(msg)); + } } diff --git a/src/main/java/org/ultramine/commands/basic/TechCommands.java b/src/main/java/org/ultramine/commands/basic/TechCommands.java index 5096e53..b655d1e 100644 --- a/src/main/java/org/ultramine/commands/basic/TechCommands.java +++ b/src/main/java/org/ultramine/commands/basic/TechCommands.java @@ -19,6 +19,7 @@ import org.ultramine.commands.Command; import org.ultramine.commands.CommandContext; import org.ultramine.server.MultiWorld; +import org.ultramine.server.Restarter; import org.ultramine.server.Teleporter; import cpw.mods.fml.common.FMLCommonHandler; @@ -57,12 +58,15 @@ { double tps = Math.round(ctx.getServer().currentTPS*10)/10d; double downtime = ctx.getServer().currentWait/1000/1000d; + double pickdowntime = ctx.getServer().pickWait/1000/1000d; int load = (int)Math.round((50-downtime)/50*100); + int pickload = (int)Math.round((50-pickdowntime)/50*100); int uptime = (int)((System.currentTimeMillis() - ctx.getServer().startTime)/1000); + ChatComponentText pickloadcomp = new ChatComponentText(Integer.toString(pickload)); + pickloadcomp.getChatStyle().setColor(pickload >= 200 ? RED : DARK_GREEN); ctx.sendMessage(DARK_GREEN, "command.uptime.msg.up", String.format("%dd %dh %dm %ds", uptime/(60*60*24), uptime/(60*60)%24, uptime/60%60, uptime%60)); - ctx.sendMessage(load > 100 ? RED : DARK_GREEN, "command.uptime.msg.load", Integer.toString(load).concat("%")); - ctx.sendMessage(tps < 15 ? RED : DARK_GREEN, "command.uptime.msg.tps", Double.toString(tps), - Integer.toString((int)(tps/20*100)).concat("%")); + ctx.sendMessage(load > 100 ? RED : DARK_GREEN, "command.uptime.msg.load", load, pickloadcomp); + ctx.sendMessage(tps < 15 ? RED : DARK_GREEN, "command.uptime.msg.tps", tps, (int)(tps/20*100)); } @Command( @@ -340,4 +344,41 @@ } } } + + @Command( + name = "restart", + group = "technical", + permissions = {"command.restart"}, + syntax = { + "[abort]", + "