Commits
md_5 authored 3af81c71798
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 - | |
18 + | |
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 - | |
30 + | this.r = null; |
31 + | |
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 - | |
79 + | |
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 - | |
107 + | |
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 - | |
116 + | |
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 - | |
129 + | |
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 - | |
138 + | |
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 - | |
147 + | |
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 - | |
155 + | |
156 156 | this.remoteStatusListener.b(); |
157 157 | } |
158 158 | |
159 159 | + System.exit(0); // CraftBukkit |
160 160 | } |
161 161 | |
162 162 | @Override |
163 - | |
163 + | |
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 - | |
180 + | |
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 - | |
229 - | public boolean isSyncChunkWrites() { |
230 - | return this.propertyManager.getProperties().syncChunkWrites; |
228 + | |
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; |