diff options
Diffstat (limited to 'nms-patches/MinecraftServer.patch')
-rw-r--r-- | nms-patches/MinecraftServer.patch | 263 |
1 files changed, 95 insertions, 168 deletions
diff --git a/nms-patches/MinecraftServer.patch b/nms-patches/MinecraftServer.patch index efb0cfcb..3da94870 100644 --- a/nms-patches/MinecraftServer.patch +++ b/nms-patches/MinecraftServer.patch @@ -1,6 +1,6 @@ ---- ../work/decompile-8eb82bde//net/minecraft/server/MinecraftServer.java 2015-02-07 10:38:11.624196571 +0000 -+++ src/main/java/net/minecraft/server/MinecraftServer.java 2015-02-07 10:38:11.628196571 +0000 -@@ -37,6 +37,18 @@ +--- /home/matt/mc-dev-private//net/minecraft/server/MinecraftServer.java 2015-02-26 22:40:22.875608136 +0000 ++++ src/main/java/net/minecraft/server/MinecraftServer.java 2015-02-26 22:40:22.879608136 +0000 +@@ -38,14 +38,27 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -16,12 +16,24 @@ +import org.bukkit.event.server.RemoteServerCommandEvent; +import org.bukkit.event.world.WorldSaveEvent; +// CraftBukkit end - public abstract class MinecraftServer implements ICommandListener, Runnable, IAsyncTaskHandler, IMojangStatistics { - - private static final Logger LOGGER = LogManager.getLogger(); -@@ -93,24 +105,66 @@ ++ + public abstract class MinecraftServer implements Runnable, ICommandListener, IAsyncTaskHandler, IMojangStatistics { + +- private static final Logger LOGGER = LogManager.getLogger(); ++ public static final Logger LOGGER = LogManager.getLogger(); + public static final File a = new File("usercache.json"); + private static MinecraftServer l; +- private final Convertable convertable; ++ public Convertable convertable; // CraftBukkit - remove final, public + private final MojangStatisticsGenerator n = new MojangStatisticsGenerator("server", this, ay()); +- private final File universe; ++ public File universe; // CraftBukkit - remove final, public + private final List<IUpdatePlayerListBox> p = Lists.newArrayList(); + protected final ICommandHandler b; + public final MethodProfiler methodProfiler = new MethodProfiler(); +@@ -94,19 +107,61 @@ private Thread serverThread; - private long ab = ax(); + private long ab = ay(); - public MinecraftServer(File file, Proxy proxy, File file1) { + // CraftBukkit start @@ -38,13 +50,13 @@ + // CraftBukkit end + + public MinecraftServer(OptionSet options, Proxy proxy, File file1) { - this.d = proxy; - MinecraftServer.k = this; + this.e = proxy; + MinecraftServer.l = this; - this.universe = file; + // this.universe = file; // CraftBukkit this.q = new ServerConnection(this); this.Z = new UserCache(this, file1); - this.p = this.h(); + this.b = this.h(); - this.convertable = new WorldLoaderServer(file); + // this.convertable = new WorldLoaderServer(file); // CraftBukkit - moved to DedicatedServer.init this.V = new YggdrasilAuthenticationService(proxy, UUID.randomUUID().toString()); @@ -84,21 +96,15 @@ protected CommandDispatcher h() { return new CommandDispatcher(); } - -- protected abstract boolean init(); -+ protected abstract boolean init() throws java.net.UnknownHostException; // CraftBukkit - throws UnknownHostException - - protected void a(String s) { - if (this.getConvertable().isConvertable(s)) { -@@ -129,6 +183,7 @@ +@@ -144,6 +199,7 @@ this.a(s); this.b("menu.loadingLevel"); this.worldServer = new WorldServer[3]; + /* CraftBukkit start - Remove ticktime arrays and worldsettings - this.h = new long[this.worldServer.length][100]; + this.i = new long[this.worldServer.length][100]; IDataManager idatamanager = this.convertable.a(s, true); -@@ -152,37 +207,112 @@ +@@ -167,37 +223,112 @@ worlddata.a(s1); worldsettings = new WorldSettings(worlddata); } @@ -222,18 +228,18 @@ this.a(this.getDifficulty()); this.k(); } -@@ -197,25 +327,38 @@ +@@ -212,25 +343,38 @@ this.b("menu.generatingTerrain"); byte b0 = 0; - MinecraftServer.LOGGER.info("Preparing start region for level " + b0); - WorldServer worldserver = this.worldServer[b0]; - BlockPosition blockposition = worldserver.getSpawn(); -- long j = ax(); +- long j = ay(); - - for (int k = -192; k <= 192 && this.isRunning(); k += 16) { - for (int l = -192; l <= 192 && this.isRunning(); l += 16) { -- long i1 = ax(); +- long i1 = ay(); - - if (i1 - j > 1000L) { - this.a_("Preparing spawn area", i * 100 / 625); @@ -249,12 +255,12 @@ + } + + BlockPosition blockposition = worldserver.getSpawn(); -+ long j = ax(); ++ long j = ay(); + i = 0; + + for (int k = -192; k <= 192 && this.isRunning(); k += 16) { + for (int l = -192; l <= 192 && this.isRunning(); l += 16) { -+ long i1 = ax(); ++ long i1 = ay(); + + if (i1 - j > 1000L) { + this.a_("Preparing spawn area", i * 100 / 625); @@ -273,13 +279,13 @@ + this.server.getPluginManager().callEvent(new org.bukkit.event.world.WorldLoadEvent(world.getWorld())); + } + // CraftBukkit end - this.q(); + this.r(); } -@@ -247,35 +390,49 @@ - protected void q() { - this.e = null; - this.f = 0; +@@ -264,35 +408,52 @@ + protected void r() { + this.f = null; + this.g = 0; + + this.server.enablePlugins(org.bukkit.plugin.PluginLoadOrder.POSTWORLD); // CraftBukkit } @@ -287,16 +293,16 @@ - protected void saveChunks(boolean flag) { + protected void saveChunks(boolean flag) throws ExceptionWorldConflict { // CraftBukkit - added throws if (!this.N) { -- WorldServer[] aworldserver = this.worldServer; -- int i = aworldserver.length; -- + WorldServer[] aworldserver = this.worldServer; + int i = aworldserver.length; + - for (int j = 0; j < i; ++j) { - WorldServer worldserver = aworldserver[j]; - + // CraftBukkit start + for (int j = 0; j < worlds.size(); ++j) { + WorldServer worldserver = worlds.get(j); + // CraftBukkit end + if (worldserver != null) { if (!flag) { MinecraftServer.LOGGER.info("Saving chunks for level \'" + worldserver.getWorldData().getName() + "\'/" + worldserver.worldProvider.getName()); @@ -315,7 +321,7 @@ } } -- public void stop() { +- protected void stop() { + // CraftBukkit start + private boolean hasStopped = false; + private final Object stopLock = new Object(); @@ -335,10 +341,10 @@ + this.server.disablePlugins(); + } + // CraftBukkit end - if (this.ao() != null) { - this.ao().b(); + if (this.ap() != null) { + this.ap().b(); } -@@ -290,11 +447,13 @@ +@@ -307,11 +468,13 @@ MinecraftServer.LOGGER.info("Saving worlds"); this.saveChunks(false); @@ -351,8 +357,8 @@ + // CraftBukkit end */ } - if (this.m.d()) { -@@ -335,6 +494,7 @@ + if (this.n.d()) { +@@ -352,6 +515,7 @@ long k = j - this.ab; if (k > 2000L && this.ab - this.R >= 15000L) { @@ -360,21 +366,21 @@ MinecraftServer.LOGGER.warn("Can\'t keep up! Did the system time change, or is the server overloaded? Running {}ms behind, skipping {} tick(s)", new Object[] { Long.valueOf(k), Long.valueOf(k / 50L)}); k = 2000L; this.R = this.ab; -@@ -347,11 +507,12 @@ +@@ -364,11 +528,12 @@ i += k; this.ab = j; - if (this.worldServer[0].everyoneDeeplySleeping()) { -+ if (this.worlds.get(0).everyoneDeeplySleeping()) { // CraftBukkit - this.y(); ++ if (this.worlds.get(0).everyoneDeeplySleeping()) { + this.z(); i = 0L; } else { while (i > 50L) { + MinecraftServer.currentTick = (int) (System.currentTimeMillis() / 50); // CraftBukkit i -= 50L; - this.y(); + this.z(); } -@@ -389,6 +550,12 @@ +@@ -406,6 +571,12 @@ } catch (Throwable throwable1) { MinecraftServer.LOGGER.error("Exception stopping the server", throwable1); } finally { @@ -384,19 +390,19 @@ + } catch (Exception ignored) { + } + // CraftBukkit end - this.x(); + this.y(); } -@@ -428,7 +595,7 @@ +@@ -445,7 +616,7 @@ - protected void x() {} + protected void y() {} -- protected void y() { -+ protected void y() throws ExceptionWorldConflict { // CraftBukkit - added throws +- protected void z() { ++ protected void z() throws ExceptionWorldConflict { // CraftBukkit - added throws long i = System.nanoTime(); ++this.ticks; -@@ -454,7 +621,7 @@ +@@ -471,7 +642,7 @@ this.r.b().a(agameprofile); } @@ -405,22 +411,7 @@ this.methodProfiler.a("save"); this.v.savePlayers(); this.saveChunks(true); -@@ -484,29 +651,53 @@ - synchronized (this.i) { - while (!this.i.isEmpty()) { - try { -- ((FutureTask) this.i.poll()).run(); -+ // CraftBukkit start - log exceptions -+ FutureTask task = ((FutureTask) this.i.poll()); -+ task.run(); -+ task.get(); - } catch (Throwable throwable) { -- MinecraftServer.LOGGER.fatal(throwable); -+ MinecraftServer.LOGGER.fatal("Handling task", throwable); -+ // CraftBukkit end - } - } - } +@@ -506,20 +677,40 @@ this.methodProfiler.c("levels"); @@ -464,20 +455,20 @@ this.methodProfiler.a("tick"); -@@ -533,9 +724,9 @@ +@@ -546,9 +737,9 @@ worldserver.getTracker().updatePlayers(); this.methodProfiler.b(); this.methodProfiler.b(); - } + // } // CraftBukkit -- this.h[i][this.ticks % 100] = System.nanoTime() - j; -+ // this.h[i][this.ticks % 100] = System.nanoTime() - j; // CraftBukkit +- this.i[i][this.ticks % 100] = System.nanoTime() - j; ++ // this.i[i][this.ticks % 100] = System.nanoTime() - j; // CraftBukkit } this.methodProfiler.c("connection"); -@@ -559,10 +750,11 @@ - this.o.add(iupdateplayerlistbox); +@@ -572,10 +763,11 @@ + this.p.add(iupdateplayerlistbox); } - public static void main(String[] astring) { @@ -489,10 +480,10 @@ boolean flag = true; String s = null; String s1 = "."; -@@ -636,6 +828,27 @@ - - dedicatedserver.B(); - Runtime.getRuntime().addShutdownHook(new ThreadShutdown("Server Shutdown Thread", dedicatedserver)); +@@ -653,6 +845,27 @@ + dedicatedserver.stop(); + } + }); + */ + + DedicatedServer dedicatedserver = new DedicatedServer(options); @@ -517,10 +508,10 @@ } catch (Exception exception) { MinecraftServer.LOGGER.fatal("Failed to start the minecraft server", exception); } -@@ -643,8 +856,10 @@ +@@ -660,8 +873,10 @@ } - public void B() { + public void C() { + /* CraftBukkit start - prevent abuse this.serverThread = new Thread(this, "Server thread"); this.serverThread.start(); @@ -528,7 +519,7 @@ } public File d(String s) { -@@ -660,7 +875,14 @@ +@@ -677,7 +892,14 @@ } public WorldServer getWorldServer(int i) { @@ -543,69 +534,8 @@ + // CraftBukkit end } - public String C() { -@@ -696,17 +918,62 @@ - } - - public String getPlugins() { -- return ""; -- } -+ // CraftBukkit start - Whole method -+ StringBuilder result = new StringBuilder(); -+ org.bukkit.plugin.Plugin[] plugins = server.getPluginManager().getPlugins(); -+ -+ result.append(server.getName()); -+ result.append(" on Bukkit "); -+ result.append(server.getBukkitVersion()); -+ -+ if (plugins.length > 0 && server.getQueryPlugins()) { -+ result.append(": "); -+ -+ for (int i = 0; i < plugins.length; i++) { -+ if (i > 0) { -+ result.append("; "); -+ } - -- public String executeRemoteCommand(String s) { -- RemoteControlCommandListener.getInstance().i(); -- this.p.a(RemoteControlCommandListener.getInstance(), s); -- return RemoteControlCommandListener.getInstance().j(); -+ result.append(plugins[i].getDescription().getName()); -+ result.append(" "); -+ result.append(plugins[i].getDescription().getVersion().replaceAll(";", ",")); -+ } -+ } -+ -+ return result.toString(); -+ // CraftBukkit end -+ } -+ -+ // CraftBukkit start - fire RemoteServerCommandEvent -+ public String executeRemoteCommand(final String s) { -+ Waitable<String> waitable = new Waitable<String>() { -+ @Override -+ protected String evaluate() { -+ RemoteControlCommandListener.getInstance().i(); -+ // Event changes start -+ RemoteServerCommandEvent event = new RemoteServerCommandEvent(remoteConsole, s); -+ server.getPluginManager().callEvent(event); -+ // Event change end -+ ServerCommand serverCommand = new ServerCommand(event.getCommand(), RemoteControlCommandListener.getInstance()); -+ server.dispatchServerCommand(remoteConsole, serverCommand); -+ // this.p.a(RemoteControlCommandListener.getInstance(), s); -+ return RemoteControlCommandListener.getInstance().j(); -+ } -+ }; -+ processQueue.add(waitable); -+ try { -+ return waitable.get(); -+ } catch (java.util.concurrent.ExecutionException e) { -+ throw new RuntimeException("Exception processing rcon command " + s, e.getCause()); -+ } catch (InterruptedException e) { -+ Thread.currentThread().interrupt(); // Maintain interrupted state -+ throw new RuntimeException("Interrupted processing rcon command " + s, e); -+ } -+ // CraftBukkit end + public String D() { +@@ -713,7 +935,7 @@ } public boolean isDebugging() { @@ -613,8 +543,8 @@ + return this.getPropertyManager().getBoolean("debug", false); // CraftBukkit - don't hardcode } - public void h(String s) { -@@ -721,7 +988,7 @@ + public void g(String s) { +@@ -728,7 +950,7 @@ } public String getServerModName() { @@ -623,15 +553,15 @@ } public CrashReport b(CrashReport crashreport) { -@@ -734,6 +1001,7 @@ +@@ -757,6 +979,7 @@ } - public List tabCompleteCommand(ICommandListener icommandlistener, String s, BlockPosition blockposition) { + public List<String> tabCompleteCommand(ICommandListener icommandlistener, String s, BlockPosition blockposition) { + /* CraftBukkit start - Allow tab-completion of Bukkit commands ArrayList arraylist = Lists.newArrayList(); if (s.startsWith("/")) { -@@ -772,6 +1040,9 @@ +@@ -795,6 +1018,9 @@ return arraylist; } @@ -641,7 +571,7 @@ } public static MinecraftServer getServer() { -@@ -779,7 +1050,7 @@ +@@ -802,7 +1028,7 @@ } public boolean N() { @@ -650,7 +580,7 @@ } public String getName() { -@@ -835,8 +1106,10 @@ +@@ -858,8 +1084,10 @@ } public void a(EnumDifficulty enumdifficulty) { @@ -663,17 +593,18 @@ if (worldserver != null) { if (worldserver.getWorldData().isHardcore()) { -@@ -878,15 +1151,17 @@ +@@ -901,15 +1129,17 @@ this.N = true; this.getConvertable().d(); - for (int i = 0; i < this.worldServer.length; ++i) { - WorldServer worldserver = this.worldServer[i]; +- + // CraftBukkit start + for (int i = 0; i < this.worlds.size(); ++i) { + WorldServer worldserver = this.worlds.get(i); + // CraftBukkit end - ++ if (worldserver != null) { worldserver.saveLevel(); } @@ -684,7 +615,7 @@ this.safeShutdown(); } -@@ -919,9 +1194,11 @@ +@@ -942,9 +1172,11 @@ int i = 0; if (this.worldServer != null) { @@ -699,7 +630,7 @@ WorldData worlddata = worldserver.getWorldData(); mojangstatisticsgenerator.a("world[" + i + "][dimension]", Integer.valueOf(worldserver.worldProvider.getDimension())); -@@ -954,7 +1231,7 @@ +@@ -977,7 +1209,7 @@ public abstract boolean ad(); public boolean getOnlineMode() { @@ -708,20 +639,19 @@ } public void setOnlineMode(boolean flag) { -@@ -1024,8 +1301,10 @@ +@@ -1049,8 +1281,9 @@ } - public void setGamemode(EnumGamemode enumgamemode) { + public void setGamemode(WorldSettings.EnumGamemode worldsettings_enumgamemode) { - for (int i = 0; i < this.worldServer.length; ++i) { -- getServer().worldServer[i].getWorldData().setGameType(enumgamemode); +- getServer().worldServer[i].getWorldData().setGameType(worldsettings_enumgamemode); + // CraftBukkit start + for (int i = 0; i < this.worlds.size(); ++i) { -+ getServer().worlds.get(i).getWorldData().setGameType(enumgamemode); -+ // CraftBukkit end ++ getServer().worlds.get(i).getWorldData().setGameType(worldsettings_enumgamemode); } } -@@ -1057,7 +1336,7 @@ +@@ -1082,7 +1315,7 @@ } public World getWorld() { @@ -730,13 +660,10 @@ } public Entity f() { -@@ -1125,11 +1404,10 @@ - } +@@ -1153,8 +1386,10 @@ + WorldServer[] aworldserver = this.worldServer; + int i = aworldserver.length; - public Entity a(UUID uuid) { -- WorldServer[] aworldserver = this.worldServer; -- int i = aworldserver.length; -- - for (int j = 0; j < i; ++j) { - WorldServer worldserver = aworldserver[j]; + // CraftBukkit start @@ -746,12 +673,12 @@ if (worldserver != null) { Entity entity = worldserver.getEntity(uuid); -@@ -1144,7 +1422,7 @@ +@@ -1169,7 +1404,7 @@ } public boolean getSendCommandFeedback() { - return getServer().worldServer[0].getGameRules().getBoolean("sendCommandFeedback"); -+ return getServer().worlds.get(0).getGameRules().getBoolean("sendCommandFeedback"); // CraftBukkit ++ return getServer().worlds.get(0).getGameRules().getBoolean("sendCommandFeedback"); } - public void a(EnumCommandResult enumcommandresult, int i) {} + public void a(CommandObjectiveExecutor.EnumCommandResult commandobjectiveexecutor_enumcommandresult, int i) {} |