geforkt von Mirrors/Velocity
Full Checkstyle compliance at last.
Dieser Commit ist enthalten in:
Ursprung
20c3966f6f
Commit
abc5ef7f5e
@ -104,18 +104,11 @@ public class VelocityServer implements ProxyServer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public KeyPair getServerKeyPair() {
|
public KeyPair getServerKeyPair() {
|
||||||
if (serverKeyPair == null) {
|
return ensureInitialized(serverKeyPair);
|
||||||
throw new AssertionError();
|
|
||||||
}
|
|
||||||
return serverKeyPair;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public VelocityConfiguration getConfiguration() {
|
public VelocityConfiguration getConfiguration() {
|
||||||
VelocityConfiguration cfg = this.configuration;
|
return ensureInitialized(this.configuration);
|
||||||
if (cfg == null) {
|
|
||||||
throw new IllegalStateException("Configuration not initialized!");
|
|
||||||
}
|
|
||||||
return cfg;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -250,6 +243,12 @@ public class VelocityServer implements ProxyServer {
|
|||||||
return shutdown;
|
return shutdown;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reloads the proxy's configuration.
|
||||||
|
*
|
||||||
|
* @return {@code true} if successful, {@code false} if we can't read the configuration
|
||||||
|
* @throws IOException if we can't read {@code velocity.toml}
|
||||||
|
*/
|
||||||
public boolean reloadConfiguration() throws IOException {
|
public boolean reloadConfiguration() throws IOException {
|
||||||
Path configPath = Paths.get("velocity.toml");
|
Path configPath = Paths.get("velocity.toml");
|
||||||
VelocityConfiguration newConfiguration = VelocityConfiguration.read(configPath);
|
VelocityConfiguration newConfiguration = VelocityConfiguration.read(configPath);
|
||||||
@ -331,6 +330,11 @@ public class VelocityServer implements ProxyServer {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shuts down the proxy.
|
||||||
|
*
|
||||||
|
* @param explicitExit whether the user explicitly shut down the proxy
|
||||||
|
*/
|
||||||
public void shutdown(boolean explicitExit) {
|
public void shutdown(boolean explicitExit) {
|
||||||
if (eventManager == null || pluginManager == null || cm == null || scheduler == null) {
|
if (eventManager == null || pluginManager == null || cm == null || scheduler == null) {
|
||||||
throw new AssertionError();
|
throw new AssertionError();
|
||||||
@ -365,19 +369,25 @@ public class VelocityServer implements ProxyServer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public NettyHttpClient getHttpClient() {
|
public NettyHttpClient getHttpClient() {
|
||||||
if (httpClient == null) {
|
return ensureInitialized(httpClient);
|
||||||
throw new IllegalStateException("HTTP client not initialized");
|
|
||||||
}
|
|
||||||
return httpClient;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Ratelimiter getIpAttemptLimiter() {
|
public Ratelimiter getIpAttemptLimiter() {
|
||||||
if (ipAttemptLimiter == null) {
|
return ensureInitialized(ipAttemptLimiter);
|
||||||
throw new IllegalStateException("Ratelimiter not initialized");
|
|
||||||
}
|
|
||||||
return ipAttemptLimiter;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static <T> T ensureInitialized(T o) {
|
||||||
|
if (o == null) {
|
||||||
|
throw new IllegalStateException("The proxy isn't fully initialized.");
|
||||||
|
}
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempts to register the {@code connection} with the proxy.
|
||||||
|
* @param connection the connection to register
|
||||||
|
* @return {@code true} if we registered the connection, {@code false} if not
|
||||||
|
*/
|
||||||
public boolean registerConnection(ConnectedPlayer connection) {
|
public boolean registerConnection(ConnectedPlayer connection) {
|
||||||
String lowerName = connection.getUsername().toLowerCase(Locale.US);
|
String lowerName = connection.getUsername().toLowerCase(Locale.US);
|
||||||
if (connectionsByName.putIfAbsent(lowerName, connection) != null) {
|
if (connectionsByName.putIfAbsent(lowerName, connection) != null) {
|
||||||
|
@ -266,6 +266,11 @@ public class VelocityConfiguration extends AnnotatedConfig implements ProxyConfi
|
|||||||
return motd;
|
return motd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the proxy's MOTD.
|
||||||
|
*
|
||||||
|
* @return the MOTD
|
||||||
|
*/
|
||||||
public Component getMotdComponent() {
|
public Component getMotdComponent() {
|
||||||
if (motdAsComponent == null) {
|
if (motdAsComponent == null) {
|
||||||
if (motd.startsWith("{")) {
|
if (motd.startsWith("{")) {
|
||||||
|
@ -95,7 +95,8 @@ public class BackendPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (PluginMessageUtil.isMcBrand(packet)) {
|
if (PluginMessageUtil.isMcBrand(packet)) {
|
||||||
PluginMessage rewritten = PluginMessageUtil.rewriteMinecraftBrand(packet, server.getVersion());
|
PluginMessage rewritten = PluginMessageUtil.rewriteMinecraftBrand(packet,
|
||||||
|
server.getVersion());
|
||||||
serverConn.getPlayer().getConnection().write(rewritten);
|
serverConn.getPlayer().getConnection().write(rewritten);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -212,6 +212,9 @@ public class VelocityServerConnection implements MinecraftConnectionAssociation,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates that we have completed the plugin process.
|
||||||
|
*/
|
||||||
public void completeJoin() {
|
public void completeJoin() {
|
||||||
if (!hasCompletedJoin) {
|
if (!hasCompletedJoin) {
|
||||||
hasCompletedJoin = true;
|
hasCompletedJoin = true;
|
||||||
|
@ -296,6 +296,11 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles the {@code JoinGame} packet. This function is responsible for handling the client-side
|
||||||
|
* switching servers in Velocity.
|
||||||
|
* @param joinGame the join game packet
|
||||||
|
*/
|
||||||
public void handleBackendJoinGame(JoinGame joinGame) {
|
public void handleBackendJoinGame(JoinGame joinGame) {
|
||||||
VelocityServerConnection serverConn = player.getConnectedServer();
|
VelocityServerConnection serverConn = player.getConnectedServer();
|
||||||
if (serverConn == null) {
|
if (serverConn == null) {
|
||||||
@ -387,6 +392,11 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
return knownChannels;
|
return knownChannels;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles additional tab complete for 1.12 and lower clients.
|
||||||
|
*
|
||||||
|
* @param response the tab complete response from the backend
|
||||||
|
*/
|
||||||
public void handleTabCompleteResponse(TabCompleteResponse response) {
|
public void handleTabCompleteResponse(TabCompleteResponse response) {
|
||||||
if (outstandingTabComplete != null) {
|
if (outstandingTabComplete != null) {
|
||||||
if (!outstandingTabComplete.isAssumeCommand()
|
if (!outstandingTabComplete.isAssumeCommand()
|
||||||
|
@ -296,6 +296,11 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player {
|
|||||||
connectionInFlight = null;
|
connectionInFlight = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles unexpected disconnects.
|
||||||
|
* @param server the server we disconnected from
|
||||||
|
* @param throwable the exception
|
||||||
|
*/
|
||||||
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");
|
||||||
@ -321,6 +326,11 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player {
|
|||||||
handleConnectionException(server, null, TextComponent.of(userMessage, TextColor.RED));
|
handleConnectionException(server, null, TextComponent.of(userMessage, TextColor.RED));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles unexpected disconnects.
|
||||||
|
* @param server the server we disconnected from
|
||||||
|
* @param disconnect the disconnect packet
|
||||||
|
*/
|
||||||
public void handleConnectionException(RegisteredServer server, Disconnect disconnect) {
|
public void handleConnectionException(RegisteredServer server, Disconnect disconnect) {
|
||||||
Component disconnectReason = ComponentSerializers.JSON.deserialize(disconnect.getReason());
|
Component disconnectReason = ComponentSerializers.JSON.deserialize(disconnect.getReason());
|
||||||
String plainTextReason = PASS_THRU_TRANSLATE.serialize(disconnectReason);
|
String plainTextReason = PASS_THRU_TRANSLATE.serialize(disconnectReason);
|
||||||
@ -382,6 +392,11 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds another server to attempt to log into, if we were unexpectedly disconnected from the
|
||||||
|
* server.
|
||||||
|
* @return the next server to try
|
||||||
|
*/
|
||||||
public Optional<RegisteredServer> getNextServerToTry() {
|
public Optional<RegisteredServer> getNextServerToTry() {
|
||||||
if (serversToTry == null) {
|
if (serversToTry == null) {
|
||||||
String virtualHostStr = getVirtualHost().map(InetSocketAddress::getHostString).orElse("");
|
String virtualHostStr = getVirtualHost().map(InetSocketAddress::getHostString).orElse("");
|
||||||
@ -402,6 +417,11 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player {
|
|||||||
return server.getServer(toTryName);
|
return server.getServer(toTryName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the player's new connected server and clears the in-flight connection.
|
||||||
|
*
|
||||||
|
* @param serverConnection the new server connection
|
||||||
|
*/
|
||||||
public void setConnectedServer(@Nullable VelocityServerConnection serverConnection) {
|
public void setConnectedServer(@Nullable VelocityServerConnection serverConnection) {
|
||||||
this.connectedServer = serverConnection;
|
this.connectedServer = serverConnection;
|
||||||
this.tryIndex = 0; // reset since we got connected to a server
|
this.tryIndex = 0; // reset since we got connected to a server
|
||||||
|
@ -1,13 +1,12 @@
|
|||||||
package com.velocitypowered.proxy.console;
|
package com.velocitypowered.proxy.console;
|
||||||
|
|
||||||
import static com.velocitypowered.api.permission.PermissionFunction.*;
|
import static com.velocitypowered.api.permission.PermissionFunction.ALWAYS_TRUE;
|
||||||
|
|
||||||
import com.velocitypowered.api.event.permission.PermissionsSetupEvent;
|
import com.velocitypowered.api.event.permission.PermissionsSetupEvent;
|
||||||
import com.velocitypowered.api.permission.PermissionFunction;
|
import com.velocitypowered.api.permission.PermissionFunction;
|
||||||
import com.velocitypowered.api.permission.Tristate;
|
import com.velocitypowered.api.permission.Tristate;
|
||||||
import com.velocitypowered.api.proxy.ConsoleCommandSource;
|
import com.velocitypowered.api.proxy.ConsoleCommandSource;
|
||||||
import com.velocitypowered.proxy.VelocityServer;
|
import com.velocitypowered.proxy.VelocityServer;
|
||||||
import java.io.PrintWriter;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import net.kyori.text.Component;
|
import net.kyori.text.Component;
|
||||||
import net.kyori.text.TextComponent;
|
import net.kyori.text.TextComponent;
|
||||||
@ -44,11 +43,17 @@ public final class VelocityConsole extends SimpleTerminalConsole implements Cons
|
|||||||
return this.permissionFunction.getPermissionValue(permission);
|
return this.permissionFunction.getPermissionValue(permission);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets up {@code System.out} and {@code System.err} to redirect to log4j.
|
||||||
|
*/
|
||||||
public void setupStreams() {
|
public void setupStreams() {
|
||||||
System.setOut(IoBuilder.forLogger(logger).setLevel(Level.INFO).buildPrintStream());
|
System.setOut(IoBuilder.forLogger(logger).setLevel(Level.INFO).buildPrintStream());
|
||||||
System.setErr(IoBuilder.forLogger(logger).setLevel(Level.ERROR).buildPrintStream());
|
System.setErr(IoBuilder.forLogger(logger).setLevel(Level.ERROR).buildPrintStream());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets up permissions for the console.
|
||||||
|
*/
|
||||||
public void setupPermissions() {
|
public void setupPermissions() {
|
||||||
PermissionsSetupEvent event = new PermissionsSetupEvent(this, s -> ALWAYS_TRUE);
|
PermissionsSetupEvent event = new PermissionsSetupEvent(this, s -> ALWAYS_TRUE);
|
||||||
// we can safely block here, this is before any listeners fire
|
// we can safely block here, this is before any listeners fire
|
||||||
|
@ -36,6 +36,11 @@ public final class ConnectionManager {
|
|||||||
|
|
||||||
private final DnsAddressResolverGroup resolverGroup;
|
private final DnsAddressResolverGroup resolverGroup;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initalizes the {@code ConnectionManager}.
|
||||||
|
*
|
||||||
|
* @param server a reference to the Velocity server
|
||||||
|
*/
|
||||||
public ConnectionManager(VelocityServer server) {
|
public ConnectionManager(VelocityServer server) {
|
||||||
this.server = server;
|
this.server = server;
|
||||||
this.transportType = TransportType.bestType();
|
this.transportType = TransportType.bestType();
|
||||||
@ -52,6 +57,11 @@ public final class ConnectionManager {
|
|||||||
Natives.compress.getLoadedVariant(), Natives.cipher.getLoadedVariant());
|
Natives.compress.getLoadedVariant(), Natives.cipher.getLoadedVariant());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Binds a Minecraft listener to the specified {@code address}.
|
||||||
|
*
|
||||||
|
* @param address the address to bind to
|
||||||
|
*/
|
||||||
public void bind(final InetSocketAddress address) {
|
public void bind(final InetSocketAddress address) {
|
||||||
final ServerBootstrap bootstrap = new ServerBootstrap()
|
final ServerBootstrap bootstrap = new ServerBootstrap()
|
||||||
.channel(this.transportType.serverSocketChannelClass)
|
.channel(this.transportType.serverSocketChannelClass)
|
||||||
@ -73,6 +83,12 @@ public final class ConnectionManager {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Binds a GS4 listener to the specified {@code hostname} and {@code port}.
|
||||||
|
*
|
||||||
|
* @param hostname the hostname to bind to
|
||||||
|
* @param port the port to bind to
|
||||||
|
*/
|
||||||
public void queryBind(final String hostname, final int port) {
|
public void queryBind(final String hostname, final int port) {
|
||||||
InetSocketAddress address = new InetSocketAddress(hostname, port);
|
InetSocketAddress address = new InetSocketAddress(hostname, port);
|
||||||
final Bootstrap bootstrap = new Bootstrap()
|
final Bootstrap bootstrap = new Bootstrap()
|
||||||
@ -92,6 +108,11 @@ public final class ConnectionManager {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a TCP {@link Bootstrap} using Velocity's event loops.
|
||||||
|
*
|
||||||
|
* @return a new {@link Bootstrap}
|
||||||
|
*/
|
||||||
public Bootstrap createWorker() {
|
public Bootstrap createWorker() {
|
||||||
return new Bootstrap()
|
return new Bootstrap()
|
||||||
.channel(this.transportType.socketChannelClass)
|
.channel(this.transportType.socketChannelClass)
|
||||||
@ -102,6 +123,11 @@ public final class ConnectionManager {
|
|||||||
.resolver(this.resolverGroup);
|
.resolver(this.resolverGroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes the specified {@code oldBind} endpoint.
|
||||||
|
*
|
||||||
|
* @param oldBind the endpoint to close
|
||||||
|
*/
|
||||||
public void close(InetSocketAddress oldBind) {
|
public void close(InetSocketAddress oldBind) {
|
||||||
Channel serverChannel = endpoints.remove(oldBind);
|
Channel serverChannel = endpoints.remove(oldBind);
|
||||||
Preconditions.checkState(serverChannel != null, "Endpoint %s not registered", oldBind);
|
Preconditions.checkState(serverChannel != null, "Endpoint %s not registered", oldBind);
|
||||||
@ -109,6 +135,9 @@ public final class ConnectionManager {
|
|||||||
serverChannel.close().syncUninterruptibly();
|
serverChannel.close().syncUninterruptibly();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes all endpoints.
|
||||||
|
*/
|
||||||
public void shutdown() {
|
public void shutdown() {
|
||||||
for (final Channel endpoint : this.endpoints.values()) {
|
for (final Channel endpoint : this.endpoints.values()) {
|
||||||
try {
|
try {
|
||||||
|
@ -27,6 +27,11 @@ public class NettyHttpClient {
|
|||||||
private final ChannelPoolMap<InetSocketAddress, SimpleChannelPool> poolMap;
|
private final ChannelPoolMap<InetSocketAddress, SimpleChannelPool> poolMap;
|
||||||
private final String userAgent;
|
private final String userAgent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes the HTTP client.
|
||||||
|
*
|
||||||
|
* @param server the Velocity server
|
||||||
|
*/
|
||||||
public NettyHttpClient(VelocityServer server) {
|
public NettyHttpClient(VelocityServer server) {
|
||||||
this.userAgent = server.getVersion().getName() + "/" + server.getVersion().getVersion();
|
this.userAgent = server.getVersion().getName() + "/" + server.getVersion().getVersion();
|
||||||
Bootstrap bootstrap = server.initializeGenericBootstrap();
|
Bootstrap bootstrap = server.initializeGenericBootstrap();
|
||||||
|
@ -44,6 +44,11 @@ public class VelocityEventManager implements EventManager {
|
|||||||
private final ExecutorService service;
|
private final ExecutorService service;
|
||||||
private final PluginManager pluginManager;
|
private final PluginManager pluginManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes the Velocity event manager.
|
||||||
|
*
|
||||||
|
* @param pluginManager a reference to the Velocity plugin manager
|
||||||
|
*/
|
||||||
public VelocityEventManager(PluginManager pluginManager) {
|
public VelocityEventManager(PluginManager pluginManager) {
|
||||||
// Expose the event executors to the plugins - required in order for the generated ASM classes
|
// Expose the event executors to the plugins - required in order for the generated ASM classes
|
||||||
// to work.
|
// to work.
|
||||||
|
@ -46,6 +46,11 @@ public class VelocityPluginManager implements PluginManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads all plugins from the specified {@code directory}.
|
||||||
|
* @param directory the directory to load from
|
||||||
|
* @throws IOException if we could not open the directory
|
||||||
|
*/
|
||||||
public void loadPlugins(Path directory) throws IOException {
|
public void loadPlugins(Path directory) throws IOException {
|
||||||
checkNotNull(directory, "directory");
|
checkNotNull(directory, "directory");
|
||||||
checkArgument(directory.toFile().isDirectory(), "provided path isn't a directory");
|
checkArgument(directory.toFile().isDirectory(), "provided path isn't a directory");
|
||||||
|
@ -25,6 +25,17 @@ public class VelocityPluginDescription implements PluginDescription {
|
|||||||
private final Map<String, PluginDependency> dependencies;
|
private final Map<String, PluginDependency> dependencies;
|
||||||
private final Path source;
|
private final Path source;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new plugin description.
|
||||||
|
* @param id the ID
|
||||||
|
* @param name the name of the plugin
|
||||||
|
* @param version the plugin version
|
||||||
|
* @param description a description of the plugin
|
||||||
|
* @param url the website for the plugin
|
||||||
|
* @param authors the authors of this plugin
|
||||||
|
* @param dependencies the dependencies for this plugin
|
||||||
|
* @param source the original source for the plugin
|
||||||
|
*/
|
||||||
public VelocityPluginDescription(String id, @Nullable String name, @Nullable String version,
|
public VelocityPluginDescription(String id, @Nullable String name, @Nullable String version,
|
||||||
@Nullable String description, @Nullable String url,
|
@Nullable String description, @Nullable String url,
|
||||||
@Nullable List<String> authors, Collection<PluginDependency> dependencies, Path source) {
|
@Nullable List<String> authors, Collection<PluginDependency> dependencies, Path source) {
|
||||||
|
@ -35,7 +35,8 @@ public class PluginDependencyUtils {
|
|||||||
.allowsSelfLoops(false)
|
.allowsSelfLoops(false)
|
||||||
.expectedNodeCount(candidates.size())
|
.expectedNodeCount(candidates.size())
|
||||||
.build();
|
.build();
|
||||||
Map<String, PluginDescription> candidateMap = Maps.uniqueIndex(candidates, PluginDescription::getId);
|
Map<String, PluginDescription> candidateMap = Maps.uniqueIndex(candidates,
|
||||||
|
PluginDescription::getId);
|
||||||
|
|
||||||
for (PluginDescription description : candidates) {
|
for (PluginDescription description : candidates) {
|
||||||
graph.addNode(description);
|
graph.addNode(description);
|
||||||
|
@ -17,6 +17,11 @@ public class MinecraftDecoder extends MessageToMessageDecoder<ByteBuf> {
|
|||||||
private StateRegistry state;
|
private StateRegistry state;
|
||||||
private StateRegistry.PacketRegistry.ProtocolRegistry registry;
|
private StateRegistry.PacketRegistry.ProtocolRegistry registry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@code MinecraftDecoder} decoding packets from the specified {@code direction}.
|
||||||
|
*
|
||||||
|
* @param direction the direction from which we decode from
|
||||||
|
*/
|
||||||
public MinecraftDecoder(ProtocolUtils.Direction direction) {
|
public MinecraftDecoder(ProtocolUtils.Direction direction) {
|
||||||
this.direction = Preconditions.checkNotNull(direction, "direction");
|
this.direction = Preconditions.checkNotNull(direction, "direction");
|
||||||
this.registry = direction
|
this.registry = direction
|
||||||
|
@ -15,6 +15,11 @@ public class MinecraftEncoder extends MessageToByteEncoder<MinecraftPacket> {
|
|||||||
private StateRegistry state;
|
private StateRegistry state;
|
||||||
private StateRegistry.PacketRegistry.ProtocolRegistry registry;
|
private StateRegistry.PacketRegistry.ProtocolRegistry registry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@code MinecraftEncoder} encoding packets for the specified {@code direction}.
|
||||||
|
*
|
||||||
|
* @param direction the direction to encode to
|
||||||
|
*/
|
||||||
public MinecraftEncoder(ProtocolUtils.Direction direction) {
|
public MinecraftEncoder(ProtocolUtils.Direction direction) {
|
||||||
this.direction = Preconditions.checkNotNull(direction, "direction");
|
this.direction = Preconditions.checkNotNull(direction, "direction");
|
||||||
this.registry = direction
|
this.registry = direction
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
package com.velocitypowered.proxy.scheduler;
|
package com.velocitypowered.proxy.scheduler;
|
||||||
|
|
||||||
|
import static com.google.common.base.Preconditions.checkArgument;
|
||||||
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
|
||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.Multimap;
|
import com.google.common.collect.Multimap;
|
||||||
@ -29,6 +32,11 @@ public class VelocityScheduler implements Scheduler {
|
|||||||
private final Multimap<Object, ScheduledTask> tasksByPlugin = Multimaps.synchronizedMultimap(
|
private final Multimap<Object, ScheduledTask> tasksByPlugin = Multimaps.synchronizedMultimap(
|
||||||
Multimaps.newSetMultimap(new IdentityHashMap<>(), HashSet::new));
|
Multimaps.newSetMultimap(new IdentityHashMap<>(), HashSet::new));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initalizes the scheduler.
|
||||||
|
*
|
||||||
|
* @param pluginManager the Velocity plugin manager
|
||||||
|
*/
|
||||||
public VelocityScheduler(PluginManager pluginManager) {
|
public VelocityScheduler(PluginManager pluginManager) {
|
||||||
this.pluginManager = pluginManager;
|
this.pluginManager = pluginManager;
|
||||||
this.taskService = Executors.newCachedThreadPool(new ThreadFactoryBuilder().setDaemon(true)
|
this.taskService = Executors.newCachedThreadPool(new ThreadFactoryBuilder().setDaemon(true)
|
||||||
@ -40,13 +48,17 @@ public class VelocityScheduler implements Scheduler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TaskBuilder buildTask(Object plugin, Runnable runnable) {
|
public TaskBuilder buildTask(Object plugin, Runnable runnable) {
|
||||||
Preconditions.checkNotNull(plugin, "plugin");
|
checkNotNull(plugin, "plugin");
|
||||||
Preconditions.checkNotNull(runnable, "runnable");
|
checkNotNull(runnable, "runnable");
|
||||||
Preconditions
|
checkArgument(pluginManager.fromInstance(plugin).isPresent(), "plugin is not registered");
|
||||||
.checkArgument(pluginManager.fromInstance(plugin).isPresent(), "plugin is not registered");
|
|
||||||
return new TaskBuilderImpl(plugin, runnable);
|
return new TaskBuilderImpl(plugin, runnable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shuts down the Velocity scheduler.
|
||||||
|
* @return {@code true} if all tasks finished, {@code false} otherwise
|
||||||
|
* @throws InterruptedException if the current thread was interrupted
|
||||||
|
*/
|
||||||
public boolean shutdown() throws InterruptedException {
|
public boolean shutdown() throws InterruptedException {
|
||||||
Collection<ScheduledTask> terminating;
|
Collection<ScheduledTask> terminating;
|
||||||
synchronized (tasksByPlugin) {
|
synchronized (tasksByPlugin) {
|
||||||
@ -121,7 +133,7 @@ public class VelocityScheduler implements Scheduler {
|
|||||||
this.repeat = repeat;
|
this.repeat = repeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void schedule() {
|
void schedule() {
|
||||||
if (repeat == 0) {
|
if (repeat == 0) {
|
||||||
this.future = timerExecutionService.schedule(this, delay, TimeUnit.MILLISECONDS);
|
this.future = timerExecutionService.schedule(this, delay, TimeUnit.MILLISECONDS);
|
||||||
} else {
|
} else {
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren