Commits

md_5 authored 3af81c71798
Update to Minecraft 1.16.4
No tags

nms-patches/DedicatedServer.patch

Modified
8 8 +import org.apache.logging.log4j.Level;
9 9 +import org.apache.logging.log4j.io.IoBuilder;
10 10 +import org.bukkit.command.CommandSender;
11 11 +import org.bukkit.event.server.ServerCommandEvent;
12 12 +import org.bukkit.event.server.RemoteServerCommandEvent;
13 13 +// CraftBukkit end
14 14 +
15 15 public class DedicatedServer extends MinecraftServer implements IMinecraftServer {
16 16
17 17 private static final Logger LOGGER = LogManager.getLogger();
18 -@@ -34,8 +42,10 @@
18 +@@ -36,8 +44,10 @@
19 19 @Nullable
20 - private ServerGUI q;
20 + private final TextFilter r;
21 21
22 22 - public DedicatedServer(Thread thread, IRegistryCustom.Dimension iregistrycustom_dimension, Convertable.ConversionSession convertable_conversionsession, ResourcePackRepository resourcepackrepository, DataPackResources datapackresources, SaveData savedata, DedicatedServerSettings dedicatedserversettings, DataFixer datafixer, MinecraftSessionService minecraftsessionservice, GameProfileRepository gameprofilerepository, UserCache usercache, WorldLoadListenerFactory worldloadlistenerfactory) {
23 23 - super(thread, iregistrycustom_dimension, convertable_conversionsession, savedata, resourcepackrepository, Proxy.NO_PROXY, datafixer, datapackresources, minecraftsessionservice, gameprofilerepository, usercache, worldloadlistenerfactory);
24 24 + // CraftBukkit start - Signature changed
25 25 + public DedicatedServer(joptsimple.OptionSet options, DataPackConfiguration datapackconfiguration, Thread thread, IRegistryCustom.Dimension iregistrycustom_dimension, Convertable.ConversionSession convertable_conversionsession, ResourcePackRepository resourcepackrepository, DataPackResources datapackresources, SaveData savedata, DedicatedServerSettings dedicatedserversettings, DataFixer datafixer, MinecraftSessionService minecraftsessionservice, GameProfileRepository gameprofilerepository, UserCache usercache, WorldLoadListenerFactory worldloadlistenerfactory) {
26 26 + super(options, datapackconfiguration, thread, iregistrycustom_dimension, convertable_conversionsession, savedata, resourcepackrepository, Proxy.NO_PROXY, datafixer, datapackresources, minecraftsessionservice, gameprofilerepository, usercache, worldloadlistenerfactory);
27 27 + // CraftBukkit end
28 28 this.propertyManager = dedicatedserversettings;
29 29 this.remoteControlCommandListener = new RemoteControlCommandListener(this);
30 - }
31 -@@ -44,13 +54,44 @@
30 + this.r = null;
31 +@@ -47,13 +57,44 @@
32 32 public boolean init() throws IOException {
33 33 Thread thread = new Thread("Server console handler") {
34 34 public void run() {
35 35 - BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8));
36 36 + // CraftBukkit start
37 37 + if (!org.bukkit.craftbukkit.Main.useConsole) {
38 38 + return;
39 39 + }
40 40 + jline.console.ConsoleReader bufferedreader = reader;
41 41 +
69 69 + }
70 70 + continue;
71 71 + }
72 72 + if (s.trim().length() > 0) { // Trim to filter lines which are just spaces
73 73 + DedicatedServer.this.issueCommand(s, DedicatedServer.this.getServerCommandListener());
74 74 + }
75 75 + // CraftBukkit end
76 76 }
77 77 } catch (IOException ioexception) {
78 78 DedicatedServer.LOGGER.error("Exception handling console input", ioexception);
79 -@@ -59,6 +100,27 @@
79 +@@ -62,6 +103,27 @@
80 80 }
81 81 };
82 82
83 83 + // CraftBukkit start - TODO: handle command-line logging arguments
84 84 + java.util.logging.Logger global = java.util.logging.Logger.getLogger("");
85 85 + global.setUseParentHandlers(false);
86 86 + for (java.util.logging.Handler handler : global.getHandlers()) {
87 87 + global.removeHandler(handler);
88 88 + }
89 89 + global.addHandler(new org.bukkit.craftbukkit.util.ForwardLogHandler());
97 97 +
98 98 + new org.bukkit.craftbukkit.util.TerminalConsoleWriterThread(System.out, this.reader).start();
99 99 +
100 100 + System.setOut(IoBuilder.forLogger(logger).setLevel(Level.INFO).buildPrintStream());
101 101 + System.setErr(IoBuilder.forLogger(logger).setLevel(Level.WARN).buildPrintStream());
102 102 + // CraftBukkit end
103 103 +
104 104 thread.setDaemon(true);
105 105 thread.setUncaughtExceptionHandler(new DefaultUncaughtExceptionHandler(DedicatedServer.LOGGER));
106 106 thread.start();
107 -@@ -85,7 +147,7 @@
107 +@@ -88,7 +150,7 @@
108 108 this.setForceGamemode(dedicatedserverproperties.forceGamemode);
109 109 super.setIdleTimeout((Integer) dedicatedserverproperties.playerIdleTimeout.get());
110 110 this.i(dedicatedserverproperties.enforceWhitelist);
111 111 - this.saveData.setGameType(dedicatedserverproperties.gamemode);
112 112 + // this.saveData.setGameType(dedicatedserverproperties.gamemode); // CraftBukkit - moved to world loading
113 113 DedicatedServer.LOGGER.info("Default game type: {}", dedicatedserverproperties.gamemode);
114 114 InetAddress inetaddress = null;
115 115
116 -@@ -110,6 +172,12 @@
116 +@@ -112,6 +174,12 @@
117 117 return false;
118 118 }
119 119
120 120 + // CraftBukkit start
121 121 + this.a((PlayerList) (new DedicatedPlayerList(this, this.customRegistry, this.worldNBTStorage)));
122 122 + server.loadPlugins();
123 123 + server.enablePlugins(org.bukkit.plugin.PluginLoadOrder.STARTUP);
124 124 + // CraftBukkit end
125 125 +
126 126 if (!this.getOnlineMode()) {
127 127 DedicatedServer.LOGGER.warn("**** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!");
128 128 DedicatedServer.LOGGER.warn("The server will make no attempt to authenticate usernames. Beware.");
129 -@@ -124,7 +192,7 @@
129 +@@ -126,7 +194,7 @@
130 130 if (!NameReferencingFileConverter.e(this)) {
131 131 return false;
132 132 } else {
133 133 - this.a((PlayerList) (new DedicatedPlayerList(this, this.customRegistry, this.worldNBTStorage)));
134 134 + // this.a((PlayerList) (new DedicatedPlayerList(this, this.customRegistry, this.worldNBTStorage))); // CraftBukkit - moved up
135 135 long i = SystemUtils.getMonotonicNanos();
136 136
137 137 this.c(dedicatedserverproperties.maxBuildHeight);
138 -@@ -132,7 +200,7 @@
138 +@@ -134,7 +202,7 @@
139 139 TileEntitySkull.a(this.getMinecraftSessionService());
140 140 UserCache.a(this.getOnlineMode());
141 141 DedicatedServer.LOGGER.info("Preparing level \"{}\"", this.getWorld());
142 142 - this.loadWorld();
143 143 + this.loadWorld(convertable.getLevelName()); // CraftBukkit
144 144 long j = SystemUtils.getMonotonicNanos() - i;
145 145 String s = String.format(Locale.ROOT, "%.3fs", (double) j / 1.0E9D);
146 146
147 -@@ -149,6 +217,7 @@
147 +@@ -151,6 +219,7 @@
148 148 if (dedicatedserverproperties.enableRcon) {
149 149 DedicatedServer.LOGGER.info("Starting remote control listener");
150 150 this.remoteControlListener = RemoteControlListener.a((IMinecraftServer) this);
151 151 + this.remoteConsole = new org.bukkit.craftbukkit.command.CraftRemoteConsoleCommandSender(this.remoteControlCommandListener); // CraftBukkit
152 152 }
153 153
154 154 if (this.getMaxTickTime() > 0L) {
155 -@@ -259,6 +328,7 @@
155 +@@ -265,6 +334,7 @@
156 156 this.remoteStatusListener.b();
157 157 }
158 158
159 159 + System.exit(0); // CraftBukkit
160 160 }
161 161
162 162 @Override
163 -@@ -287,7 +357,15 @@
163 +@@ -293,7 +363,15 @@
164 164 while (!this.serverCommandQueue.isEmpty()) {
165 165 ServerCommand servercommand = (ServerCommand) this.serverCommandQueue.remove(0);
166 166
167 167 - this.getCommandDispatcher().a(servercommand.source, servercommand.command);
168 168 + // CraftBukkit start - ServerCommand for preprocessing
169 169 + ServerCommandEvent event = new ServerCommandEvent(console, servercommand.command);
170 170 + server.getPluginManager().callEvent(event);
171 171 + if (event.isCancelled()) continue;
172 172 + servercommand = new ServerCommand(event.getCommand(), servercommand.source);
173 173 +
174 174 + // this.getCommandDispatcher().a(servercommand.source, servercommand.command); // Called in dispatchServerCommand
175 175 + server.dispatchServerCommand(console, servercommand);
176 176 + // CraftBukkit end
177 177 }
178 178
179 179 }
180 -@@ -497,14 +575,45 @@
180 +@@ -503,14 +581,45 @@
181 181
182 182 @Override
183 183 public String getPlugins() {
184 184 - return "";
185 185 + // CraftBukkit start - Whole method
186 186 + StringBuilder result = new StringBuilder();
187 187 + org.bukkit.plugin.Plugin[] plugins = server.getPluginManager().getPlugins();
188 188 +
189 189 + result.append(server.getName());
190 190 + result.append(" on Bukkit ");
218 218 + server.getPluginManager().callEvent(event);
219 219 + if (event.isCancelled()) {
220 220 + return;
221 221 + }
222 222 + ServerCommand serverCommand = new ServerCommand(event.getCommand(), remoteControlCommandListener.getWrapper());
223 223 + server.dispatchServerCommand(remoteConsole, serverCommand);
224 224 + // CraftBukkit end
225 225 });
226 226 return this.remoteControlCommandListener.getMessages();
227 227 }
228 -@@ -540,4 +649,15 @@
229 - public boolean isSyncChunkWrites() {
230 - return this.propertyManager.getProperties().syncChunkWrites;
228 +@@ -552,4 +661,15 @@
229 + public ITextFilter a(EntityPlayer entityplayer) {
230 + return this.r != null ? this.r.a(entityplayer.getProfile()) : null;
231 231 }
232 232 +
233 233 + // CraftBukkit start
234 234 + public boolean isDebugging() {
235 235 + return this.getDedicatedServerProperties().debug;
236 236 + }
237 237 +
238 238 + @Override
239 239 + public CommandSender getBukkitSender(CommandListenerWrapper wrapper) {
240 240 + return console;

Everything looks good. We'll let you know here if there's anything you should know about.

Add shortcut