import java.util.logging.Level; import java.util.logging.Logger; import net.minecraft.server.MinecraftServer; import java.util.ArrayList; import java.io.*; import java.util.*; public class TimeCop extends Plugin { private TimeCopListener listener = new TimeCopListener(); static final Logger log = Logger.getLogger("Minecraft"); static MinecraftServer mcworld = etc.getMCServer(); private Timer TimeCopTicker; private int TimeCopTickInterval = 40000; private long timetofreeze = 0; private int curmode = 0; private long loopfrom = 0; private long loopto = 0; public void enable() { log.info("[TimeCop] Mod Enabled."); if (TimeCopTickInterval > 0) { TimeCopTicker = new Timer(); TimeCopTicker.schedule(new TimeCopTickerTask(), 400, TimeCopTickInterval); } } public void disable() { log.info("[TimeCop] Mod Disabled"); if (TimeCopTicker != null) { TimeCopTicker.cancel(); } } public void initialize() { etc.getLoader().addListener(PluginLoader.Hook.COMMAND, listener, this, PluginListener.Priority.MEDIUM); } public class TimeCopListener extends PluginListener { public boolean onCommand(Player player,String[] split) { if (split[0].equalsIgnoreCase("/enforcetime") && (split.length>1)) { if(split[1].equalsIgnoreCase("day")) { player.sendMessage("Daytime enforced!"); timetofreeze = 6000; etc.getServer().setTime(timetofreeze); curmode = 1; } else if(split[1].equalsIgnoreCase("night")) { player.sendMessage("Nighttime enforced!"); timetofreeze = 18000; etc.getServer().setTime(timetofreeze); curmode = 1; } else { player.sendMessage("Enforcetime can ony enforce day or night"); } return true; } else if (split[0].equalsIgnoreCase("/normaltime")) { player.sendMessage("Timeflow returned to normal!"); curmode = 0; return true; } else if (split[0].equalsIgnoreCase("/freezetime") && (split.length>1)) { if(converttime(split[1]) != -1) { timetofreeze = converttime(split[1]); etc.getServer().setTime(timetofreeze); curmode = 1; player.sendMessage("Time Frozen"); } else { player.sendMessage(split[1] + " is not a valid input"); } return true; } else if (split[0].equalsIgnoreCase("/looptime")) { if(split.length==2) { if(split[1].equalsIgnoreCase("day")) { loopfrom = 24000; loopto = 11000; etc.getServer().setTime(loopfrom); curmode = 2; } else if(split[1].equalsIgnoreCase("night")) { player.sendMessage("You want to loop night? Not implemented yet!"); } else { player.sendMessage("You are doing it wrong!"); } } else if(split.length>2) { if(converttime(split[1])!=-1 && converttime(split[2])!=-1) { loopfrom = converttime(split[1]); loopto = converttime(split[2]); etc.getServer().setTime(loopfrom); curmode = 2; player.sendMessage("Timeloop started"); } else { player.sendMessage("Get the inputs right. Jerk!"); } } return true; } else if (split[0].equalsIgnoreCase("/gettime")) { player.sendMessage("The time is " + etc.getServer().getTime()); return true; } return false; } } private class TimeCopTickerTask extends TimerTask { public void run() { updateTime(); } } private void updateTime() { switch(curmode) { case 1: setthetime(timetofreeze); break; case 2: if(loopfrom>loopto) { if(getthetime()<loopfrom && getthetime()>loopto) { setthetime(loopfrom); } } else if (loopto>loopfrom) { if(getthetime()<loopfrom || getthetime()>loopto) { setthetime(loopfrom); } } else { setthetime(loopfrom); } break; default: break; } return; } private long converttime(String input) { long returnnumber = -1; try { returnnumber = Long.parseLong(input.trim()); } catch (NumberFormatException nfe) { if(input.equalsIgnoreCase("noon") || input.equalsIgnoreCase("day")) { returnnumber = 6000; } else if(input.equalsIgnoreCase("midnight") || input.equalsIgnoreCase("night")) { returnnumber = 18000; } else if(input.equalsIgnoreCase("dusk")) { returnnumber = 12500; } else if(input.equalsIgnoreCase("dawn")) { returnnumber = 22500; } } if(returnnumber>24000 || returnnumber<0) { returnnumber = -1; } return returnnumber; } private void setthetime(long timetoset) { long curtime = getthetime(); long curtimelong = etc.getServer().getTime(); if(timetoset > curtime) { etc.getServer().setTime(curtimelong - curtime + timetoset); } else if (curtime > timetoset) { etc.getServer().setTime(curtimelong - curtime + timetoset + 24000); } } private long getthetime() { return (long) etc.getServer().getTime()%24000; } }