3
0
Mirror von https://github.com/PaperMC/Velocity.git synchronisiert 2024-12-24 15:20:35 +01:00

Merge branch 'master' into reload-command

# Conflicts:
#	proxy/src/main/java/com/velocitypowered/proxy/VelocityServer.java
Dieser Commit ist enthalten in:
Andrew Steinborn 2018-11-24 21:41:12 -05:00
Commit a083dfd3a4
11 geänderte Dateien mit 90 neuen und 15 gelöschten Zeilen

Datei anzeigen

@ -38,6 +38,7 @@ dependencies {
compile "org.apache.logging.log4j:log4j-core:${log4jVersion}" compile "org.apache.logging.log4j:log4j-core:${log4jVersion}"
compile "org.apache.logging.log4j:log4j-slf4j-impl:${log4jVersion}" compile "org.apache.logging.log4j:log4j-slf4j-impl:${log4jVersion}"
compile 'net.sf.jopt-simple:jopt-simple:5.0.4' // command-line options
compile 'net.minecrell:terminalconsoleappender:1.1.1' compile 'net.minecrell:terminalconsoleappender:1.1.1'
runtime 'net.java.dev.jna:jna:4.5.2' // Needed for JLine runtime 'net.java.dev.jna:jna:4.5.2' // Needed for JLine
runtime 'com.lmax:disruptor:3.4.2' // Async loggers runtime 'com.lmax:disruptor:3.4.2' // Async loggers

Datei anzeigen

@ -0,0 +1,46 @@
package com.velocitypowered.proxy;
import java.io.IOException;
import java.util.Arrays;
import joptsimple.OptionParser;
import joptsimple.OptionSet;
import joptsimple.OptionSpec;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.checkerframework.checker.nullness.qual.Nullable;
public final class ProxyOptions {
private static final Logger logger = LogManager.getLogger(ProxyOptions.class);
private final boolean help;
private final @Nullable Integer port;
ProxyOptions(final String[] args) {
final OptionParser parser = new OptionParser();
final OptionSpec<Void> help = parser.acceptsAll(Arrays.asList("h", "help"), "Print help")
.forHelp();
final OptionSpec<Integer> port = parser.acceptsAll(Arrays.asList("p", "port"),
"Specify the bind port to be used. The configuration bind port will be ignored.")
.withRequiredArg().ofType(Integer.class);
final OptionSet set = parser.parse(args);
this.help = set.has(help);
this.port = port.value(set);
if (this.help) {
try {
parser.printHelpOn(System.out);
} catch (final IOException e) {
logger.error("Could not print help", e);
}
}
}
boolean isHelp() {
return this.help;
}
public @Nullable Integer getPort() {
return this.port;
}
}

Datei anzeigen

@ -17,7 +17,13 @@ public class Velocity {
public static void main(String... args) { public static void main(String... args) {
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
VelocityServer server = new VelocityServer(); final ProxyOptions options = new ProxyOptions(args);
if (options.isHelp()) {
return;
}
VelocityServer server = new VelocityServer(options);
server.start(); server.start();
Runtime.getRuntime().addShutdownHook(new Thread(() -> server.shutdown(false), "Shutdown thread")); Runtime.getRuntime().addShutdownHook(new Thread(() -> server.shutdown(false), "Shutdown thread"));

Datei anzeigen

@ -75,6 +75,8 @@ public class VelocityServer implements ProxyServer {
.create(); .create();
private ConnectionManager cm; private ConnectionManager cm;
private final ProxyOptions options;
private @MonotonicNonNull ConnectionManager cm;
private @MonotonicNonNull VelocityConfiguration configuration; private @MonotonicNonNull VelocityConfiguration configuration;
private @MonotonicNonNull NettyHttpClient httpClient; private @MonotonicNonNull NettyHttpClient httpClient;
private @MonotonicNonNull KeyPair serverKeyPair; private @MonotonicNonNull KeyPair serverKeyPair;
@ -92,13 +94,14 @@ public class VelocityServer implements ProxyServer {
private VelocityScheduler scheduler; private VelocityScheduler scheduler;
private final VelocityChannelRegistrar channelRegistrar = new VelocityChannelRegistrar(); private final VelocityChannelRegistrar channelRegistrar = new VelocityChannelRegistrar();
VelocityServer() { VelocityServer(final ProxyOptions options) {
pluginManager = new VelocityPluginManager(this); pluginManager = new VelocityPluginManager(this);
eventManager = new VelocityEventManager(pluginManager); eventManager = new VelocityEventManager(pluginManager);
scheduler = new VelocityScheduler(pluginManager); scheduler = new VelocityScheduler(pluginManager);
console = new VelocityConsole(this); console = new VelocityConsole(this);
cm = new ConnectionManager(this); cm = new ConnectionManager(this);
servers = new ServerMap(this); servers = new ServerMap(this);
this.options = options;
} }
public KeyPair getServerKeyPair() { public KeyPair getServerKeyPair() {
@ -188,7 +191,13 @@ public class VelocityServer implements ProxyServer {
// init console permissions after plugins are loaded // init console permissions after plugins are loaded
console.setupPermissions(); console.setupPermissions();
this.cm.bind(configuration.getBind()); final Integer port = this.options.getPort();
if (port != null) {
logger.debug("Overriding bind port to {} from command line option", port);
this.cm.bind(new InetSocketAddress(configuration.getBind().getHostString(), port));
} else {
this.cm.bind(configuration.getBind());
}
if (configuration.isQueryEnabled()) { if (configuration.isQueryEnabled()) {
this.cm.queryBind(configuration.getBind().getHostString(), configuration.getQueryPort()); this.cm.queryBind(configuration.getBind().getHostString(), configuration.getQueryPort());

Datei anzeigen

@ -17,11 +17,6 @@ public class ShutdownCommand implements Command {
@Override @Override
public void execute(CommandSource source, String @NonNull [] args) { public void execute(CommandSource source, String @NonNull [] args) {
if (source != server.getConsoleCommandSource()) {
source
.sendMessage(TextComponent.of("You are not allowed to use this command.", TextColor.RED));
return;
}
server.shutdown(true); server.shutdown(true);
} }

Datei anzeigen

@ -97,7 +97,7 @@ public class VelocityCommand implements Command {
@Override @Override
public boolean hasPermission(CommandSource source, String @NonNull [] args) { public boolean hasPermission(CommandSource source, String @NonNull [] args) {
if (args.length == 0) { if (args.length == 0) {
return true; return subcommands.values().stream().anyMatch(e -> e.hasPermission(source, args));
} }
Command command = subcommands.get(args[0].toLowerCase(Locale.US)); Command command = subcommands.get(args[0].toLowerCase(Locale.US));
if (command == null) { if (command == null) {
@ -151,6 +151,11 @@ public class VelocityCommand implements Command {
@Override @Override
public void execute(CommandSource source, String @NonNull [] args) { public void execute(CommandSource source, String @NonNull [] args) {
if (args.length != 0) {
source.sendMessage(TextComponent.of("/velocity version", TextColor.RED));
return;
}
ProxyVersion version = server.getVersion(); ProxyVersion version = server.getVersion();
TextComponent velocity = TextComponent.builder(version.getName() + " ") TextComponent velocity = TextComponent.builder(version.getName() + " ")

Datei anzeigen

@ -23,7 +23,7 @@ public class VelocityCommandManager implements CommandManager {
Preconditions.checkNotNull(command, "executor"); Preconditions.checkNotNull(command, "executor");
for (int i = 0, length = aliases.length; i < length; i++) { for (int i = 0, length = aliases.length; i < length; i++) {
final String alias = aliases[i]; final String alias = aliases[i];
Preconditions.checkNotNull(aliases, "alias at index %s", i); Preconditions.checkNotNull(alias, "alias at index %s", i);
this.commands.put(alias.toLowerCase(Locale.ENGLISH), command); this.commands.put(alias.toLowerCase(Locale.ENGLISH), command);
} }
} }

Datei anzeigen

@ -160,8 +160,7 @@ public class BackendPlaySessionHandler implements MinecraftSessionHandler {
public void disconnected() { public void disconnected() {
serverConn.getServer().removePlayer(serverConn.getPlayer()); serverConn.getServer().removePlayer(serverConn.getPlayer());
if (!serverConn.isGracefulDisconnect()) { if (!serverConn.isGracefulDisconnect()) {
serverConn.getPlayer().handleConnectionException(serverConn.getServer(), Disconnect.create( serverConn.getPlayer().disconnect(ConnectionMessages.UNEXPECTED_DISCONNECT);
ConnectionMessages.UNEXPECTED_DISCONNECT));
} }
} }

Datei anzeigen

@ -94,6 +94,9 @@ public class VelocityServerConnection implements MinecraftConnectionAssociation,
new LoginSessionHandler(server, VelocityServerConnection.this, result)); new LoginSessionHandler(server, VelocityServerConnection.this, result));
startHandshake(); startHandshake();
} else { } else {
// We need to remember to reset the in-flight connection to allow connect() to work
// properly.
proxyPlayer.resetInFlightConnection();
result.completeExceptionally(future.cause()); result.completeExceptionally(future.cause());
} }
}); });

Datei anzeigen

@ -286,6 +286,10 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player {
return connectedServer; return connectedServer;
} }
public void resetInFlightConnection() {
connectionInFlight = null;
}
public void handleConnectionException(RegisteredServer server, Throwable throwable) { public void handleConnectionException(RegisteredServer server, Throwable throwable) {
if (throwable == null) { if (throwable == null) {
throw new NullPointerException("throwable"); throw new NullPointerException("throwable");
@ -481,7 +485,8 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player {
private Optional<ConnectionRequestBuilder.Status> checkServer(RegisteredServer server) { private Optional<ConnectionRequestBuilder.Status> checkServer(RegisteredServer server) {
Preconditions Preconditions
.checkState(server instanceof VelocityRegisteredServer, "Not a valid Velocity server."); .checkState(server instanceof VelocityRegisteredServer, "Not a valid Velocity server.");
if (connectionInFlight != null) { if (connectionInFlight != null || (connectedServer != null
&& !connectedServer.hasCompletedJoin())) {
return Optional.of(ConnectionRequestBuilder.Status.CONNECTION_IN_PROGRESS); return Optional.of(ConnectionRequestBuilder.Status.CONNECTION_IN_PROGRESS);
} }
if (connectedServer != null && connectedServer.getServer().equals(server)) { if (connectedServer != null && connectedServer.getServer().equals(server)) {
@ -516,8 +521,12 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player {
return CompletableFuture return CompletableFuture
.completedFuture(ConnectionRequestResults.plainResult(lastCheck.get())); .completedFuture(ConnectionRequestResults.plainResult(lastCheck.get()));
} }
return new VelocityServerConnection((VelocityRegisteredServer) rs,
ConnectedPlayer.this, server).connect(); VelocityRegisteredServer vrs = (VelocityRegisteredServer) rs;
VelocityServerConnection con = new VelocityServerConnection(vrs, ConnectedPlayer.this,
server);
connectionInFlight = con;
return con.connect();
}); });
} }

Datei anzeigen

@ -264,6 +264,8 @@ public class GS4QueryHandler extends SimpleChannelInboundHandler<DatagramPacket>
return; return;
} }
writeString(buf, "plugins");
StringBuilder pluginsString = new StringBuilder(); StringBuilder pluginsString = new StringBuilder();
pluginsString.append(serverVersion).append(':').append(' '); pluginsString.append(serverVersion).append(':').append(' ');
Iterator<QueryResponse.PluginInformation> iterator = plugins.iterator(); Iterator<QueryResponse.PluginInformation> iterator = plugins.iterator();