Mirror von
https://github.com/PaperMC/Velocity.git
synchronisiert 2024-11-17 05:20:14 +01:00
Start tearing out the prefixes
Dieser Commit ist enthalten in:
Ursprung
908dd96015
Commit
437c505cd8
@ -49,7 +49,7 @@ public final class BrigadierCommand implements Command {
|
|||||||
*
|
*
|
||||||
* @return the command node
|
* @return the command node
|
||||||
*/
|
*/
|
||||||
public LiteralCommandNode<CommandSource> getNode() {
|
public LiteralCommandNode<CommandSource> node() {
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ public interface CommandManager {
|
|||||||
* @param alias the first command alias
|
* @param alias the first command alias
|
||||||
* @return a {@link CommandMeta} builder
|
* @return a {@link CommandMeta} builder
|
||||||
*/
|
*/
|
||||||
CommandMeta.Builder metaBuilder(String alias);
|
CommandMeta.Builder buildMeta(String alias);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a builder to create a {@link CommandMeta} for
|
* Returns a builder to create a {@link CommandMeta} for
|
||||||
@ -33,7 +33,7 @@ public interface CommandManager {
|
|||||||
* @param command the command
|
* @param command the command
|
||||||
* @return a {@link CommandMeta} builder
|
* @return a {@link CommandMeta} builder
|
||||||
*/
|
*/
|
||||||
CommandMeta.Builder metaBuilder(BrigadierCommand command);
|
CommandMeta.Builder buildMeta(BrigadierCommand command);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registers the specified command with the specified aliases.
|
* Registers the specified command with the specified aliases.
|
||||||
@ -46,7 +46,7 @@ public interface CommandManager {
|
|||||||
* @see Command for a list of registrable subinterfaces
|
* @see Command for a list of registrable subinterfaces
|
||||||
*/
|
*/
|
||||||
default void register(String alias, Command command, String... otherAliases) {
|
default void register(String alias, Command command, String... otherAliases) {
|
||||||
register(metaBuilder(alias).aliases(otherAliases).build(), command);
|
register(buildMeta(alias).aliases(otherAliases).build(), command);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -88,7 +88,7 @@ public interface CommandManager {
|
|||||||
* @param alias the command alias to lookup
|
* @param alias the command alias to lookup
|
||||||
* @return an {@link CommandMeta} of the alias
|
* @return an {@link CommandMeta} of the alias
|
||||||
*/
|
*/
|
||||||
@Nullable CommandMeta getCommandMeta(String alias);
|
@Nullable CommandMeta commandMeta(String alias);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Attempts to asynchronously execute a command from the given {@code cmdLine}.
|
* Attempts to asynchronously execute a command from the given {@code cmdLine}.
|
||||||
@ -117,7 +117,7 @@ public interface CommandManager {
|
|||||||
*
|
*
|
||||||
* @return the registered aliases
|
* @return the registered aliases
|
||||||
*/
|
*/
|
||||||
Collection<String> getAliases();
|
Collection<String> aliases();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns whether the given alias is registered on this manager.
|
* Returns whether the given alias is registered on this manager.
|
||||||
|
@ -22,7 +22,7 @@ public interface CommandMeta {
|
|||||||
*
|
*
|
||||||
* @return the command aliases
|
* @return the command aliases
|
||||||
*/
|
*/
|
||||||
Collection<String> getAliases();
|
Collection<String> aliases();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an immutable collection containing command nodes that provide
|
* Returns an immutable collection containing command nodes that provide
|
||||||
@ -31,7 +31,7 @@ public interface CommandMeta {
|
|||||||
*
|
*
|
||||||
* @return the hinting command nodes
|
* @return the hinting command nodes
|
||||||
*/
|
*/
|
||||||
Collection<CommandNode<CommandSource>> getHints();
|
Collection<CommandNode<CommandSource>> hints();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the plugin who registered the command.
|
* Returns the plugin who registered the command.
|
||||||
@ -39,7 +39,7 @@ public interface CommandMeta {
|
|||||||
*
|
*
|
||||||
* @return the registering plugin
|
* @return the registering plugin
|
||||||
*/
|
*/
|
||||||
@Nullable Object getPlugin();
|
@Nullable Object plugin();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides a fluent interface to create {@link CommandMeta}s.
|
* Provides a fluent interface to create {@link CommandMeta}s.
|
||||||
|
@ -12,7 +12,11 @@ package com.velocitypowered.api.event;
|
|||||||
*/
|
*/
|
||||||
public class PostOrder {
|
public class PostOrder {
|
||||||
|
|
||||||
public static final short FIRST = -32768;
|
private PostOrder() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final short FIRST = -32767;
|
||||||
public static final short EARLY = -16384;
|
public static final short EARLY = -16384;
|
||||||
public static final short NORMAL = 0;
|
public static final short NORMAL = 0;
|
||||||
public static final short LATE = 16834;
|
public static final short LATE = 16834;
|
||||||
|
@ -8,7 +8,6 @@
|
|||||||
package com.velocitypowered.api.event;
|
package com.velocitypowered.api.event;
|
||||||
|
|
||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
import java.util.Optional;
|
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
@ -23,7 +22,7 @@ public interface ResultedEvent<R extends ResultedEvent.Result> {
|
|||||||
*
|
*
|
||||||
* @return the result of this event
|
* @return the result of this event
|
||||||
*/
|
*/
|
||||||
R getResult();
|
R result();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the result of this event. The result must be non-null.
|
* Sets the result of this event. The result must be non-null.
|
||||||
@ -38,12 +37,12 @@ public interface ResultedEvent<R extends ResultedEvent.Result> {
|
|||||||
interface Result {
|
interface Result {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns whether or not the event is allowed to proceed. Plugins may choose to skip denied
|
* Returns whether the event is allowed to proceed. Plugins may choose to skip denied
|
||||||
* events, and the proxy will respect the result of this method.
|
* events, and the proxy will respect the result of this method.
|
||||||
*
|
*
|
||||||
* @return whether or not the event is allowed to proceed
|
* @return whether the event is allowed to proceed
|
||||||
*/
|
*/
|
||||||
boolean isAllowed();
|
boolean allowed();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -61,7 +60,7 @@ public interface ResultedEvent<R extends ResultedEvent.Result> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAllowed() {
|
public boolean allowed() {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,11 +69,11 @@ public interface ResultedEvent<R extends ResultedEvent.Result> {
|
|||||||
return status ? "allowed" : "denied";
|
return status ? "allowed" : "denied";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static GenericResult allowed() {
|
public static GenericResult allow() {
|
||||||
return ALLOWED;
|
return ALLOWED;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static GenericResult denied() {
|
public static GenericResult deny() {
|
||||||
return DENIED;
|
return DENIED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -87,20 +86,20 @@ public interface ResultedEvent<R extends ResultedEvent.Result> {
|
|||||||
private static final ComponentResult ALLOWED = new ComponentResult(true, null);
|
private static final ComponentResult ALLOWED = new ComponentResult(true, null);
|
||||||
|
|
||||||
private final boolean status;
|
private final boolean status;
|
||||||
private final @Nullable Component reason;
|
private final @Nullable Component explanation;
|
||||||
|
|
||||||
protected ComponentResult(boolean status, @Nullable Component reason) {
|
private ComponentResult(boolean status, @Nullable Component explanation) {
|
||||||
this.status = status;
|
this.status = status;
|
||||||
this.reason = reason;
|
this.explanation = explanation;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAllowed() {
|
public boolean allowed() {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<Component> getReasonComponent() {
|
public @Nullable Component explanation() {
|
||||||
return Optional.ofNullable(reason);
|
return explanation;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -108,19 +107,19 @@ public interface ResultedEvent<R extends ResultedEvent.Result> {
|
|||||||
if (status) {
|
if (status) {
|
||||||
return "allowed";
|
return "allowed";
|
||||||
}
|
}
|
||||||
if (reason != null) {
|
if (explanation != null) {
|
||||||
return "denied: " + PlainTextComponentSerializer.plainText().serialize(reason);
|
return "denied: " + PlainTextComponentSerializer.plainText().serialize(explanation);
|
||||||
}
|
}
|
||||||
return "denied";
|
return "denied";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ComponentResult allowed() {
|
public static ComponentResult allow() {
|
||||||
return ALLOWED;
|
return ALLOWED;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ComponentResult denied(Component reason) {
|
public static ComponentResult deny(Component explanation) {
|
||||||
Preconditions.checkNotNull(reason, "reason");
|
Preconditions.checkNotNull(explanation, "explanation");
|
||||||
return new ComponentResult(false, reason);
|
return new ComponentResult(false, explanation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@ public final class CommandExecuteEvent implements ResultedEvent<CommandResult> {
|
|||||||
public CommandExecuteEvent(CommandSource commandSource, String command) {
|
public CommandExecuteEvent(CommandSource commandSource, String command) {
|
||||||
this.commandSource = Preconditions.checkNotNull(commandSource, "commandSource");
|
this.commandSource = Preconditions.checkNotNull(commandSource, "commandSource");
|
||||||
this.command = Preconditions.checkNotNull(command, "command");
|
this.command = Preconditions.checkNotNull(command, "command");
|
||||||
this.result = CommandResult.allowed();
|
this.result = CommandResult.allow();
|
||||||
}
|
}
|
||||||
|
|
||||||
public CommandSource getCommandSource() {
|
public CommandSource getCommandSource() {
|
||||||
@ -53,7 +53,7 @@ public final class CommandExecuteEvent implements ResultedEvent<CommandResult> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandResult getResult() {
|
public CommandResult result() {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,7 +99,7 @@ public final class CommandExecuteEvent implements ResultedEvent<CommandResult> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAllowed() {
|
public boolean allowed() {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,7 +113,7 @@ public final class CommandExecuteEvent implements ResultedEvent<CommandResult> {
|
|||||||
*
|
*
|
||||||
* @return the allowed result
|
* @return the allowed result
|
||||||
*/
|
*/
|
||||||
public static CommandResult allowed() {
|
public static CommandResult allow() {
|
||||||
return ALLOWED;
|
return ALLOWED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -122,7 +122,7 @@ public final class CommandExecuteEvent implements ResultedEvent<CommandResult> {
|
|||||||
*
|
*
|
||||||
* @return the denied result
|
* @return the denied result
|
||||||
*/
|
*/
|
||||||
public static CommandResult denied() {
|
public static CommandResult deny() {
|
||||||
return DENIED;
|
return DENIED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
|
|||||||
import com.google.common.annotations.Beta;
|
import com.google.common.annotations.Beta;
|
||||||
import com.mojang.brigadier.tree.RootCommandNode;
|
import com.mojang.brigadier.tree.RootCommandNode;
|
||||||
import com.velocitypowered.api.event.annotation.AwaitingEvent;
|
import com.velocitypowered.api.event.annotation.AwaitingEvent;
|
||||||
|
import com.velocitypowered.api.event.player.PlayerReferentEvent;
|
||||||
import com.velocitypowered.api.proxy.Player;
|
import com.velocitypowered.api.proxy.Player;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -22,7 +23,7 @@ import com.velocitypowered.api.proxy.Player;
|
|||||||
*/
|
*/
|
||||||
@AwaitingEvent
|
@AwaitingEvent
|
||||||
@Beta
|
@Beta
|
||||||
public class PlayerAvailableCommandsEvent {
|
public class PlayerAvailableCommandsEvent implements PlayerReferentEvent {
|
||||||
|
|
||||||
private final Player player;
|
private final Player player;
|
||||||
private final RootCommandNode<?> rootNode;
|
private final RootCommandNode<?> rootNode;
|
||||||
@ -39,7 +40,8 @@ public class PlayerAvailableCommandsEvent {
|
|||||||
this.rootNode = checkNotNull(rootNode, "rootNode");
|
this.rootNode = checkNotNull(rootNode, "rootNode");
|
||||||
}
|
}
|
||||||
|
|
||||||
public Player getPlayer() {
|
@Override
|
||||||
|
public Player player() {
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ public final class ConnectionHandshakeEvent {
|
|||||||
this.connection = Preconditions.checkNotNull(connection, "connection");
|
this.connection = Preconditions.checkNotNull(connection, "connection");
|
||||||
}
|
}
|
||||||
|
|
||||||
public InboundConnection getConnection() {
|
public InboundConnection connection() {
|
||||||
return connection;
|
return connection;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,11 +35,11 @@ public final class DisconnectEvent {
|
|||||||
this.loginStatus = Preconditions.checkNotNull(loginStatus, "loginStatus");
|
this.loginStatus = Preconditions.checkNotNull(loginStatus, "loginStatus");
|
||||||
}
|
}
|
||||||
|
|
||||||
public Player getPlayer() {
|
public Player player() {
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LoginStatus getLoginStatus() {
|
public LoginStatus loginStatus() {
|
||||||
return loginStatus;
|
return loginStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@ package com.velocitypowered.api.event.connection;
|
|||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
import com.velocitypowered.api.event.ResultedEvent;
|
import com.velocitypowered.api.event.ResultedEvent;
|
||||||
import com.velocitypowered.api.event.annotation.AwaitingEvent;
|
import com.velocitypowered.api.event.annotation.AwaitingEvent;
|
||||||
|
import com.velocitypowered.api.event.player.PlayerReferentEvent;
|
||||||
import com.velocitypowered.api.proxy.Player;
|
import com.velocitypowered.api.proxy.Player;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -19,22 +20,23 @@ import com.velocitypowered.api.proxy.Player;
|
|||||||
* process.
|
* process.
|
||||||
*/
|
*/
|
||||||
@AwaitingEvent
|
@AwaitingEvent
|
||||||
public final class LoginEvent implements ResultedEvent<ResultedEvent.ComponentResult> {
|
public final class LoginEvent implements ResultedEvent<ResultedEvent.ComponentResult>,
|
||||||
|
PlayerReferentEvent {
|
||||||
|
|
||||||
private final Player player;
|
private final Player player;
|
||||||
private ComponentResult result;
|
private ComponentResult result;
|
||||||
|
|
||||||
public LoginEvent(Player player) {
|
public LoginEvent(Player player) {
|
||||||
this.player = Preconditions.checkNotNull(player, "player");
|
this.player = Preconditions.checkNotNull(player, "player");
|
||||||
this.result = ComponentResult.allowed();
|
this.result = ComponentResult.allow();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Player getPlayer() {
|
public Player player() {
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ComponentResult getResult() {
|
public ComponentResult result() {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ public final class PluginMessageEvent implements ResultedEvent<PluginMessageEven
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ForwardResult getResult() {
|
public ForwardResult result() {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,19 +61,19 @@ public final class PluginMessageEvent implements ResultedEvent<PluginMessageEven
|
|||||||
this.result = Preconditions.checkNotNull(result, "result");
|
this.result = Preconditions.checkNotNull(result, "result");
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChannelMessageSource getSource() {
|
public ChannelMessageSource source() {
|
||||||
return source;
|
return source;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChannelMessageSink getTarget() {
|
public ChannelMessageSink target() {
|
||||||
return target;
|
return target;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChannelIdentifier getIdentifier() {
|
public ChannelIdentifier identifier() {
|
||||||
return identifier;
|
return identifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] getData() {
|
public byte[] rawData() {
|
||||||
return Arrays.copyOf(data, data.length);
|
return Arrays.copyOf(data, data.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,7 +111,7 @@ public final class PluginMessageEvent implements ResultedEvent<PluginMessageEven
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAllowed() {
|
public boolean allowed() {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ package com.velocitypowered.api.event.connection;
|
|||||||
|
|
||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
import com.velocitypowered.api.event.annotation.AwaitingEvent;
|
import com.velocitypowered.api.event.annotation.AwaitingEvent;
|
||||||
|
import com.velocitypowered.api.event.player.PlayerReferentEvent;
|
||||||
import com.velocitypowered.api.proxy.Player;
|
import com.velocitypowered.api.proxy.Player;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -19,7 +20,7 @@ import com.velocitypowered.api.proxy.Player;
|
|||||||
* that fires during the login process.
|
* that fires during the login process.
|
||||||
*/
|
*/
|
||||||
@AwaitingEvent
|
@AwaitingEvent
|
||||||
public final class PostLoginEvent {
|
public final class PostLoginEvent implements PlayerReferentEvent {
|
||||||
|
|
||||||
private final Player player;
|
private final Player player;
|
||||||
|
|
||||||
@ -27,7 +28,7 @@ public final class PostLoginEvent {
|
|||||||
this.player = Preconditions.checkNotNull(player, "player");
|
this.player = Preconditions.checkNotNull(player, "player");
|
||||||
}
|
}
|
||||||
|
|
||||||
public Player getPlayer() {
|
public Player player() {
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ import com.google.common.base.Preconditions;
|
|||||||
import com.velocitypowered.api.event.ResultedEvent;
|
import com.velocitypowered.api.event.ResultedEvent;
|
||||||
import com.velocitypowered.api.event.annotation.AwaitingEvent;
|
import com.velocitypowered.api.event.annotation.AwaitingEvent;
|
||||||
import com.velocitypowered.api.proxy.InboundConnection;
|
import com.velocitypowered.api.proxy.InboundConnection;
|
||||||
import java.util.Optional;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ public final class PreLoginEvent implements ResultedEvent<PreLoginEvent.PreLogin
|
|||||||
public PreLoginEvent(InboundConnection connection, String username) {
|
public PreLoginEvent(InboundConnection connection, String username) {
|
||||||
this.connection = Preconditions.checkNotNull(connection, "connection");
|
this.connection = Preconditions.checkNotNull(connection, "connection");
|
||||||
this.username = Preconditions.checkNotNull(username, "username");
|
this.username = Preconditions.checkNotNull(username, "username");
|
||||||
this.result = PreLoginComponentResult.allowed();
|
this.result = PreLoginComponentResult.allow();
|
||||||
}
|
}
|
||||||
|
|
||||||
public InboundConnection getConnection() {
|
public InboundConnection getConnection() {
|
||||||
@ -56,7 +56,7 @@ public final class PreLoginEvent implements ResultedEvent<PreLoginEvent.PreLogin
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PreLoginComponentResult getResult() {
|
public PreLoginComponentResult result() {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,7 +88,7 @@ public final class PreLoginEvent implements ResultedEvent<PreLoginEvent.PreLogin
|
|||||||
Result.FORCE_OFFLINE, null);
|
Result.FORCE_OFFLINE, null);
|
||||||
|
|
||||||
private final Result result;
|
private final Result result;
|
||||||
private final net.kyori.adventure.text.Component reason;
|
private final Component reason;
|
||||||
|
|
||||||
private PreLoginComponentResult(Result result,
|
private PreLoginComponentResult(Result result,
|
||||||
net.kyori.adventure.text.@Nullable Component reason) {
|
net.kyori.adventure.text.@Nullable Component reason) {
|
||||||
@ -97,12 +97,12 @@ public final class PreLoginEvent implements ResultedEvent<PreLoginEvent.PreLogin
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAllowed() {
|
public boolean allowed() {
|
||||||
return result != Result.DISALLOWED;
|
return result != Result.DISALLOWED;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<net.kyori.adventure.text.Component> getReasonComponent() {
|
public @Nullable Component explanation() {
|
||||||
return Optional.ofNullable(reason);
|
return reason;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isOnlineModeAllowed() {
|
public boolean isOnlineModeAllowed() {
|
||||||
@ -132,14 +132,14 @@ public final class PreLoginEvent implements ResultedEvent<PreLoginEvent.PreLogin
|
|||||||
*
|
*
|
||||||
* @return the allowed result
|
* @return the allowed result
|
||||||
*/
|
*/
|
||||||
public static PreLoginComponentResult allowed() {
|
public static PreLoginComponentResult allow() {
|
||||||
return ALLOWED;
|
return ALLOWED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a result indicating the connection will be allowed through the proxy, but the
|
* Returns a result indicating the connection will be allowed through the proxy, but the
|
||||||
* connection will be forced to use online mode provided that the proxy is in offline mode. This
|
* connection will be forced to use online mode provided that the proxy is in offline mode. This
|
||||||
* acts similarly to {@link #allowed()} on an online-mode proxy.
|
* acts similarly to {@link #allow()} on an online-mode proxy.
|
||||||
*
|
*
|
||||||
* @return the result
|
* @return the result
|
||||||
*/
|
*/
|
||||||
@ -160,12 +160,12 @@ public final class PreLoginEvent implements ResultedEvent<PreLoginEvent.PreLogin
|
|||||||
/**
|
/**
|
||||||
* Denies the login with the specified reason.
|
* Denies the login with the specified reason.
|
||||||
*
|
*
|
||||||
* @param reason the reason for disallowing the connection
|
* @param explanation the reason for disallowing the connection
|
||||||
* @return a new result
|
* @return a new result
|
||||||
*/
|
*/
|
||||||
public static PreLoginComponentResult denied(net.kyori.adventure.text.Component reason) {
|
public static PreLoginComponentResult deny(Component explanation) {
|
||||||
Preconditions.checkNotNull(reason, "reason");
|
Preconditions.checkNotNull(explanation, "explanation");
|
||||||
return new PreLoginComponentResult(Result.DISALLOWED, reason);
|
return new PreLoginComponentResult(Result.DISALLOWED, explanation);
|
||||||
}
|
}
|
||||||
|
|
||||||
private enum Result {
|
private enum Result {
|
||||||
|
@ -39,7 +39,7 @@ public final class PermissionsSetupEvent {
|
|||||||
this.provider = this.defaultProvider = Preconditions.checkNotNull(provider, "provider");
|
this.provider = this.defaultProvider = Preconditions.checkNotNull(provider, "provider");
|
||||||
}
|
}
|
||||||
|
|
||||||
public PermissionSubject getSubject() {
|
public PermissionSubject subject() {
|
||||||
return this.subject;
|
return this.subject;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,7 +53,7 @@ public final class PermissionsSetupEvent {
|
|||||||
return this.provider.createChecker(subject);
|
return this.provider.createChecker(subject);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PermissionProvider getProvider() {
|
public PermissionProvider provider() {
|
||||||
return this.provider;
|
return this.provider;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,23 +44,23 @@ public final class GameProfileRequestEvent {
|
|||||||
boolean onlineMode) {
|
boolean onlineMode) {
|
||||||
this.connection = Preconditions.checkNotNull(connection, "connection");
|
this.connection = Preconditions.checkNotNull(connection, "connection");
|
||||||
this.originalProfile = Preconditions.checkNotNull(originalProfile, "originalProfile");
|
this.originalProfile = Preconditions.checkNotNull(originalProfile, "originalProfile");
|
||||||
this.username = originalProfile.getName();
|
this.username = originalProfile.name();
|
||||||
this.onlineMode = onlineMode;
|
this.onlineMode = onlineMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public InboundConnection getConnection() {
|
public InboundConnection connection() {
|
||||||
return connection;
|
return connection;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUsername() {
|
public String username() {
|
||||||
return username;
|
return username;
|
||||||
}
|
}
|
||||||
|
|
||||||
public GameProfile getOriginalProfile() {
|
public GameProfile originalProfile() {
|
||||||
return originalProfile;
|
return originalProfile;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isOnlineMode() {
|
public boolean onlineMode() {
|
||||||
return onlineMode;
|
return onlineMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,7 +71,7 @@ public final class GameProfileRequestEvent {
|
|||||||
*
|
*
|
||||||
* @return the user's {@link GameProfile}
|
* @return the user's {@link GameProfile}
|
||||||
*/
|
*/
|
||||||
public GameProfile getGameProfile() {
|
public GameProfile profileToUse() {
|
||||||
return gameProfile == null ? originalProfile : gameProfile;
|
return gameProfile == null ? originalProfile : gameProfile;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,7 +80,7 @@ public final class GameProfileRequestEvent {
|
|||||||
*
|
*
|
||||||
* @param gameProfile the profile for this connection, {@code null} uses the original profile
|
* @param gameProfile the profile for this connection, {@code null} uses the original profile
|
||||||
*/
|
*/
|
||||||
public void setGameProfile(@Nullable GameProfile gameProfile) {
|
public void setProfileToUse(@Nullable GameProfile gameProfile) {
|
||||||
this.gameProfile = gameProfile;
|
this.gameProfile = gameProfile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ import com.velocitypowered.api.event.ResultedEvent;
|
|||||||
import com.velocitypowered.api.event.annotation.AwaitingEvent;
|
import com.velocitypowered.api.event.annotation.AwaitingEvent;
|
||||||
import com.velocitypowered.api.proxy.Player;
|
import com.velocitypowered.api.proxy.Player;
|
||||||
import com.velocitypowered.api.proxy.server.RegisteredServer;
|
import com.velocitypowered.api.proxy.server.RegisteredServer;
|
||||||
import java.util.Optional;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
@ -25,11 +25,11 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
|||||||
*/
|
*/
|
||||||
@AwaitingEvent
|
@AwaitingEvent
|
||||||
public final class KickedFromServerEvent implements
|
public final class KickedFromServerEvent implements
|
||||||
ResultedEvent<KickedFromServerEvent.ServerKickResult> {
|
ResultedEvent<KickedFromServerEvent.ServerKickResult>, PlayerReferentEvent {
|
||||||
|
|
||||||
private final Player player;
|
private final Player player;
|
||||||
private final RegisteredServer server;
|
private final RegisteredServer server;
|
||||||
private final net.kyori.adventure.text.@Nullable Component originalReason;
|
private final @Nullable Component originalReason;
|
||||||
private final boolean duringServerConnect;
|
private final boolean duringServerConnect;
|
||||||
private ServerKickResult result;
|
private ServerKickResult result;
|
||||||
|
|
||||||
@ -43,8 +43,8 @@ public final class KickedFromServerEvent implements
|
|||||||
* @param result the initial result
|
* @param result the initial result
|
||||||
*/
|
*/
|
||||||
public KickedFromServerEvent(Player player, RegisteredServer server,
|
public KickedFromServerEvent(Player player, RegisteredServer server,
|
||||||
net.kyori.adventure.text.@Nullable Component originalReason,
|
@Nullable Component originalReason, boolean duringServerConnect,
|
||||||
boolean duringServerConnect, ServerKickResult result) {
|
ServerKickResult result) {
|
||||||
this.player = Preconditions.checkNotNull(player, "player");
|
this.player = Preconditions.checkNotNull(player, "player");
|
||||||
this.server = Preconditions.checkNotNull(server, "server");
|
this.server = Preconditions.checkNotNull(server, "server");
|
||||||
this.originalReason = originalReason;
|
this.originalReason = originalReason;
|
||||||
@ -53,7 +53,7 @@ public final class KickedFromServerEvent implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ServerKickResult getResult() {
|
public ServerKickResult result() {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,16 +62,16 @@ public final class KickedFromServerEvent implements
|
|||||||
this.result = Preconditions.checkNotNull(result, "result");
|
this.result = Preconditions.checkNotNull(result, "result");
|
||||||
}
|
}
|
||||||
|
|
||||||
public Player getPlayer() {
|
public Player player() {
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
public RegisteredServer getServer() {
|
public RegisteredServer server() {
|
||||||
return server;
|
return server;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<net.kyori.adventure.text.Component> getServerKickReason() {
|
public @Nullable Component kickReason() {
|
||||||
return Optional.ofNullable(originalReason);
|
return originalReason;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -107,18 +107,18 @@ public final class KickedFromServerEvent implements
|
|||||||
*/
|
*/
|
||||||
public static final class DisconnectPlayer implements ServerKickResult {
|
public static final class DisconnectPlayer implements ServerKickResult {
|
||||||
|
|
||||||
private final net.kyori.adventure.text.Component component;
|
private final Component component;
|
||||||
|
|
||||||
private DisconnectPlayer(net.kyori.adventure.text.Component component) {
|
private DisconnectPlayer(Component component) {
|
||||||
this.component = Preconditions.checkNotNull(component, "component");
|
this.component = Preconditions.checkNotNull(component, "component");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAllowed() {
|
public boolean allowed() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public net.kyori.adventure.text.Component getReasonComponent() {
|
public Component reason() {
|
||||||
return component;
|
return component;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -128,7 +128,7 @@ public final class KickedFromServerEvent implements
|
|||||||
* @param reason the reason to use when disconnecting the player
|
* @param reason the reason to use when disconnecting the player
|
||||||
* @return the disconnect result
|
* @return the disconnect result
|
||||||
*/
|
*/
|
||||||
public static DisconnectPlayer create(net.kyori.adventure.text.Component reason) {
|
public static DisconnectPlayer disconnect(Component reason) {
|
||||||
return new DisconnectPlayer(reason);
|
return new DisconnectPlayer(reason);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -138,17 +138,17 @@ public final class KickedFromServerEvent implements
|
|||||||
*/
|
*/
|
||||||
public static final class RedirectPlayer implements ServerKickResult {
|
public static final class RedirectPlayer implements ServerKickResult {
|
||||||
|
|
||||||
private final net.kyori.adventure.text.Component message;
|
private final Component message;
|
||||||
private final RegisteredServer server;
|
private final RegisteredServer server;
|
||||||
|
|
||||||
private RedirectPlayer(RegisteredServer server,
|
private RedirectPlayer(RegisteredServer server,
|
||||||
net.kyori.adventure.text.@Nullable Component message) {
|
@Nullable Component message) {
|
||||||
this.server = Preconditions.checkNotNull(server, "server");
|
this.server = Preconditions.checkNotNull(server, "server");
|
||||||
this.message = message;
|
this.message = message;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAllowed() {
|
public boolean allowed() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -156,7 +156,7 @@ public final class KickedFromServerEvent implements
|
|||||||
return server;
|
return server;
|
||||||
}
|
}
|
||||||
|
|
||||||
public net.kyori.adventure.text.@Nullable Component getMessageComponent() {
|
public @Nullable Component getMessageComponent() {
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -169,8 +169,8 @@ public final class KickedFromServerEvent implements
|
|||||||
* @param message the message will be sent to the player after redirecting
|
* @param message the message will be sent to the player after redirecting
|
||||||
* @return the redirect result
|
* @return the redirect result
|
||||||
*/
|
*/
|
||||||
public static RedirectPlayer create(RegisteredServer server,
|
public static RedirectPlayer redirect(RegisteredServer server,
|
||||||
net.kyori.adventure.text.Component message) {
|
Component message) {
|
||||||
return new RedirectPlayer(server, message);
|
return new RedirectPlayer(server, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -181,7 +181,7 @@ public final class KickedFromServerEvent implements
|
|||||||
* @param server the server to send the player to
|
* @param server the server to send the player to
|
||||||
* @return the redirect result
|
* @return the redirect result
|
||||||
*/
|
*/
|
||||||
public static ServerKickResult create(RegisteredServer server) {
|
public static ServerKickResult redirect(RegisteredServer server) {
|
||||||
return new RedirectPlayer(server, null);
|
return new RedirectPlayer(server, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -193,18 +193,18 @@ public final class KickedFromServerEvent implements
|
|||||||
*/
|
*/
|
||||||
public static final class Notify implements ServerKickResult {
|
public static final class Notify implements ServerKickResult {
|
||||||
|
|
||||||
private final net.kyori.adventure.text.Component message;
|
private final Component message;
|
||||||
|
|
||||||
private Notify(net.kyori.adventure.text.Component message) {
|
private Notify(Component message) {
|
||||||
this.message = Preconditions.checkNotNull(message, "message");
|
this.message = Preconditions.checkNotNull(message, "message");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAllowed() {
|
public boolean allowed() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public net.kyori.adventure.text.Component getMessageComponent() {
|
public Component reason() {
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -214,7 +214,7 @@ public final class KickedFromServerEvent implements
|
|||||||
* @param message the server to send the player to
|
* @param message the server to send the player to
|
||||||
* @return the redirect result
|
* @return the redirect result
|
||||||
*/
|
*/
|
||||||
public static Notify create(net.kyori.adventure.text.Component message) {
|
public static Notify notify(Component message) {
|
||||||
return new Notify(message);
|
return new Notify(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ import java.util.List;
|
|||||||
* This event is fired when a client ({@link Player}) sends a plugin message through the
|
* This event is fired when a client ({@link Player}) sends a plugin message through the
|
||||||
* register channel. Velocity will not wait on this event to finish firing.
|
* register channel. Velocity will not wait on this event to finish firing.
|
||||||
*/
|
*/
|
||||||
public final class PlayerChannelRegisterEvent {
|
public final class PlayerChannelRegisterEvent implements PlayerReferentEvent {
|
||||||
|
|
||||||
private final Player player;
|
private final Player player;
|
||||||
private final List<ChannelIdentifier> channels;
|
private final List<ChannelIdentifier> channels;
|
||||||
@ -26,11 +26,11 @@ public final class PlayerChannelRegisterEvent {
|
|||||||
this.channels = Preconditions.checkNotNull(channels, "channels");
|
this.channels = Preconditions.checkNotNull(channels, "channels");
|
||||||
}
|
}
|
||||||
|
|
||||||
public Player getPlayer() {
|
public Player player() {
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<ChannelIdentifier> getChannels() {
|
public List<ChannelIdentifier> channels() {
|
||||||
return channels;
|
return channels;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,7 +20,8 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
|||||||
* to finish firing before forwarding it to the server, if the result allows it.
|
* to finish firing before forwarding it to the server, if the result allows it.
|
||||||
*/
|
*/
|
||||||
@AwaitingEvent
|
@AwaitingEvent
|
||||||
public final class PlayerChatEvent implements ResultedEvent<PlayerChatEvent.ChatResult> {
|
public final class PlayerChatEvent implements ResultedEvent<PlayerChatEvent.ChatResult>,
|
||||||
|
PlayerReferentEvent {
|
||||||
|
|
||||||
private final Player player;
|
private final Player player;
|
||||||
private final String message;
|
private final String message;
|
||||||
@ -35,19 +36,19 @@ public final class PlayerChatEvent implements ResultedEvent<PlayerChatEvent.Chat
|
|||||||
public PlayerChatEvent(Player player, String message) {
|
public PlayerChatEvent(Player player, String message) {
|
||||||
this.player = Preconditions.checkNotNull(player, "player");
|
this.player = Preconditions.checkNotNull(player, "player");
|
||||||
this.message = Preconditions.checkNotNull(message, "message");
|
this.message = Preconditions.checkNotNull(message, "message");
|
||||||
this.result = ChatResult.allowed();
|
this.result = ChatResult.allow();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Player getPlayer() {
|
public Player player() {
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getMessage() {
|
public String message() {
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ChatResult getResult() {
|
public ChatResult result() {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,12 +82,12 @@ public final class PlayerChatEvent implements ResultedEvent<PlayerChatEvent.Chat
|
|||||||
this.message = message;
|
this.message = message;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<String> getMessage() {
|
public Optional<String> modifiedMessage() {
|
||||||
return Optional.ofNullable(message);
|
return Optional.ofNullable(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAllowed() {
|
public boolean allowed() {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -100,7 +101,7 @@ public final class PlayerChatEvent implements ResultedEvent<PlayerChatEvent.Chat
|
|||||||
*
|
*
|
||||||
* @return the allowed result
|
* @return the allowed result
|
||||||
*/
|
*/
|
||||||
public static ChatResult allowed() {
|
public static ChatResult allow() {
|
||||||
return ALLOWED;
|
return ALLOWED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,7 +110,7 @@ public final class PlayerChatEvent implements ResultedEvent<PlayerChatEvent.Chat
|
|||||||
*
|
*
|
||||||
* @return the denied result
|
* @return the denied result
|
||||||
*/
|
*/
|
||||||
public static ChatResult denied() {
|
public static ChatResult deny() {
|
||||||
return DENIED;
|
return DENIED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,7 +120,7 @@ public final class PlayerChatEvent implements ResultedEvent<PlayerChatEvent.Chat
|
|||||||
* @param message the message to use instead
|
* @param message the message to use instead
|
||||||
* @return a result with a new message
|
* @return a result with a new message
|
||||||
*/
|
*/
|
||||||
public static ChatResult message(@NonNull String message) {
|
public static ChatResult modify(@NonNull String message) {
|
||||||
Preconditions.checkNotNull(message, "message");
|
Preconditions.checkNotNull(message, "message");
|
||||||
return new ChatResult(true, message);
|
return new ChatResult(true, message);
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
|||||||
* {@link KickedFromServerEvent} as normal.
|
* {@link KickedFromServerEvent} as normal.
|
||||||
*/
|
*/
|
||||||
@AwaitingEvent
|
@AwaitingEvent
|
||||||
public class PlayerChooseInitialServerEvent {
|
public class PlayerChooseInitialServerEvent implements PlayerReferentEvent {
|
||||||
|
|
||||||
private final Player player;
|
private final Player player;
|
||||||
private @Nullable RegisteredServer initialServer;
|
private @Nullable RegisteredServer initialServer;
|
||||||
@ -37,7 +37,8 @@ public class PlayerChooseInitialServerEvent {
|
|||||||
this.initialServer = initialServer;
|
this.initialServer = initialServer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Player getPlayer() {
|
@Override
|
||||||
|
public Player player() {
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ import com.velocitypowered.api.proxy.Player;
|
|||||||
* Fired when a {@link Player} sends the <code>minecraft:brand</code> plugin message. Velocity will
|
* Fired when a {@link Player} sends the <code>minecraft:brand</code> plugin message. Velocity will
|
||||||
* not wait on the result of this event.
|
* not wait on the result of this event.
|
||||||
*/
|
*/
|
||||||
public final class PlayerClientBrandEvent {
|
public final class PlayerClientBrandEvent implements PlayerReferentEvent {
|
||||||
private final Player player;
|
private final Player player;
|
||||||
private final String brand;
|
private final String brand;
|
||||||
|
|
||||||
@ -29,7 +29,8 @@ public final class PlayerClientBrandEvent {
|
|||||||
this.brand = Preconditions.checkNotNull(brand);
|
this.brand = Preconditions.checkNotNull(brand);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Player getPlayer() {
|
@Override
|
||||||
|
public Player player() {
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ import com.velocitypowered.api.util.ModInfo;
|
|||||||
* This event is fired when a Forge client sends its mods to the proxy while connecting to a server.
|
* This event is fired when a Forge client sends its mods to the proxy while connecting to a server.
|
||||||
* Velocity will not wait on this event to finish firing.
|
* Velocity will not wait on this event to finish firing.
|
||||||
*/
|
*/
|
||||||
public final class PlayerModInfoEvent {
|
public final class PlayerModInfoEvent implements PlayerReferentEvent {
|
||||||
|
|
||||||
private final Player player;
|
private final Player player;
|
||||||
private final ModInfo modInfo;
|
private final ModInfo modInfo;
|
||||||
@ -26,11 +26,12 @@ public final class PlayerModInfoEvent {
|
|||||||
this.modInfo = Preconditions.checkNotNull(modInfo, "modInfo");
|
this.modInfo = Preconditions.checkNotNull(modInfo, "modInfo");
|
||||||
}
|
}
|
||||||
|
|
||||||
public Player getPlayer() {
|
@Override
|
||||||
|
public Player player() {
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ModInfo getModInfo() {
|
public ModInfo modInfo() {
|
||||||
return modInfo;
|
return modInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2023 Velocity Contributors
|
||||||
|
*
|
||||||
|
* The Velocity API is licensed under the terms of the MIT License. For more details,
|
||||||
|
* reference the LICENSE file in the api top-level directory.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.velocitypowered.api.event.player;
|
||||||
|
|
||||||
|
import com.velocitypowered.api.proxy.Player;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines any event that refers to a player.
|
||||||
|
*/
|
||||||
|
public interface PlayerReferentEvent {
|
||||||
|
|
||||||
|
Player player();
|
||||||
|
}
|
@ -21,26 +21,13 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
|||||||
* the player may be kicked from the server.
|
* the player may be kicked from the server.
|
||||||
*/
|
*/
|
||||||
@AwaitingEvent
|
@AwaitingEvent
|
||||||
public class PlayerResourcePackStatusEvent {
|
public class PlayerResourcePackStatusEvent implements PlayerReferentEvent {
|
||||||
|
|
||||||
private final Player player;
|
private final Player player;
|
||||||
private final Status status;
|
private final Status status;
|
||||||
private final @MonotonicNonNull ResourcePackInfo packInfo;
|
private final @MonotonicNonNull ResourcePackInfo packInfo;
|
||||||
private boolean overwriteKick;
|
private boolean overwriteKick;
|
||||||
|
|
||||||
/**
|
|
||||||
* Instantiates this event.
|
|
||||||
*
|
|
||||||
* @deprecated Use {@link PlayerResourcePackStatusEvent#PlayerResourcePackStatusEvent
|
|
||||||
* (Player, Status, ResourcePackInfo)} instead.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public PlayerResourcePackStatusEvent(Player player, Status status) {
|
|
||||||
this.player = Preconditions.checkNotNull(player, "player");
|
|
||||||
this.status = Preconditions.checkNotNull(status, "status");
|
|
||||||
this.packInfo = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiates this event.
|
* Instantiates this event.
|
||||||
*/
|
*/
|
||||||
@ -55,7 +42,8 @@ public class PlayerResourcePackStatusEvent {
|
|||||||
*
|
*
|
||||||
* @return the player
|
* @return the player
|
||||||
*/
|
*/
|
||||||
public Player getPlayer() {
|
@Override
|
||||||
|
public Player player() {
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,7 +68,7 @@ public class PlayerResourcePackStatusEvent {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets whether or not to override the kick resulting from
|
* Gets whether or not to override the kick resulting from
|
||||||
* {@link ResourcePackInfo#getShouldForce()} being true.
|
* {@link ResourcePackInfo#required()} being true.
|
||||||
*
|
*
|
||||||
* @return whether or not to overwrite the result
|
* @return whether or not to overwrite the result
|
||||||
*/
|
*/
|
||||||
@ -89,7 +77,7 @@ public class PlayerResourcePackStatusEvent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set to true to prevent {@link ResourcePackInfo#getShouldForce()}
|
* Set to true to prevent {@link ResourcePackInfo#required()}
|
||||||
* from kicking the player.
|
* from kicking the player.
|
||||||
* Overwriting this kick is only possible on versions older than 1.17,
|
* Overwriting this kick is only possible on versions older than 1.17,
|
||||||
* as the client or server will enforce this regardless. Cancelling the resulting
|
* as the client or server will enforce this regardless. Cancelling the resulting
|
||||||
@ -99,7 +87,7 @@ public class PlayerResourcePackStatusEvent {
|
|||||||
* @throws IllegalArgumentException if the player version is 1.17 or newer
|
* @throws IllegalArgumentException if the player version is 1.17 or newer
|
||||||
*/
|
*/
|
||||||
public void setOverwriteKick(boolean overwriteKick) {
|
public void setOverwriteKick(boolean overwriteKick) {
|
||||||
Preconditions.checkArgument(player.getProtocolVersion()
|
Preconditions.checkArgument(player.protocolVersion()
|
||||||
.compareTo(ProtocolVersion.MINECRAFT_1_17) < 0,
|
.compareTo(ProtocolVersion.MINECRAFT_1_17) < 0,
|
||||||
"overwriteKick is not supported on 1.17 or newer");
|
"overwriteKick is not supported on 1.17 or newer");
|
||||||
this.overwriteKick = overwriteKick;
|
this.overwriteKick = overwriteKick;
|
||||||
|
@ -17,7 +17,7 @@ import com.velocitypowered.api.proxy.player.PlayerSettings;
|
|||||||
* and typically will be fired multiple times per connection. Velocity will not wait on this event
|
* and typically will be fired multiple times per connection. Velocity will not wait on this event
|
||||||
* to finish firing.
|
* to finish firing.
|
||||||
*/
|
*/
|
||||||
public final class PlayerSettingsChangedEvent {
|
public final class PlayerSettingsChangedEvent implements PlayerReferentEvent {
|
||||||
|
|
||||||
private final Player player;
|
private final Player player;
|
||||||
private final PlayerSettings playerSettings;
|
private final PlayerSettings playerSettings;
|
||||||
@ -27,7 +27,8 @@ public final class PlayerSettingsChangedEvent {
|
|||||||
this.playerSettings = Preconditions.checkNotNull(playerSettings, "playerSettings");
|
this.playerSettings = Preconditions.checkNotNull(playerSettings, "playerSettings");
|
||||||
}
|
}
|
||||||
|
|
||||||
public Player getPlayer() {
|
@Override
|
||||||
|
public Player player() {
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,7 +11,6 @@ import com.google.common.base.Preconditions;
|
|||||||
import com.velocitypowered.api.event.annotation.AwaitingEvent;
|
import com.velocitypowered.api.event.annotation.AwaitingEvent;
|
||||||
import com.velocitypowered.api.proxy.Player;
|
import com.velocitypowered.api.proxy.Player;
|
||||||
import com.velocitypowered.api.proxy.server.RegisteredServer;
|
import com.velocitypowered.api.proxy.server.RegisteredServer;
|
||||||
import java.util.Optional;
|
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -25,7 +24,7 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
|||||||
* </p>
|
* </p>
|
||||||
*/
|
*/
|
||||||
@AwaitingEvent
|
@AwaitingEvent
|
||||||
public final class ServerConnectedEvent {
|
public final class ServerConnectedEvent implements PlayerReferentEvent {
|
||||||
|
|
||||||
private final Player player;
|
private final Player player;
|
||||||
private final RegisteredServer server;
|
private final RegisteredServer server;
|
||||||
@ -45,16 +44,16 @@ public final class ServerConnectedEvent {
|
|||||||
this.previousServer = previousServer;
|
this.previousServer = previousServer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Player getPlayer() {
|
public Player player() {
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
public RegisteredServer getServer() {
|
public RegisteredServer newServer() {
|
||||||
return server;
|
return server;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<RegisteredServer> getPreviousServer() {
|
public @Nullable RegisteredServer previousServer() {
|
||||||
return Optional.ofNullable(previousServer);
|
return previousServer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -54,7 +54,7 @@ public class ServerLoginPluginMessageEvent implements ResultedEvent<ResponseResu
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResponseResult getResult() {
|
public ResponseResult result() {
|
||||||
return this.result;
|
return this.result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,11 +63,11 @@ public class ServerLoginPluginMessageEvent implements ResultedEvent<ResponseResu
|
|||||||
this.result = checkNotNull(result, "result");
|
this.result = checkNotNull(result, "result");
|
||||||
}
|
}
|
||||||
|
|
||||||
public ServerConnection getConnection() {
|
public ServerConnection connection() {
|
||||||
return connection;
|
return connection;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChannelIdentifier getIdentifier() {
|
public ChannelIdentifier identifier() {
|
||||||
return identifier;
|
return identifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ public class ServerLoginPluginMessageEvent implements ResultedEvent<ResponseResu
|
|||||||
*
|
*
|
||||||
* @return the contents of the message
|
* @return the contents of the message
|
||||||
*/
|
*/
|
||||||
public byte[] getContents() {
|
public byte[] rawData() {
|
||||||
return contents.clone();
|
return contents.clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,7 +86,7 @@ public class ServerLoginPluginMessageEvent implements ResultedEvent<ResponseResu
|
|||||||
*
|
*
|
||||||
* @return the contents of the message as a stream
|
* @return the contents of the message as a stream
|
||||||
*/
|
*/
|
||||||
public ByteArrayInputStream contentsAsInputStream() {
|
public ByteArrayInputStream dataAsInputStream() {
|
||||||
return new ByteArrayInputStream(contents);
|
return new ByteArrayInputStream(contents);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,11 +96,11 @@ public class ServerLoginPluginMessageEvent implements ResultedEvent<ResponseResu
|
|||||||
*
|
*
|
||||||
* @return the contents of the message as a {@link java.io.DataInput}
|
* @return the contents of the message as a {@link java.io.DataInput}
|
||||||
*/
|
*/
|
||||||
public ByteArrayDataInput contentsAsDataStream() {
|
public ByteArrayDataInput dataAsDataInput() {
|
||||||
return ByteStreams.newDataInput(contents);
|
return ByteStreams.newDataInput(contents);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSequenceId() {
|
public int sequenceId() {
|
||||||
return sequenceId;
|
return sequenceId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,7 +129,7 @@ public class ServerLoginPluginMessageEvent implements ResultedEvent<ResponseResu
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAllowed() {
|
public boolean allowed() {
|
||||||
return response != null;
|
return response != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,7 +139,7 @@ public class ServerLoginPluginMessageEvent implements ResultedEvent<ResponseResu
|
|||||||
* @return the response to the message
|
* @return the response to the message
|
||||||
* @throws IllegalStateException if there is no reply (an unknown message)
|
* @throws IllegalStateException if there is no reply (an unknown message)
|
||||||
*/
|
*/
|
||||||
public byte[] getResponse() {
|
public byte[] response() {
|
||||||
if (response == null) {
|
if (response == null) {
|
||||||
throw new IllegalStateException("Fetching response of unknown message result");
|
throw new IllegalStateException("Fetching response of unknown message result");
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
|
|
||||||
package com.velocitypowered.api.event.player;
|
package com.velocitypowered.api.event.player;
|
||||||
|
|
||||||
import com.google.common.annotations.Beta;
|
|
||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
import com.velocitypowered.api.proxy.Player;
|
import com.velocitypowered.api.proxy.Player;
|
||||||
import com.velocitypowered.api.proxy.server.RegisteredServer;
|
import com.velocitypowered.api.proxy.server.RegisteredServer;
|
||||||
@ -15,11 +14,10 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Fired after the player has connected to a server. The server the player is now connected to is
|
* Fired after the player has connected to a server. The server the player is now connected to is
|
||||||
* available in {@link Player#getCurrentServer()}. Velocity will not wait on this event to finish
|
* available in {@link Player#connectedServer()}. Velocity will not wait on this event to finish
|
||||||
* firing.
|
* firing.
|
||||||
*/
|
*/
|
||||||
@Beta
|
public class ServerPostConnectEvent implements PlayerReferentEvent {
|
||||||
public class ServerPostConnectEvent {
|
|
||||||
private final Player player;
|
private final Player player;
|
||||||
private final RegisteredServer previousServer;
|
private final RegisteredServer previousServer;
|
||||||
|
|
||||||
@ -34,7 +32,7 @@ public class ServerPostConnectEvent {
|
|||||||
*
|
*
|
||||||
* @return the player
|
* @return the player
|
||||||
*/
|
*/
|
||||||
public Player getPlayer() {
|
public Player player() {
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,7 +42,7 @@ public class ServerPostConnectEvent {
|
|||||||
*
|
*
|
||||||
* @return the previous server the player was connected to
|
* @return the previous server the player was connected to
|
||||||
*/
|
*/
|
||||||
public @Nullable RegisteredServer getPreviousServer() {
|
public @Nullable RegisteredServer previousServer() {
|
||||||
return previousServer;
|
return previousServer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
|||||||
*/
|
*/
|
||||||
@AwaitingEvent
|
@AwaitingEvent
|
||||||
public final class ServerPreConnectEvent implements
|
public final class ServerPreConnectEvent implements
|
||||||
ResultedEvent<ServerPreConnectEvent.ServerResult> {
|
ResultedEvent<ServerPreConnectEvent.ServerResult>, PlayerReferentEvent {
|
||||||
|
|
||||||
private final Player player;
|
private final Player player;
|
||||||
private final RegisteredServer originalServer;
|
private final RegisteredServer originalServer;
|
||||||
@ -39,7 +39,7 @@ public final class ServerPreConnectEvent implements
|
|||||||
*/
|
*/
|
||||||
public ServerPreConnectEvent(Player player, RegisteredServer originalServer) {
|
public ServerPreConnectEvent(Player player, RegisteredServer originalServer) {
|
||||||
this(player, originalServer,
|
this(player, originalServer,
|
||||||
player.getCurrentServer().map(ServerConnection::getServer).orElse(null));
|
player.connectedServer().map(ServerConnection::server).orElse(null));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -54,7 +54,7 @@ public final class ServerPreConnectEvent implements
|
|||||||
this.player = Preconditions.checkNotNull(player, "player");
|
this.player = Preconditions.checkNotNull(player, "player");
|
||||||
this.originalServer = Preconditions.checkNotNull(originalServer, "originalServer");
|
this.originalServer = Preconditions.checkNotNull(originalServer, "originalServer");
|
||||||
this.previousServer = previousServer;
|
this.previousServer = previousServer;
|
||||||
this.result = ServerResult.allowed(originalServer);
|
this.result = ServerResult.connectTo(originalServer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -62,12 +62,13 @@ public final class ServerPreConnectEvent implements
|
|||||||
*
|
*
|
||||||
* @return the player connecting to the server
|
* @return the player connecting to the server
|
||||||
*/
|
*/
|
||||||
public Player getPlayer() {
|
@Override
|
||||||
|
public Player player() {
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ServerResult getResult() {
|
public ServerResult result() {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,7 +90,7 @@ public final class ServerPreConnectEvent implements
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the server that the player is currently connected to. Prefer this method over using
|
* Returns the server that the player is currently connected to. Prefer this method over using
|
||||||
* {@link Player#getCurrentServer()} as the current server might get reset after server kicks to
|
* {@link Player#connectedServer()} as the current server might get reset after server kicks to
|
||||||
* prevent connection issues. This is {@code null} if they were not connected to another server
|
* prevent connection issues. This is {@code null} if they were not connected to another server
|
||||||
* beforehand (for instance, if the player has just joined the proxy).
|
* beforehand (for instance, if the player has just joined the proxy).
|
||||||
*
|
*
|
||||||
@ -122,7 +123,7 @@ public final class ServerPreConnectEvent implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAllowed() {
|
public boolean allowed() {
|
||||||
return server != null;
|
return server != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -133,7 +134,7 @@ public final class ServerPreConnectEvent implements
|
|||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
if (server != null) {
|
if (server != null) {
|
||||||
return "allowed: connect to " + server.getServerInfo().getName();
|
return "allowed: connect to " + server.serverInfo().name();
|
||||||
}
|
}
|
||||||
return "denied";
|
return "denied";
|
||||||
}
|
}
|
||||||
@ -145,7 +146,7 @@ public final class ServerPreConnectEvent implements
|
|||||||
*
|
*
|
||||||
* @return a result to deny conneections
|
* @return a result to deny conneections
|
||||||
*/
|
*/
|
||||||
public static ServerResult denied() {
|
public static ServerResult deny() {
|
||||||
return DENIED;
|
return DENIED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,7 +156,7 @@ public final class ServerPreConnectEvent implements
|
|||||||
* @param server the new server to connect to
|
* @param server the new server to connect to
|
||||||
* @return a result to allow the player to connect to the specified server
|
* @return a result to allow the player to connect to the specified server
|
||||||
*/
|
*/
|
||||||
public static ServerResult allowed(RegisteredServer server) {
|
public static ServerResult connectTo(RegisteredServer server) {
|
||||||
Preconditions.checkNotNull(server, "server");
|
Preconditions.checkNotNull(server, "server");
|
||||||
return new ServerResult(server);
|
return new ServerResult(server);
|
||||||
}
|
}
|
||||||
|
@ -36,21 +36,21 @@ public class ServerResourcePackSendEvent implements ResultedEvent<ResultedEvent.
|
|||||||
ResourcePackInfo receivedResourcePack,
|
ResourcePackInfo receivedResourcePack,
|
||||||
ServerConnection serverConnection
|
ServerConnection serverConnection
|
||||||
) {
|
) {
|
||||||
this.result = ResultedEvent.GenericResult.allowed();
|
this.result = ResultedEvent.GenericResult.allow();
|
||||||
this.receivedResourcePack = receivedResourcePack;
|
this.receivedResourcePack = receivedResourcePack;
|
||||||
this.serverConnection = serverConnection;
|
this.serverConnection = serverConnection;
|
||||||
this.providedResourcePack = receivedResourcePack;
|
this.providedResourcePack = receivedResourcePack;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ServerConnection getServerConnection() {
|
public ServerConnection connection() {
|
||||||
return serverConnection;
|
return serverConnection;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ResourcePackInfo getReceivedResourcePack() {
|
public ResourcePackInfo receivedResourcePack() {
|
||||||
return receivedResourcePack;
|
return receivedResourcePack;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ResourcePackInfo getProvidedResourcePack() {
|
public ResourcePackInfo providedResourcePack() {
|
||||||
return providedResourcePack;
|
return providedResourcePack;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ public class ServerResourcePackSendEvent implements ResultedEvent<ResultedEvent.
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public GenericResult getResult() {
|
public GenericResult result() {
|
||||||
return this.result;
|
return this.result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ import java.util.List;
|
|||||||
* the tab complete results.
|
* the tab complete results.
|
||||||
*/
|
*/
|
||||||
@AwaitingEvent
|
@AwaitingEvent
|
||||||
public class TabCompleteEvent {
|
public class TabCompleteEvent implements PlayerReferentEvent {
|
||||||
private final Player player;
|
private final Player player;
|
||||||
private final String partialMessage;
|
private final String partialMessage;
|
||||||
private final List<String> suggestions;
|
private final List<String> suggestions;
|
||||||
@ -45,7 +45,7 @@ public class TabCompleteEvent {
|
|||||||
*
|
*
|
||||||
* @return the requesting player
|
* @return the requesting player
|
||||||
*/
|
*/
|
||||||
public Player getPlayer() {
|
public Player player() {
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ public class TabCompleteEvent {
|
|||||||
*
|
*
|
||||||
* @return the partial message
|
* @return the partial message
|
||||||
*/
|
*/
|
||||||
public String getPartialMessage() {
|
public String partialMessage() {
|
||||||
return partialMessage;
|
return partialMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,7 +63,7 @@ public class TabCompleteEvent {
|
|||||||
*
|
*
|
||||||
* @return the suggestions
|
* @return the suggestions
|
||||||
*/
|
*/
|
||||||
public List<String> getSuggestions() {
|
public List<String> suggestions() {
|
||||||
return suggestions;
|
return suggestions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,11 +24,11 @@ public final class ListenerBoundEvent {
|
|||||||
this.listenerType = Preconditions.checkNotNull(listenerType, "listenerType");
|
this.listenerType = Preconditions.checkNotNull(listenerType, "listenerType");
|
||||||
}
|
}
|
||||||
|
|
||||||
public SocketAddress getAddress() {
|
public SocketAddress address() {
|
||||||
return address;
|
return address;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ListenerType getListenerType() {
|
public ListenerType listenerType() {
|
||||||
return listenerType;
|
return listenerType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,11 +24,11 @@ public final class ListenerCloseEvent {
|
|||||||
this.listenerType = Preconditions.checkNotNull(listenerType, "listenerType");
|
this.listenerType = Preconditions.checkNotNull(listenerType, "listenerType");
|
||||||
}
|
}
|
||||||
|
|
||||||
public SocketAddress getAddress() {
|
public SocketAddress address() {
|
||||||
return address;
|
return address;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ListenerType getListenerType() {
|
public ListenerType listenerType() {
|
||||||
return listenerType;
|
return listenerType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,11 +30,11 @@ public final class ProxyPingEvent {
|
|||||||
this.ping = Preconditions.checkNotNull(ping, "ping");
|
this.ping = Preconditions.checkNotNull(ping, "ping");
|
||||||
}
|
}
|
||||||
|
|
||||||
public InboundConnection getConnection() {
|
public InboundConnection connection() {
|
||||||
return connection;
|
return connection;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ServerPing getPing() {
|
public ServerPing ping() {
|
||||||
return ping;
|
return ping;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ public final class ProxyQueryEvent {
|
|||||||
*
|
*
|
||||||
* @return query type
|
* @return query type
|
||||||
*/
|
*/
|
||||||
public QueryType getQueryType() {
|
public QueryType queryType() {
|
||||||
return queryType;
|
return queryType;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ public final class ProxyQueryEvent {
|
|||||||
*
|
*
|
||||||
* @return querier address
|
* @return querier address
|
||||||
*/
|
*/
|
||||||
public InetAddress getQuerierAddress() {
|
public InetAddress remoteAddress() {
|
||||||
return querierAddress;
|
return querierAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ public final class ProxyQueryEvent {
|
|||||||
*
|
*
|
||||||
* @return the current query response
|
* @return the current query response
|
||||||
*/
|
*/
|
||||||
public QueryResponse getResponse() {
|
public QueryResponse response() {
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ public interface PermissionSubject {
|
|||||||
* @return whether or not the subject has the permission
|
* @return whether or not the subject has the permission
|
||||||
*/
|
*/
|
||||||
default boolean hasPermission(String permission) {
|
default boolean hasPermission(String permission) {
|
||||||
return this.getPermissionChecker().test(permission);
|
return this.permissionChecker().test(permission);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -32,7 +32,7 @@ public interface PermissionSubject {
|
|||||||
* @return the value the permission is set to
|
* @return the value the permission is set to
|
||||||
*/
|
*/
|
||||||
default TriState getPermissionValue(String permission) {
|
default TriState getPermissionValue(String permission) {
|
||||||
return this.getPermissionChecker().value(permission);
|
return this.permissionChecker().value(permission);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -40,5 +40,5 @@ public interface PermissionSubject {
|
|||||||
*
|
*
|
||||||
* @return subject's permission checker
|
* @return subject's permission checker
|
||||||
*/
|
*/
|
||||||
PermissionChecker getPermissionChecker();
|
PermissionChecker permissionChecker();
|
||||||
}
|
}
|
||||||
|
@ -20,14 +20,14 @@ public interface PluginContainer {
|
|||||||
*
|
*
|
||||||
* @return the plugin's description
|
* @return the plugin's description
|
||||||
*/
|
*/
|
||||||
PluginDescription getDescription();
|
PluginDescription description();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the created plugin if it is available.
|
* Returns the created plugin if it is available.
|
||||||
*
|
*
|
||||||
* @return the instance if available
|
* @return the instance if available
|
||||||
*/
|
*/
|
||||||
default Optional<?> getInstance() {
|
default Optional<?> instance() {
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,5 +37,5 @@ public interface PluginContainer {
|
|||||||
*
|
*
|
||||||
* @return an {@link ExecutorService} associated with this plugin
|
* @return an {@link ExecutorService} associated with this plugin
|
||||||
*/
|
*/
|
||||||
ExecutorService getExecutorService();
|
ExecutorService executorService();
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ public interface PluginDescription {
|
|||||||
* @return the plugin ID
|
* @return the plugin ID
|
||||||
* @see Plugin#id()
|
* @see Plugin#id()
|
||||||
*/
|
*/
|
||||||
String getId();
|
String id();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the name of the {@link Plugin} within this container.
|
* Gets the name of the {@link Plugin} within this container.
|
||||||
@ -42,7 +42,7 @@ public interface PluginDescription {
|
|||||||
* @return an {@link Optional} with the plugin name, may be empty
|
* @return an {@link Optional} with the plugin name, may be empty
|
||||||
* @see Plugin#name()
|
* @see Plugin#name()
|
||||||
*/
|
*/
|
||||||
default Optional<String> getName() {
|
default Optional<String> name() {
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,7 +52,7 @@ public interface PluginDescription {
|
|||||||
* @return an {@link Optional} with the plugin version, may be empty
|
* @return an {@link Optional} with the plugin version, may be empty
|
||||||
* @see Plugin#version()
|
* @see Plugin#version()
|
||||||
*/
|
*/
|
||||||
default Optional<String> getVersion() {
|
default Optional<String> version() {
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,7 +62,7 @@ public interface PluginDescription {
|
|||||||
* @return an {@link Optional} with the plugin description, may be empty
|
* @return an {@link Optional} with the plugin description, may be empty
|
||||||
* @see Plugin#description()
|
* @see Plugin#description()
|
||||||
*/
|
*/
|
||||||
default Optional<String> getDescription() {
|
default Optional<String> description() {
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,7 +72,7 @@ public interface PluginDescription {
|
|||||||
* @return an {@link Optional} with the plugin url, may be empty
|
* @return an {@link Optional} with the plugin url, may be empty
|
||||||
* @see Plugin#url()
|
* @see Plugin#url()
|
||||||
*/
|
*/
|
||||||
default Optional<String> getUrl() {
|
default Optional<String> url() {
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,7 +82,7 @@ public interface PluginDescription {
|
|||||||
* @return the plugin authors, may be empty
|
* @return the plugin authors, may be empty
|
||||||
* @see Plugin#authors()
|
* @see Plugin#authors()
|
||||||
*/
|
*/
|
||||||
default List<String> getAuthors() {
|
default List<String> authors() {
|
||||||
return ImmutableList.of();
|
return ImmutableList.of();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,11 +92,11 @@ public interface PluginDescription {
|
|||||||
* @return the plugin dependencies, can be empty
|
* @return the plugin dependencies, can be empty
|
||||||
* @see Plugin#dependencies()
|
* @see Plugin#dependencies()
|
||||||
*/
|
*/
|
||||||
default Collection<PluginDependency> getDependencies() {
|
default Collection<PluginDependency> dependencies() {
|
||||||
return ImmutableSet.of();
|
return ImmutableSet.of();
|
||||||
}
|
}
|
||||||
|
|
||||||
default Optional<PluginDependency> getDependency(String id) {
|
default Optional<PluginDependency> dependency(String id) {
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,14 +32,14 @@ public interface PluginManager {
|
|||||||
* @param id the plugin ID
|
* @param id the plugin ID
|
||||||
* @return the plugin, if available
|
* @return the plugin, if available
|
||||||
*/
|
*/
|
||||||
Optional<PluginContainer> getPlugin(String id);
|
Optional<PluginContainer> plugin(String id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets a {@link Collection} of all {@link PluginContainer}s.
|
* Gets a {@link Collection} of all {@link PluginContainer}s.
|
||||||
*
|
*
|
||||||
* @return the plugins
|
* @return the plugins
|
||||||
*/
|
*/
|
||||||
Collection<PluginContainer> getPlugins();
|
Collection<PluginContainer> plugins();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if a plugin is loaded based on its ID.
|
* Checks if a plugin is loaded based on its ID.
|
||||||
|
@ -44,7 +44,7 @@ public final class PluginDependency {
|
|||||||
*
|
*
|
||||||
* @return the plugin ID
|
* @return the plugin ID
|
||||||
*/
|
*/
|
||||||
public String getId() {
|
public String id() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,7 +53,7 @@ public final class PluginDependency {
|
|||||||
*
|
*
|
||||||
* @return an {@link Optional} with the plugin version, may be empty
|
* @return an {@link Optional} with the plugin version, may be empty
|
||||||
*/
|
*/
|
||||||
public Optional<String> getVersion() {
|
public Optional<String> version() {
|
||||||
return Optional.ofNullable(version);
|
return Optional.ofNullable(version);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,7 +62,7 @@ public final class PluginDependency {
|
|||||||
*
|
*
|
||||||
* @return true if dependency is optional
|
* @return true if dependency is optional
|
||||||
*/
|
*/
|
||||||
public boolean isOptional() {
|
public boolean optional() {
|
||||||
return optional;
|
return optional;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@ package com.velocitypowered.api.proxy;
|
|||||||
import com.velocitypowered.api.proxy.server.RegisteredServer;
|
import com.velocitypowered.api.proxy.server.RegisteredServer;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides a fluent interface to send a connection request to another server on the proxy. A
|
* Provides a fluent interface to send a connection request to another server on the proxy. A
|
||||||
@ -22,7 +23,7 @@ public interface ConnectionRequestBuilder {
|
|||||||
*
|
*
|
||||||
* @return the server this request will connect to
|
* @return the server this request will connect to
|
||||||
*/
|
*/
|
||||||
RegisteredServer getServer();
|
RegisteredServer server();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initiates the connection to the remote server and emits a result on the {@link
|
* Initiates the connection to the remote server and emits a result on the {@link
|
||||||
@ -59,7 +60,7 @@ public interface ConnectionRequestBuilder {
|
|||||||
* @return whether or not the request succeeded
|
* @return whether or not the request succeeded
|
||||||
*/
|
*/
|
||||||
default boolean isSuccessful() {
|
default boolean isSuccessful() {
|
||||||
return getStatus() == Status.SUCCESS;
|
return status() == Status.SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -67,21 +68,21 @@ public interface ConnectionRequestBuilder {
|
|||||||
*
|
*
|
||||||
* @return the status for this result
|
* @return the status for this result
|
||||||
*/
|
*/
|
||||||
Status getStatus();
|
Status status();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an (optional) textual reason for the failure to connect to the server.
|
* Returns an (optional) textual reason for the failure to connect to the server.
|
||||||
*
|
*
|
||||||
* @return the reason why the user could not connect to the server
|
* @return the reason why the user could not connect to the server
|
||||||
*/
|
*/
|
||||||
Optional<net.kyori.adventure.text.Component> getReasonComponent();
|
Optional<Component> reason();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the server we actually tried to connect to.
|
* Returns the server we actually tried to connect to.
|
||||||
*
|
*
|
||||||
* @return the server we actually tried to connect to
|
* @return the server we actually tried to connect to
|
||||||
*/
|
*/
|
||||||
RegisteredServer getAttemptedConnection();
|
RegisteredServer attemptedConnectedTo();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -22,14 +22,14 @@ public interface InboundConnection {
|
|||||||
*
|
*
|
||||||
* @return the player's remote address
|
* @return the player's remote address
|
||||||
*/
|
*/
|
||||||
SocketAddress getRemoteAddress();
|
SocketAddress remoteAddress();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the hostname that the user entered into the client, if applicable.
|
* Returns the hostname that the user entered into the client, if applicable.
|
||||||
*
|
*
|
||||||
* @return the hostname from the client
|
* @return the hostname from the client
|
||||||
*/
|
*/
|
||||||
Optional<InetSocketAddress> getVirtualHost();
|
Optional<InetSocketAddress> virtualHost();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine whether or not the player remains online.
|
* Determine whether or not the player remains online.
|
||||||
@ -43,5 +43,5 @@ public interface InboundConnection {
|
|||||||
*
|
*
|
||||||
* @return the protocol version the connection uses
|
* @return the protocol version the connection uses
|
||||||
*/
|
*/
|
||||||
ProtocolVersion getProtocolVersion();
|
ProtocolVersion protocolVersion();
|
||||||
}
|
}
|
||||||
|
@ -47,17 +47,17 @@ public interface Player extends
|
|||||||
*
|
*
|
||||||
* @return the username
|
* @return the username
|
||||||
*/
|
*/
|
||||||
String getUsername();
|
String username();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the locale the proxy will use to send messages translated via the Adventure global
|
* Returns the locale the proxy will use to send messages translated via the Adventure global
|
||||||
* translator. By default, the value of {@link PlayerSettings#getLocale()} is used.
|
* translator. By default, the value of {@link PlayerSettings#locale()} is used.
|
||||||
*
|
*
|
||||||
* <p>This can be {@code null} when the client has not yet connected to any server.</p>
|
* <p>This can be {@code null} when the client has not yet connected to any server.</p>
|
||||||
*
|
*
|
||||||
* @return the locale.
|
* @return the locale.
|
||||||
*/
|
*/
|
||||||
@Nullable Locale getEffectiveLocale();
|
@Nullable Locale effectiveLocale();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Change the locale the proxy will be translating its messages to.
|
* Change the locale the proxy will be translating its messages to.
|
||||||
@ -71,21 +71,21 @@ public interface Player extends
|
|||||||
*
|
*
|
||||||
* @return the UUID
|
* @return the UUID
|
||||||
*/
|
*/
|
||||||
UUID getUniqueId();
|
UUID uuid();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the server that the player is currently connected to.
|
* Returns the server that the player is currently connected to.
|
||||||
*
|
*
|
||||||
* @return an {@link Optional} the server that the player is connected to, which may be empty
|
* @return an {@link Optional} the server that the player is connected to, which may be empty
|
||||||
*/
|
*/
|
||||||
Optional<ServerConnection> getCurrentServer();
|
Optional<ServerConnection> connectedServer();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the player's client settings.
|
* Returns the player's client settings.
|
||||||
*
|
*
|
||||||
* @return the settings
|
* @return the settings
|
||||||
*/
|
*/
|
||||||
PlayerSettings getPlayerSettings();
|
PlayerSettings settings();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns whether the player has sent its client settings.
|
* Returns whether the player has sent its client settings.
|
||||||
@ -99,14 +99,14 @@ public interface Player extends
|
|||||||
*
|
*
|
||||||
* @return an {@link Optional} the mod info. which may be empty
|
* @return an {@link Optional} the mod info. which may be empty
|
||||||
*/
|
*/
|
||||||
Optional<ModInfo> getModInfo();
|
Optional<ModInfo> modInfo();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the player's estimated ping in milliseconds.
|
* Gets the player's estimated ping in milliseconds.
|
||||||
*
|
*
|
||||||
* @return the player's ping or -1 if ping information is currently unknown
|
* @return the player's ping or -1 if ping information is currently unknown
|
||||||
*/
|
*/
|
||||||
long getPing();
|
long ping();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the player's connection status.
|
* Returns the player's connection status.
|
||||||
@ -130,29 +130,19 @@ public interface Player extends
|
|||||||
*
|
*
|
||||||
* @return the player's profile properties
|
* @return the player's profile properties
|
||||||
*/
|
*/
|
||||||
List<GameProfile.Property> getGameProfileProperties();
|
List<GameProfile.Property> profileProperties();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the player's profile properties.
|
* Sets the player's profile properties.
|
||||||
*
|
*
|
||||||
* @param properties the properties
|
* @param properties the properties
|
||||||
*/
|
*/
|
||||||
void setGameProfileProperties(List<GameProfile.Property> properties);
|
void setProfileProperties(List<GameProfile.Property> properties);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the player's game profile.
|
* Returns the player's game profile.
|
||||||
*/
|
*/
|
||||||
GameProfile getGameProfile();
|
GameProfile profile();
|
||||||
|
|
||||||
/**
|
|
||||||
* Clears the tab list header and footer for the player.
|
|
||||||
*
|
|
||||||
* @deprecated Use {@link Player#clearPlayerListHeaderAndFooter()}.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
default void clearHeaderAndFooter() {
|
|
||||||
clearPlayerListHeaderAndFooter();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clears the player list header and footer.
|
* Clears the player list header and footer.
|
||||||
@ -178,7 +168,7 @@ public interface Player extends
|
|||||||
*
|
*
|
||||||
* @return this player's tab list
|
* @return this player's tab list
|
||||||
*/
|
*/
|
||||||
TabList getTabList();
|
TabList tabList();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Disconnects the player with the specified reason. Once this method is called, further calls to
|
* Disconnects the player with the specified reason. Once this method is called, further calls to
|
||||||
@ -186,7 +176,7 @@ public interface Player extends
|
|||||||
*
|
*
|
||||||
* @param reason component with the reason
|
* @param reason component with the reason
|
||||||
*/
|
*/
|
||||||
void disconnect(net.kyori.adventure.text.Component reason);
|
void disconnect(Component reason);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends chat input onto the players current server as if they typed it into the client chat box.
|
* Sends chat input onto the players current server as if they typed it into the client chat box.
|
||||||
@ -195,29 +185,6 @@ public interface Player extends
|
|||||||
*/
|
*/
|
||||||
void spoofChatInput(String input);
|
void spoofChatInput(String input);
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends the specified resource pack from {@code url} to the user. If at all possible, send the
|
|
||||||
* resource pack using {@link #sendResourcePack(String, byte[])}. To monitor the status of the
|
|
||||||
* sent resource pack, subscribe to {@link PlayerResourcePackStatusEvent}.
|
|
||||||
*
|
|
||||||
* @param url the URL for the resource pack
|
|
||||||
* @deprecated Use {@link #sendResourcePackOffer(ResourcePackInfo)} instead
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
void sendResourcePack(String url);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends the specified resource pack from {@code url} to the user, using the specified 20-byte
|
|
||||||
* SHA-1 hash. To monitor the status of the sent resource pack, subscribe to
|
|
||||||
* {@link PlayerResourcePackStatusEvent}.
|
|
||||||
*
|
|
||||||
* @param url the URL for the resource pack
|
|
||||||
* @param hash the SHA-1 hash value for the resource pack
|
|
||||||
* @deprecated Use {@link #sendResourcePackOffer(ResourcePackInfo)} instead
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
void sendResourcePack(String url, byte[] hash);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Queues and sends a new Resource-pack offer to the player.
|
* Queues and sends a new Resource-pack offer to the player.
|
||||||
* To monitor the status of the sent resource pack, subscribe to
|
* To monitor the status of the sent resource pack, subscribe to
|
||||||
@ -236,7 +203,7 @@ public interface Player extends
|
|||||||
* @return the applied resource pack or null if none.
|
* @return the applied resource pack or null if none.
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
ResourcePackInfo getAppliedResourcePack();
|
ResourcePackInfo appliedResourcePack();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the {@link ResourcePackInfo} of the resource pack
|
* Gets the {@link ResourcePackInfo} of the resource pack
|
||||||
@ -246,14 +213,14 @@ public interface Player extends
|
|||||||
* @return the pending resource pack or null if none
|
* @return the pending resource pack or null if none
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
ResourcePackInfo getPendingResourcePack();
|
ResourcePackInfo pendingResourcePack();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <strong>Note that this method does not send a plugin message to the server the player
|
* <strong>Note that this method does not send a plugin message to the server the player
|
||||||
* is connected to.</strong> You should only use this method if you are trying to communicate
|
* is connected to.</strong> You should only use this method if you are trying to communicate
|
||||||
* with a mod that is installed on the player's client. To send a plugin message to the server
|
* with a mod that is installed on the player's client. To send a plugin message to the server
|
||||||
* from the player, you should use the equivalent method on the instance returned by
|
* from the player, you should use the equivalent method on the instance returned by
|
||||||
* {@link #getCurrentServer()}.
|
* {@link #connectedServer()}.
|
||||||
*
|
*
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
@ -268,8 +235,8 @@ public interface Player extends
|
|||||||
@Override
|
@Override
|
||||||
default @NotNull HoverEvent<HoverEvent.ShowEntity> asHoverEvent(
|
default @NotNull HoverEvent<HoverEvent.ShowEntity> asHoverEvent(
|
||||||
@NotNull UnaryOperator<HoverEvent.ShowEntity> op) {
|
@NotNull UnaryOperator<HoverEvent.ShowEntity> op) {
|
||||||
return HoverEvent.showEntity(op.apply(HoverEvent.ShowEntity.of(this, getUniqueId(),
|
return HoverEvent.showEntity(op.apply(HoverEvent.ShowEntity.showEntity(this, uuid(),
|
||||||
Component.text(getUsername()))));
|
Component.text(username()))));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -214,7 +214,7 @@ public interface ProxyServer extends Audience {
|
|||||||
*
|
*
|
||||||
* <p>Do also make sure that the resource pack is in the correct format for the version
|
* <p>Do also make sure that the resource pack is in the correct format for the version
|
||||||
* of the client. It is also highly recommended to always provide the resource-pack SHA-1 hash
|
* of the client. It is also highly recommended to always provide the resource-pack SHA-1 hash
|
||||||
* of the resource pack with {@link ResourcePackInfo.Builder#setHash(byte[])}
|
* of the resource pack with {@link ResourcePackInfo.Builder#hash(byte[])}
|
||||||
* whenever possible to save bandwidth. If a hash is present the client will first check
|
* whenever possible to save bandwidth. If a hash is present the client will first check
|
||||||
* if it already has a resource pack by that hash cached.</p>
|
* if it already has a resource pack by that hash cached.</p>
|
||||||
*
|
*
|
||||||
|
@ -23,7 +23,7 @@ public interface ServerConnection extends ChannelMessageSource, ChannelMessageSi
|
|||||||
*
|
*
|
||||||
* @return the server this connection is connected to
|
* @return the server this connection is connected to
|
||||||
*/
|
*/
|
||||||
RegisteredServer getServer();
|
RegisteredServer server();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the server that the player associated with this connection was connected to before
|
* Returns the server that the player associated with this connection was connected to before
|
||||||
@ -31,19 +31,19 @@ public interface ServerConnection extends ChannelMessageSource, ChannelMessageSi
|
|||||||
*
|
*
|
||||||
* @return the server the player was connected to.
|
* @return the server the player was connected to.
|
||||||
*/
|
*/
|
||||||
Optional<RegisteredServer> getPreviousServer();
|
Optional<RegisteredServer> previousServer();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the server info for this connection.
|
* Returns the server info for this connection.
|
||||||
*
|
*
|
||||||
* @return the server info for this connection
|
* @return the server info for this connection
|
||||||
*/
|
*/
|
||||||
ServerInfo getServerInfo();
|
ServerInfo serverInfo();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the player that this connection is associated with.
|
* Returns the player that this connection is associated with.
|
||||||
*
|
*
|
||||||
* @return the player for this connection
|
* @return the player for this connection
|
||||||
*/
|
*/
|
||||||
Player getPlayer();
|
Player player();
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,7 @@ import com.velocitypowered.api.util.Favicon;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Exposes certain proxy configuration information that plugins may use.
|
* Exposes certain proxy configuration information that plugins may use.
|
||||||
@ -51,7 +52,7 @@ public interface ProxyConfig {
|
|||||||
*
|
*
|
||||||
* @return the motd component
|
* @return the motd component
|
||||||
*/
|
*/
|
||||||
net.kyori.adventure.text.Component getMotd();
|
Component getMotd();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the maximum players shown in the tab list.
|
* Get the maximum players shown in the tab list.
|
||||||
|
@ -25,7 +25,7 @@ public interface IdentifiedKey extends KeySigned {
|
|||||||
*
|
*
|
||||||
* @return the RSA public key in question
|
* @return the RSA public key in question
|
||||||
*/
|
*/
|
||||||
PublicKey getSignedPublicKey();
|
PublicKey publicKey();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -45,14 +45,14 @@ public interface IdentifiedKey extends KeySigned {
|
|||||||
* @return the holder UUID or null if not present
|
* @return the holder UUID or null if not present
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
UUID getSignatureHolder();
|
UUID signatureHolder();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves the key revision.
|
* Retrieves the key revision.
|
||||||
*
|
*
|
||||||
* @return the key revision
|
* @return the key revision
|
||||||
*/
|
*/
|
||||||
Revision getKeyRevision();
|
Revision revision();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The different versions of player keys, per Minecraft version.
|
* The different versions of player keys, per Minecraft version.
|
||||||
@ -69,11 +69,11 @@ public interface IdentifiedKey extends KeySigned {
|
|||||||
this.applicableTo = applicableTo;
|
this.applicableTo = applicableTo;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<Revision> getBackwardsCompatibleTo() {
|
public Set<Revision> backwardsCompatibleTo() {
|
||||||
return backwardsCompatibleTo;
|
return backwardsCompatibleTo;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<ProtocolVersion> getApplicableTo() {
|
public Set<ProtocolVersion> applicableTo() {
|
||||||
return applicableTo;
|
return applicableTo;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,5 +20,5 @@ public interface KeyIdentifiable {
|
|||||||
*
|
*
|
||||||
* @return the key or null if not available
|
* @return the key or null if not available
|
||||||
*/
|
*/
|
||||||
@Nullable IdentifiedKey getIdentifiedKey();
|
@Nullable IdentifiedKey identifiedKey();
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ public interface KeySigned {
|
|||||||
*
|
*
|
||||||
* @return the key
|
* @return the key
|
||||||
*/
|
*/
|
||||||
PublicKey getSigner();
|
PublicKey signer();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the expiry time point of the key.
|
* Returns the expiry time point of the key.
|
||||||
@ -32,7 +32,7 @@ public interface KeySigned {
|
|||||||
*
|
*
|
||||||
* @return the expiry time point
|
* @return the expiry time point
|
||||||
*/
|
*/
|
||||||
Instant getExpiryTemporal();
|
Instant signatureExpiry();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -41,7 +41,7 @@ public interface KeySigned {
|
|||||||
* @return true if proxy time is after expiry time
|
* @return true if proxy time is after expiry time
|
||||||
*/
|
*/
|
||||||
default boolean hasExpired() {
|
default boolean hasExpired() {
|
||||||
return Instant.now().isAfter(getExpiryTemporal());
|
return Instant.now().isAfter(signatureExpiry());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -50,7 +50,7 @@ public interface KeySigned {
|
|||||||
* @return an RSA signature
|
* @return an RSA signature
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
byte[] getSignature();
|
byte[] signature();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validates the signature, expiry temporal and key against the
|
* Validates the signature, expiry temporal and key against the
|
||||||
@ -71,7 +71,7 @@ public interface KeySigned {
|
|||||||
*
|
*
|
||||||
* @return signature salt or null
|
* @return signature salt or null
|
||||||
*/
|
*/
|
||||||
default byte[] getSalt() {
|
default byte[] salt() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,14 +19,14 @@ public interface SignedMessage extends KeySigned {
|
|||||||
*
|
*
|
||||||
* @return the message
|
* @return the message
|
||||||
*/
|
*/
|
||||||
String getMessage();
|
String message();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the signers UUID.
|
* Returns the signers UUID.
|
||||||
*
|
*
|
||||||
* @return the uuid
|
* @return the uuid
|
||||||
*/
|
*/
|
||||||
UUID getSignerUuid();
|
UUID signerUuid();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If true the signature of this message applies to a stylized component instead.
|
* If true the signature of this message applies to a stylized component instead.
|
||||||
|
@ -17,5 +17,5 @@ public interface ChannelIdentifier {
|
|||||||
*
|
*
|
||||||
* @return the textual representation of the identifier
|
* @return the textual representation of the identifier
|
||||||
*/
|
*/
|
||||||
String getId();
|
String id();
|
||||||
}
|
}
|
||||||
|
@ -58,7 +58,7 @@ public final class LegacyChannelIdentifier implements ChannelIdentifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getId() {
|
public String id() {
|
||||||
return this.getName();
|
return this.getName();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -128,7 +128,7 @@ public final class MinecraftChannelIdentifier implements ChannelIdentifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getId() {
|
public String id() {
|
||||||
return namespace + ":" + name;
|
return namespace + ":" + name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,5 +19,5 @@ public interface ChatSession extends KeyIdentifiable {
|
|||||||
*
|
*
|
||||||
* @return the session UUID
|
* @return the session UUID
|
||||||
*/
|
*/
|
||||||
UUID getSessionId();
|
UUID sessionId();
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ public interface PlayerSettings {
|
|||||||
*
|
*
|
||||||
* @return the client locale
|
* @return the client locale
|
||||||
*/
|
*/
|
||||||
Locale getLocale();
|
Locale locale();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the client's view distance. This does not guarantee the client will see this many
|
* Returns the client's view distance. This does not guarantee the client will see this many
|
||||||
@ -27,14 +27,14 @@ public interface PlayerSettings {
|
|||||||
*
|
*
|
||||||
* @return the client view distance
|
* @return the client view distance
|
||||||
*/
|
*/
|
||||||
byte getViewDistance();
|
byte viewDistance();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the chat setting for the client.
|
* Returns the chat setting for the client.
|
||||||
*
|
*
|
||||||
* @return the chat setting
|
* @return the chat setting
|
||||||
*/
|
*/
|
||||||
ChatMode getChatMode();
|
ChatMode chatMode();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns whether or not the client has chat colors disabled.
|
* Returns whether or not the client has chat colors disabled.
|
||||||
@ -48,14 +48,14 @@ public interface PlayerSettings {
|
|||||||
*
|
*
|
||||||
* @return the skin parts for the client
|
* @return the skin parts for the client
|
||||||
*/
|
*/
|
||||||
SkinParts getSkinParts();
|
SkinParts skinParts();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the primary hand of the client.
|
* Returns the primary hand of the client.
|
||||||
*
|
*
|
||||||
* @return the primary hand of the client
|
* @return the primary hand of the client
|
||||||
*/
|
*/
|
||||||
MainHand getMainHand();
|
MainHand mainHand();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns whether the client explicitly allows listing on the
|
* Returns whether the client explicitly allows listing on the
|
||||||
|
@ -20,7 +20,7 @@ public interface ResourcePackInfo {
|
|||||||
*
|
*
|
||||||
* @return the location of the resource-pack
|
* @return the location of the resource-pack
|
||||||
*/
|
*/
|
||||||
String getUrl();
|
String url();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the {@link Component} that is displayed on the resource-pack prompt.
|
* Gets the {@link Component} that is displayed on the resource-pack prompt.
|
||||||
@ -29,31 +29,31 @@ public interface ResourcePackInfo {
|
|||||||
* @return the prompt if present or null otherwise
|
* @return the prompt if present or null otherwise
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
Component getPrompt();
|
Component prompt();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets whether or not the acceptance of the resource-pack is enforced.
|
* Gets whether or not the acceptance of the resource-pack is enforced.
|
||||||
* See {@link Builder#setShouldForce(boolean)} for more information.
|
* See {@link Builder#required(boolean)} for more information.
|
||||||
*
|
*
|
||||||
* @return whether or not to force usage of this resource-pack
|
* @return whether or not to force usage of this resource-pack
|
||||||
*/
|
*/
|
||||||
boolean getShouldForce();
|
boolean required();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the SHA-1 hash of the resource-pack
|
* Gets the SHA-1 hash of the resource-pack
|
||||||
* See {@link Builder#setHash(byte[])} for more information.
|
* See {@link Builder#hash(byte[])} for more information.
|
||||||
*
|
*
|
||||||
* @return the hash if present or null otherwise
|
* @return the hash if present or null otherwise
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
byte[] getHash();
|
byte[] hash();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the {@link Origin} of this resource-pack.
|
* Gets the {@link Origin} of this resource-pack.
|
||||||
*
|
*
|
||||||
* @return the origin of the resource pack
|
* @return the origin of the resource pack
|
||||||
*/
|
*/
|
||||||
Origin getOrigin();
|
Origin origin();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the original {@link Origin} of the resource-pack.
|
* Gets the original {@link Origin} of the resource-pack.
|
||||||
@ -62,16 +62,15 @@ public interface ResourcePackInfo {
|
|||||||
*
|
*
|
||||||
* @return the origin of the resource pack
|
* @return the origin of the resource pack
|
||||||
*/
|
*/
|
||||||
Origin getOriginalOrigin();
|
Origin originalOrigin();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a copy of this {@link ResourcePackInfo} instance as a builder so that it can
|
* Returns a copy of this {@link ResourcePackInfo} instance as a builder so that it can
|
||||||
* be modified.
|
* be modified.
|
||||||
* It is <b>not</b> guaranteed that
|
* It is <b>not</b> guaranteed that
|
||||||
* {@code resourcePackInfo.asBuilder().build().equals(resourcePackInfo)} is true. That is due to
|
* {@code resourcePackInfo.asBuilder().build().equals(resourcePackInfo)} is true. That is due to
|
||||||
* the transient {@link ResourcePackInfo#getOrigin()} and
|
* the transient {@link ResourcePackInfo#origin()} and
|
||||||
* {@link ResourcePackInfo#getOriginalOrigin()} fields.
|
* {@link ResourcePackInfo#originalOrigin()} fields.
|
||||||
*
|
|
||||||
*
|
*
|
||||||
* @return a content-copy of this instance as a {@link ResourcePackInfo.Builder}
|
* @return a content-copy of this instance as a {@link ResourcePackInfo.Builder}
|
||||||
*/
|
*/
|
||||||
@ -82,8 +81,8 @@ public interface ResourcePackInfo {
|
|||||||
* <p/>
|
* <p/>
|
||||||
* It is <b>not</b> guaranteed that
|
* It is <b>not</b> guaranteed that
|
||||||
* {@code resourcePackInfo.asBuilder(resourcePackInfo.getUrl()).build().equals(resourcePackInfo)}
|
* {@code resourcePackInfo.asBuilder(resourcePackInfo.getUrl()).build().equals(resourcePackInfo)}
|
||||||
* is true, because the {@link ResourcePackInfo#getOrigin()} and
|
* is true, because the {@link ResourcePackInfo#origin()} and
|
||||||
* {@link ResourcePackInfo#getOriginalOrigin()} fields are transient.
|
* {@link ResourcePackInfo#originalOrigin()} fields are transient.
|
||||||
*
|
*
|
||||||
* @param newUrl The new URL to use in the updated builder.
|
* @param newUrl The new URL to use in the updated builder.
|
||||||
*
|
*
|
||||||
@ -114,7 +113,7 @@ public interface ResourcePackInfo {
|
|||||||
*
|
*
|
||||||
* @param shouldForce whether or not to force the client to accept the resource pack
|
* @param shouldForce whether or not to force the client to accept the resource pack
|
||||||
*/
|
*/
|
||||||
Builder setShouldForce(boolean shouldForce);
|
Builder required(boolean shouldForce);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the SHA-1 hash of the provided resource pack.
|
* Sets the SHA-1 hash of the provided resource pack.
|
||||||
@ -126,7 +125,7 @@ public interface ResourcePackInfo {
|
|||||||
*
|
*
|
||||||
* @param hash the SHA-1 hash of the resource-pack
|
* @param hash the SHA-1 hash of the resource-pack
|
||||||
*/
|
*/
|
||||||
Builder setHash(@Nullable byte[] hash);
|
Builder hash(@Nullable byte[] hash);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets a {@link Component} to display on the download prompt.
|
* Sets a {@link Component} to display on the download prompt.
|
||||||
@ -134,7 +133,7 @@ public interface ResourcePackInfo {
|
|||||||
*
|
*
|
||||||
* @param prompt the component to display
|
* @param prompt the component to display
|
||||||
*/
|
*/
|
||||||
Builder setPrompt(@Nullable Component prompt);
|
Builder prompt(@Nullable Component prompt);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Builds the {@link ResourcePackInfo} from the provided info for use with
|
* Builds the {@link ResourcePackInfo} from the provided info for use with
|
||||||
|
@ -97,7 +97,7 @@ public interface TabList {
|
|||||||
*
|
*
|
||||||
* @return immutable {@link Collection} of tab list entries
|
* @return immutable {@link Collection} of tab list entries
|
||||||
*/
|
*/
|
||||||
Collection<TabListEntry> getEntries();
|
Collection<TabListEntry> entries();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clears all entries from the tab list.
|
* Clears all entries from the tab list.
|
||||||
|
@ -26,12 +26,12 @@ public interface TabListEntry extends KeyIdentifiable {
|
|||||||
@Nullable ChatSession getChatSession();
|
@Nullable ChatSession getChatSession();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
default IdentifiedKey getIdentifiedKey() {
|
default IdentifiedKey identifiedKey() {
|
||||||
ChatSession session = getChatSession();
|
ChatSession session = getChatSession();
|
||||||
if (session == null) {
|
if (session == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return getChatSession().getIdentifiedKey();
|
return getChatSession().identifiedKey();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -53,7 +53,7 @@ public interface TabListEntry extends KeyIdentifiable {
|
|||||||
/**
|
/**
|
||||||
* Returns {@link Optional} text {@link net.kyori.adventure.text.Component}, which if present is
|
* Returns {@link Optional} text {@link net.kyori.adventure.text.Component}, which if present is
|
||||||
* the text displayed for {@code this} entry in the {@link TabList}, otherwise
|
* the text displayed for {@code this} entry in the {@link TabList}, otherwise
|
||||||
* {@link GameProfile#getName()} is shown.
|
* {@link GameProfile#name()} is shown.
|
||||||
*
|
*
|
||||||
* @return {@link Optional} text {@link net.kyori.adventure.text.Component} of name displayed in
|
* @return {@link Optional} text {@link net.kyori.adventure.text.Component} of name displayed in
|
||||||
* the tab list
|
* the tab list
|
||||||
@ -62,7 +62,7 @@ public interface TabListEntry extends KeyIdentifiable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the text {@link Component} to be displayed for {@code this} {@link TabListEntry}. If
|
* Sets the text {@link Component} to be displayed for {@code this} {@link TabListEntry}. If
|
||||||
* {@code null}, {@link GameProfile#getName()} will be shown.
|
* {@code null}, {@link GameProfile#name()} will be shown.
|
||||||
*
|
*
|
||||||
* @param displayName to show in the {@link TabList} for {@code this} entry
|
* @param displayName to show in the {@link TabList} for {@code this} entry
|
||||||
* @return {@code this}, for chaining
|
* @return {@code this}, for chaining
|
||||||
|
@ -41,7 +41,7 @@ public final class PingOptions {
|
|||||||
*
|
*
|
||||||
* @return the emulated Minecraft version
|
* @return the emulated Minecraft version
|
||||||
*/
|
*/
|
||||||
public ProtocolVersion getProtocolVersion() {
|
public ProtocolVersion protocolVersion() {
|
||||||
return this.protocolVersion;
|
return this.protocolVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ public final class PingOptions {
|
|||||||
*
|
*
|
||||||
* @return the server ping timeout in milliseconds
|
* @return the server ping timeout in milliseconds
|
||||||
*/
|
*/
|
||||||
public long getTimeout() {
|
public long timeout() {
|
||||||
return this.timeout;
|
return this.timeout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ public final class QueryResponse {
|
|||||||
*
|
*
|
||||||
* @return hostname
|
* @return hostname
|
||||||
*/
|
*/
|
||||||
public String getHostname() {
|
public String hostname() {
|
||||||
return hostname;
|
return hostname;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,7 +70,7 @@ public final class QueryResponse {
|
|||||||
*
|
*
|
||||||
* @return game version
|
* @return game version
|
||||||
*/
|
*/
|
||||||
public String getGameVersion() {
|
public String gameVersion() {
|
||||||
return gameVersion;
|
return gameVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,7 +80,7 @@ public final class QueryResponse {
|
|||||||
*
|
*
|
||||||
* @return map name
|
* @return map name
|
||||||
*/
|
*/
|
||||||
public String getMap() {
|
public String map() {
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,7 +89,7 @@ public final class QueryResponse {
|
|||||||
*
|
*
|
||||||
* @return online player count
|
* @return online player count
|
||||||
*/
|
*/
|
||||||
public int getCurrentPlayers() {
|
public int currentPlayers() {
|
||||||
return currentPlayers;
|
return currentPlayers;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,7 +98,7 @@ public final class QueryResponse {
|
|||||||
*
|
*
|
||||||
* @return max player count
|
* @return max player count
|
||||||
*/
|
*/
|
||||||
public int getMaxPlayers() {
|
public int maxPlayers() {
|
||||||
return maxPlayers;
|
return maxPlayers;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,7 +107,7 @@ public final class QueryResponse {
|
|||||||
*
|
*
|
||||||
* @return proxy hostname
|
* @return proxy hostname
|
||||||
*/
|
*/
|
||||||
public String getProxyHost() {
|
public String proxyHost() {
|
||||||
return proxyHost;
|
return proxyHost;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,7 +116,7 @@ public final class QueryResponse {
|
|||||||
*
|
*
|
||||||
* @return proxy port
|
* @return proxy port
|
||||||
*/
|
*/
|
||||||
public int getProxyPort() {
|
public int proxyPort() {
|
||||||
return proxyPort;
|
return proxyPort;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,7 +125,7 @@ public final class QueryResponse {
|
|||||||
*
|
*
|
||||||
* @return collection of players
|
* @return collection of players
|
||||||
*/
|
*/
|
||||||
public Collection<String> getPlayers() {
|
public Collection<String> players() {
|
||||||
return players;
|
return players;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,7 +134,7 @@ public final class QueryResponse {
|
|||||||
*
|
*
|
||||||
* @return server software
|
* @return server software
|
||||||
*/
|
*/
|
||||||
public String getProxyVersion() {
|
public String proxyVersion() {
|
||||||
return proxyVersion;
|
return proxyVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,7 +143,7 @@ public final class QueryResponse {
|
|||||||
*
|
*
|
||||||
* @return collection of plugins
|
* @return collection of plugins
|
||||||
*/
|
*/
|
||||||
public Collection<PluginInformation> getPlugins() {
|
public Collection<PluginInformation> plugins() {
|
||||||
return plugins;
|
return plugins;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -158,16 +158,16 @@ public final class QueryResponse {
|
|||||||
*/
|
*/
|
||||||
public Builder toBuilder() {
|
public Builder toBuilder() {
|
||||||
return QueryResponse.builder()
|
return QueryResponse.builder()
|
||||||
.hostname(getHostname())
|
.hostname(hostname())
|
||||||
.gameVersion(getGameVersion())
|
.gameVersion(gameVersion())
|
||||||
.map(getMap())
|
.map(map())
|
||||||
.currentPlayers(getCurrentPlayers())
|
.currentPlayers(currentPlayers())
|
||||||
.maxPlayers(getMaxPlayers())
|
.maxPlayers(maxPlayers())
|
||||||
.proxyHost(getProxyHost())
|
.proxyHost(proxyHost())
|
||||||
.proxyPort(getProxyPort())
|
.proxyPort(proxyPort())
|
||||||
.players(getPlayers())
|
.players(players())
|
||||||
.proxyVersion(getProxyVersion())
|
.proxyVersion(proxyVersion())
|
||||||
.plugins(getPlugins());
|
.plugins(plugins());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -347,7 +347,7 @@ public final class QueryResponse {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes all players from the builder. This does not affect {@link #getCurrentPlayers()}.
|
* Removes all players from the builder. This does not affect {@link #currentPlayers()}.
|
||||||
*
|
*
|
||||||
* @return this builder, for chaining
|
* @return this builder, for chaining
|
||||||
*/
|
*/
|
||||||
|
@ -25,14 +25,14 @@ public interface RegisteredServer extends ChannelMessageSink, Audience {
|
|||||||
*
|
*
|
||||||
* @return the server info
|
* @return the server info
|
||||||
*/
|
*/
|
||||||
ServerInfo getServerInfo();
|
ServerInfo serverInfo();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a list of all the players currently connected to this server on this proxy.
|
* Returns a list of all the players currently connected to this server on this proxy.
|
||||||
*
|
*
|
||||||
* @return the players on this proxy
|
* @return the players on this proxy
|
||||||
*/
|
*/
|
||||||
Collection<Player> getPlayersConnected();
|
Collection<Player> players();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Attempts to ping the remote server and return the server list ping result.
|
* Attempts to ping the remote server and return the server list ping result.
|
||||||
|
@ -32,11 +32,11 @@ public final class ServerInfo implements Comparable<ServerInfo> {
|
|||||||
this.address = Preconditions.checkNotNull(address, "address");
|
this.address = Preconditions.checkNotNull(address, "address");
|
||||||
}
|
}
|
||||||
|
|
||||||
public final String getName() {
|
public String name() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final SocketAddress getAddress() {
|
public SocketAddress address() {
|
||||||
return address;
|
return address;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,6 +68,6 @@ public final class ServerInfo implements Comparable<ServerInfo> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int compareTo(ServerInfo o) {
|
public int compareTo(ServerInfo o) {
|
||||||
return this.name.compareTo(o.getName());
|
return this.name.compareTo(o.name());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@ import java.util.List;
|
|||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -27,12 +28,12 @@ public final class ServerPing {
|
|||||||
|
|
||||||
private final Version version;
|
private final Version version;
|
||||||
private final @Nullable Players players;
|
private final @Nullable Players players;
|
||||||
private final net.kyori.adventure.text.Component description;
|
private final Component description;
|
||||||
private final @Nullable Favicon favicon;
|
private final @Nullable Favicon favicon;
|
||||||
private final @Nullable ModInfo modinfo;
|
private final @Nullable ModInfo modinfo;
|
||||||
|
|
||||||
public ServerPing(Version version, @Nullable Players players,
|
public ServerPing(Version version, @Nullable Players players,
|
||||||
net.kyori.adventure.text.Component description, @Nullable Favicon favicon) {
|
Component description, @Nullable Favicon favicon) {
|
||||||
this(version, players, description, favicon, ModInfo.DEFAULT);
|
this(version, players, description, favicon, ModInfo.DEFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,7 +47,7 @@ public final class ServerPing {
|
|||||||
* @param modinfo the mods this server runs
|
* @param modinfo the mods this server runs
|
||||||
*/
|
*/
|
||||||
public ServerPing(Version version, @Nullable Players players,
|
public ServerPing(Version version, @Nullable Players players,
|
||||||
net.kyori.adventure.text.Component description, @Nullable Favicon favicon,
|
Component description, @Nullable Favicon favicon,
|
||||||
@Nullable ModInfo modinfo) {
|
@Nullable ModInfo modinfo) {
|
||||||
this.version = Preconditions.checkNotNull(version, "version");
|
this.version = Preconditions.checkNotNull(version, "version");
|
||||||
this.players = players;
|
this.players = players;
|
||||||
@ -55,23 +56,23 @@ public final class ServerPing {
|
|||||||
this.modinfo = modinfo;
|
this.modinfo = modinfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Version getVersion() {
|
public Version version() {
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<Players> getPlayers() {
|
public Optional<Players> players() {
|
||||||
return Optional.ofNullable(players);
|
return Optional.ofNullable(players);
|
||||||
}
|
}
|
||||||
|
|
||||||
public net.kyori.adventure.text.Component getDescriptionComponent() {
|
public Component description() {
|
||||||
return description;
|
return description;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<Favicon> getFavicon() {
|
public Optional<Favicon> favicon() {
|
||||||
return Optional.ofNullable(favicon);
|
return Optional.ofNullable(favicon);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<ModInfo> getModinfo() {
|
public Optional<ModInfo> modInfo() {
|
||||||
return Optional.ofNullable(modinfo);
|
return Optional.ofNullable(modinfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,8 +130,8 @@ public final class ServerPing {
|
|||||||
builder.favicon = favicon;
|
builder.favicon = favicon;
|
||||||
builder.nullOutModinfo = modinfo == null;
|
builder.nullOutModinfo = modinfo == null;
|
||||||
if (modinfo != null) {
|
if (modinfo != null) {
|
||||||
builder.modType = modinfo.getType();
|
builder.modType = modinfo.type();
|
||||||
builder.mods.addAll(modinfo.getMods());
|
builder.mods.addAll(modinfo.mods());
|
||||||
}
|
}
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
@ -150,7 +151,7 @@ public final class ServerPing {
|
|||||||
private final List<SamplePlayer> samplePlayers = new ArrayList<>();
|
private final List<SamplePlayer> samplePlayers = new ArrayList<>();
|
||||||
private String modType = "FML";
|
private String modType = "FML";
|
||||||
private final List<ModInfo.Mod> mods = new ArrayList<>();
|
private final List<ModInfo.Mod> mods = new ArrayList<>();
|
||||||
private net.kyori.adventure.text.Component description;
|
private Component description;
|
||||||
private @Nullable Favicon favicon;
|
private @Nullable Favicon favicon;
|
||||||
private boolean nullOutPlayers;
|
private boolean nullOutPlayers;
|
||||||
private boolean nullOutModinfo;
|
private boolean nullOutModinfo;
|
||||||
@ -197,9 +198,9 @@ public final class ServerPing {
|
|||||||
*/
|
*/
|
||||||
public Builder mods(ModInfo mods) {
|
public Builder mods(ModInfo mods) {
|
||||||
Preconditions.checkNotNull(mods, "mods");
|
Preconditions.checkNotNull(mods, "mods");
|
||||||
this.modType = mods.getType();
|
this.modType = mods.type();
|
||||||
this.mods.clear();
|
this.mods.clear();
|
||||||
this.mods.addAll(mods.getMods());
|
this.mods.addAll(mods.mods());
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -223,7 +224,7 @@ public final class ServerPing {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Builder description(net.kyori.adventure.text.Component description) {
|
public Builder description(Component description) {
|
||||||
this.description = Preconditions.checkNotNull(description, "description");
|
this.description = Preconditions.checkNotNull(description, "description");
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
@ -272,7 +273,7 @@ public final class ServerPing {
|
|||||||
return samplePlayers;
|
return samplePlayers;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<net.kyori.adventure.text.Component> getDescriptionComponent() {
|
public Optional<Component> getDescriptionComponent() {
|
||||||
return Optional.ofNullable(description);
|
return Optional.ofNullable(description);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,11 +39,11 @@ public final class Favicon {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the Base64-encoded URI for this image.
|
* Returns the Base64-encoded URL for this image.
|
||||||
*
|
*
|
||||||
* @return a URL representing this favicon
|
* @return a URL representing this favicon
|
||||||
*/
|
*/
|
||||||
public String getBase64Url() {
|
public String url() {
|
||||||
return base64Url;
|
return base64Url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ public final class GameProfile {
|
|||||||
*
|
*
|
||||||
* @return the undashed UUID
|
* @return the undashed UUID
|
||||||
*/
|
*/
|
||||||
public String getUndashedId() {
|
public String undashedId() {
|
||||||
return undashedId;
|
return undashedId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -67,7 +67,7 @@ public final class GameProfile {
|
|||||||
*
|
*
|
||||||
* @return the UUID
|
* @return the UUID
|
||||||
*/
|
*/
|
||||||
public UUID getId() {
|
public UUID uuid() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ public final class GameProfile {
|
|||||||
*
|
*
|
||||||
* @return the username
|
* @return the username
|
||||||
*/
|
*/
|
||||||
public String getName() {
|
public String name() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,7 +85,7 @@ public final class GameProfile {
|
|||||||
*
|
*
|
||||||
* @return the properties associated with this profile
|
* @return the properties associated with this profile
|
||||||
*/
|
*/
|
||||||
public List<Property> getProperties() {
|
public List<Property> properties() {
|
||||||
return properties;
|
return properties;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -200,15 +200,15 @@ public final class GameProfile {
|
|||||||
this.signature = Preconditions.checkNotNull(signature, "signature");
|
this.signature = Preconditions.checkNotNull(signature, "signature");
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getName() {
|
public String name() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getValue() {
|
public String value() {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getSignature() {
|
public String signature() {
|
||||||
return signature;
|
return signature;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,11 +34,11 @@ public final class ModInfo {
|
|||||||
this.modList = ImmutableList.copyOf(modList);
|
this.modList = ImmutableList.copyOf(modList);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getType() {
|
public String type() {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Mod> getMods() {
|
public List<Mod> mods() {
|
||||||
return modList;
|
return modList;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,11 +81,11 @@ public final class ModInfo {
|
|||||||
this.version = Preconditions.checkNotNull(version, "version");
|
this.version = Preconditions.checkNotNull(version, "version");
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getId() {
|
public String id() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getVersion() {
|
public String version() {
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,15 +33,15 @@ public final class ProxyVersion {
|
|||||||
this.version = Preconditions.checkNotNull(version, "version");
|
this.version = Preconditions.checkNotNull(version, "version");
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getName() {
|
public String name() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getVendor() {
|
public String vendor() {
|
||||||
return vendor;
|
return vendor;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getVersion() {
|
public String version() {
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,7 +116,7 @@ public class Metrics {
|
|||||||
() -> server.getConfiguration().isOnlineMode() ? "online" : "offline")
|
() -> server.getConfiguration().isOnlineMode() ? "online" : "offline")
|
||||||
);
|
);
|
||||||
metrics.addCustomChart(new SimplePie("velocity_version",
|
metrics.addCustomChart(new SimplePie("velocity_version",
|
||||||
() -> server.getVersion().getVersion()));
|
() -> server.getVersion().version()));
|
||||||
|
|
||||||
metrics.addCustomChart(new DrilldownPie("java_version", () -> {
|
metrics.addCustomChart(new DrilldownPie("java_version", () -> {
|
||||||
Map<String, Map<String, Integer>> map = new HashMap<>();
|
Map<String, Map<String, Integer>> map = new HashMap<>();
|
||||||
|
@ -200,7 +200,7 @@ public class VelocityServer implements ProxyServer, ForwardingAudience {
|
|||||||
@EnsuresNonNull({"serverKeyPair", "servers", "pluginManager", "eventManager", "scheduler",
|
@EnsuresNonNull({"serverKeyPair", "servers", "pluginManager", "eventManager", "scheduler",
|
||||||
"console", "cm", "configuration"})
|
"console", "cm", "configuration"})
|
||||||
void start() {
|
void start() {
|
||||||
logger.info("Booting up {} {}...", getVersion().getName(), getVersion().getVersion());
|
logger.info("Booting up {} {}...", getVersion().name(), getVersion().version());
|
||||||
console.setupStreams();
|
console.setupStreams();
|
||||||
|
|
||||||
registerTranslations();
|
registerTranslations();
|
||||||
@ -350,19 +350,19 @@ public class VelocityServer implements ProxyServer, ForwardingAudience {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Register the plugin main classes so that we can fire the proxy initialize event
|
// Register the plugin main classes so that we can fire the proxy initialize event
|
||||||
for (PluginContainer plugin : pluginManager.getPlugins()) {
|
for (PluginContainer plugin : pluginManager.plugins()) {
|
||||||
Optional<?> instance = plugin.getInstance();
|
Optional<?> instance = plugin.instance();
|
||||||
if (instance.isPresent()) {
|
if (instance.isPresent()) {
|
||||||
try {
|
try {
|
||||||
eventManager.registerInternally(plugin, instance.get());
|
eventManager.registerInternally(plugin, instance.get());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("Unable to register plugin listener for {}",
|
logger.error("Unable to register plugin listener for {}",
|
||||||
plugin.getDescription().getName().orElse(plugin.getDescription().getId()), e);
|
plugin.description().name().orElse(plugin.description().id()), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.info("Loaded {} plugins", pluginManager.getPlugins().size());
|
logger.info("Loaded {} plugins", pluginManager.plugins().size());
|
||||||
}
|
}
|
||||||
|
|
||||||
public Bootstrap createBootstrap(@Nullable EventLoopGroup group, SocketAddress target) {
|
public Bootstrap createBootstrap(@Nullable EventLoopGroup group, SocketAddress target) {
|
||||||
@ -404,15 +404,15 @@ public class VelocityServer implements ProxyServer, ForwardingAudience {
|
|||||||
Optional<RegisteredServer> rs = servers.getServer(entry.getKey());
|
Optional<RegisteredServer> rs = servers.getServer(entry.getKey());
|
||||||
if (!rs.isPresent()) {
|
if (!rs.isPresent()) {
|
||||||
servers.register(newInfo);
|
servers.register(newInfo);
|
||||||
} else if (!rs.get().getServerInfo().equals(newInfo)) {
|
} else if (!rs.get().serverInfo().equals(newInfo)) {
|
||||||
for (Player player : rs.get().getPlayersConnected()) {
|
for (Player player : rs.get().players()) {
|
||||||
if (!(player instanceof ConnectedPlayer)) {
|
if (!(player instanceof ConnectedPlayer)) {
|
||||||
throw new IllegalStateException("ConnectedPlayer not found for player " + player
|
throw new IllegalStateException("ConnectedPlayer not found for player " + player
|
||||||
+ " in server " + rs.get().getServerInfo().getName());
|
+ " in server " + rs.get().serverInfo().name());
|
||||||
}
|
}
|
||||||
evacuate.add((ConnectedPlayer) player);
|
evacuate.add((ConnectedPlayer) player);
|
||||||
}
|
}
|
||||||
servers.unregister(rs.get().getServerInfo());
|
servers.unregister(rs.get().serverInfo());
|
||||||
servers.register(newInfo);
|
servers.register(newInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -591,9 +591,9 @@ public class VelocityServer implements ProxyServer, ForwardingAudience {
|
|||||||
if (configuration.isOnlineMode() && configuration.isOnlineModeKickExistingPlayers()) {
|
if (configuration.isOnlineMode() && configuration.isOnlineModeKickExistingPlayers()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
String lowerName = connection.getUsername().toLowerCase(Locale.US);
|
String lowerName = connection.username().toLowerCase(Locale.US);
|
||||||
return !(connectionsByName.containsKey(lowerName)
|
return !(connectionsByName.containsKey(lowerName)
|
||||||
|| connectionsByUuid.containsKey(connection.getUniqueId()));
|
|| connectionsByUuid.containsKey(connection.uuid()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -603,25 +603,25 @@ public class VelocityServer implements ProxyServer, ForwardingAudience {
|
|||||||
* @return {@code true} if we registered the connection, {@code false} if not
|
* @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.username().toLowerCase(Locale.US);
|
||||||
|
|
||||||
if (!this.configuration.isOnlineModeKickExistingPlayers()) {
|
if (!this.configuration.isOnlineModeKickExistingPlayers()) {
|
||||||
if (connectionsByName.putIfAbsent(lowerName, connection) != null) {
|
if (connectionsByName.putIfAbsent(lowerName, connection) != null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (connectionsByUuid.putIfAbsent(connection.getUniqueId(), connection) != null) {
|
if (connectionsByUuid.putIfAbsent(connection.uuid(), connection) != null) {
|
||||||
connectionsByName.remove(lowerName, connection);
|
connectionsByName.remove(lowerName, connection);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ConnectedPlayer existing = connectionsByUuid.get(connection.getUniqueId());
|
ConnectedPlayer existing = connectionsByUuid.get(connection.uuid());
|
||||||
if (existing != null) {
|
if (existing != null) {
|
||||||
existing.disconnect(Component.translatable("multiplayer.disconnect.duplicate_login"));
|
existing.disconnect(Component.translatable("multiplayer.disconnect.duplicate_login"));
|
||||||
}
|
}
|
||||||
|
|
||||||
// We can now replace the entries as needed.
|
// We can now replace the entries as needed.
|
||||||
connectionsByName.put(lowerName, connection);
|
connectionsByName.put(lowerName, connection);
|
||||||
connectionsByUuid.put(connection.getUniqueId(), connection);
|
connectionsByUuid.put(connection.uuid(), connection);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -632,8 +632,8 @@ public class VelocityServer implements ProxyServer, ForwardingAudience {
|
|||||||
* @param connection the connection to unregister
|
* @param connection the connection to unregister
|
||||||
*/
|
*/
|
||||||
public void unregisterConnection(ConnectedPlayer connection) {
|
public void unregisterConnection(ConnectedPlayer connection) {
|
||||||
connectionsByName.remove(connection.getUsername().toLowerCase(Locale.US), connection);
|
connectionsByName.remove(connection.username().toLowerCase(Locale.US), connection);
|
||||||
connectionsByUuid.remove(connection.getUniqueId(), connection);
|
connectionsByUuid.remove(connection.uuid(), connection);
|
||||||
bossBarManager.onDisconnect(connection);
|
bossBarManager.onDisconnect(connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -653,7 +653,7 @@ public class VelocityServer implements ProxyServer, ForwardingAudience {
|
|||||||
public Collection<Player> matchPlayer(String partialName) {
|
public Collection<Player> matchPlayer(String partialName) {
|
||||||
Objects.requireNonNull(partialName);
|
Objects.requireNonNull(partialName);
|
||||||
|
|
||||||
return getAllPlayers().stream().filter(p -> p.getUsername()
|
return getAllPlayers().stream().filter(p -> p.username()
|
||||||
.regionMatches(true, 0, partialName, 0, partialName.length()))
|
.regionMatches(true, 0, partialName, 0, partialName.length()))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
@ -662,7 +662,7 @@ public class VelocityServer implements ProxyServer, ForwardingAudience {
|
|||||||
public Collection<RegisteredServer> matchServer(String partialName) {
|
public Collection<RegisteredServer> matchServer(String partialName) {
|
||||||
Objects.requireNonNull(partialName);
|
Objects.requireNonNull(partialName);
|
||||||
|
|
||||||
return getAllServers().stream().filter(s -> s.getServerInfo().getName()
|
return getAllServers().stream().filter(s -> s.serverInfo().name()
|
||||||
.regionMatches(true, 0, partialName, 0, partialName.length()))
|
.regionMatches(true, 0, partialName, 0, partialName.length()))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
@ -97,21 +97,21 @@ public class VelocityCommandManager implements CommandManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandMeta.Builder metaBuilder(final String alias) {
|
public CommandMeta.Builder buildMeta(final String alias) {
|
||||||
Preconditions.checkNotNull(alias, "alias");
|
Preconditions.checkNotNull(alias, "alias");
|
||||||
return new VelocityCommandMeta.Builder(alias);
|
return new VelocityCommandMeta.Builder(alias);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandMeta.Builder metaBuilder(final BrigadierCommand command) {
|
public CommandMeta.Builder buildMeta(final BrigadierCommand command) {
|
||||||
Preconditions.checkNotNull(command, "command");
|
Preconditions.checkNotNull(command, "command");
|
||||||
return new VelocityCommandMeta.Builder(command.getNode().getName());
|
return new VelocityCommandMeta.Builder(command.node().getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void register(final BrigadierCommand command) {
|
public void register(final BrigadierCommand command) {
|
||||||
Preconditions.checkNotNull(command, "command");
|
Preconditions.checkNotNull(command, "command");
|
||||||
register(metaBuilder(command).build(), command);
|
register(buildMeta(command).build(), command);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -151,7 +151,7 @@ public class VelocityCommandManager implements CommandManager {
|
|||||||
final Command command, final CommandMeta meta) {
|
final Command command, final CommandMeta meta) {
|
||||||
final Class<T> superInterface = registrar.registrableSuperInterface();
|
final Class<T> superInterface = registrar.registrableSuperInterface();
|
||||||
registrar.register(meta, superInterface.cast(command));
|
registrar.register(meta, superInterface.cast(command));
|
||||||
for (String alias : meta.getAliases()) {
|
for (String alias : meta.aliases()) {
|
||||||
commandMetas.put(alias, meta);
|
commandMetas.put(alias, meta);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -188,7 +188,7 @@ public class VelocityCommandManager implements CommandManager {
|
|||||||
try {
|
try {
|
||||||
// The literals of secondary aliases will preserve the children of
|
// The literals of secondary aliases will preserve the children of
|
||||||
// the removed literal in the graph.
|
// the removed literal in the graph.
|
||||||
for (String alias : meta.getAliases()) {
|
for (String alias : meta.aliases()) {
|
||||||
final String lowercased = alias.toLowerCase(Locale.ENGLISH);
|
final String lowercased = alias.toLowerCase(Locale.ENGLISH);
|
||||||
if (commandMetas.remove(lowercased, meta)) {
|
if (commandMetas.remove(lowercased, meta)) {
|
||||||
dispatcher.getRoot().removeChildByName(lowercased);
|
dispatcher.getRoot().removeChildByName(lowercased);
|
||||||
@ -200,7 +200,7 @@ public class VelocityCommandManager implements CommandManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable CommandMeta getCommandMeta(String alias) {
|
public @Nullable CommandMeta commandMeta(String alias) {
|
||||||
Preconditions.checkNotNull(alias, "alias");
|
Preconditions.checkNotNull(alias, "alias");
|
||||||
return commandMetas.get(alias);
|
return commandMetas.get(alias);
|
||||||
}
|
}
|
||||||
@ -250,8 +250,8 @@ public class VelocityCommandManager implements CommandManager {
|
|||||||
Preconditions.checkNotNull(cmdLine, "cmdLine");
|
Preconditions.checkNotNull(cmdLine, "cmdLine");
|
||||||
|
|
||||||
return callCommandEvent(source, cmdLine).thenApplyAsync(event -> {
|
return callCommandEvent(source, cmdLine).thenApplyAsync(event -> {
|
||||||
CommandResult commandResult = event.getResult();
|
CommandResult commandResult = event.result();
|
||||||
if (commandResult.isForwardToServer() || !commandResult.isAllowed()) {
|
if (commandResult.isForwardToServer() || !commandResult.allowed()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return executeImmediately0(source, commandResult.getCommand().orElse(event.getCommand()));
|
return executeImmediately0(source, commandResult.getCommand().orElse(event.getCommand()));
|
||||||
@ -321,7 +321,7 @@ public class VelocityCommandManager implements CommandManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<String> getAliases() {
|
public Collection<String> aliases() {
|
||||||
lock.readLock().lock();
|
lock.readLock().lock();
|
||||||
try {
|
try {
|
||||||
// A RootCommandNode may only contain LiteralCommandNode children instances
|
// A RootCommandNode may only contain LiteralCommandNode children instances
|
||||||
|
@ -120,7 +120,7 @@ public final class VelocityCommandMeta implements CommandMeta {
|
|||||||
*/
|
*/
|
||||||
// This is a static method because most methods take a CommandMeta.
|
// This is a static method because most methods take a CommandMeta.
|
||||||
public static Stream<CommandNode<CommandSource>> copyHints(final CommandMeta meta) {
|
public static Stream<CommandNode<CommandSource>> copyHints(final CommandMeta meta) {
|
||||||
return meta.getHints().stream().map(VelocityCommandMeta::copyForHinting);
|
return meta.hints().stream().map(VelocityCommandMeta::copyForHinting);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final Set<String> aliases;
|
private final Set<String> aliases;
|
||||||
@ -138,17 +138,17 @@ public final class VelocityCommandMeta implements CommandMeta {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<String> getAliases() {
|
public Collection<String> aliases() {
|
||||||
return this.aliases;
|
return this.aliases;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<CommandNode<CommandSource>> getHints() {
|
public Collection<CommandNode<CommandSource>> hints() {
|
||||||
return this.hints;
|
return this.hints;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable Object getPlugin() {
|
public @Nullable Object plugin() {
|
||||||
return plugin;
|
return plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ class BuiltinCommandUtil {
|
|||||||
|
|
||||||
static List<RegisteredServer> sortedServerList(ProxyServer proxy) {
|
static List<RegisteredServer> sortedServerList(ProxyServer proxy) {
|
||||||
List<RegisteredServer> servers = new ArrayList<>(proxy.getAllServers());
|
List<RegisteredServer> servers = new ArrayList<>(proxy.getAllServers());
|
||||||
servers.sort(Comparator.comparing(RegisteredServer::getServerInfo));
|
servers.sort(Comparator.comparing(RegisteredServer::serverInfo));
|
||||||
return Collections.unmodifiableList(servers);
|
return Collections.unmodifiableList(servers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -67,7 +67,7 @@ public class GlistCommand {
|
|||||||
.<CommandSource, String>argument(SERVER_ARG, StringArgumentType.string())
|
.<CommandSource, String>argument(SERVER_ARG, StringArgumentType.string())
|
||||||
.suggests((context, builder) -> {
|
.suggests((context, builder) -> {
|
||||||
for (RegisteredServer server : server.getAllServers()) {
|
for (RegisteredServer server : server.getAllServers()) {
|
||||||
builder.suggest(server.getServerInfo().getName());
|
builder.suggest(server.serverInfo().name());
|
||||||
}
|
}
|
||||||
builder.suggest("all");
|
builder.suggest("all");
|
||||||
return builder.buildFuture();
|
return builder.buildFuture();
|
||||||
@ -116,13 +116,13 @@ public class GlistCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void sendServerPlayers(CommandSource target, RegisteredServer server, boolean fromAll) {
|
private void sendServerPlayers(CommandSource target, RegisteredServer server, boolean fromAll) {
|
||||||
List<Player> onServer = ImmutableList.copyOf(server.getPlayersConnected());
|
List<Player> onServer = ImmutableList.copyOf(server.players());
|
||||||
if (onServer.isEmpty() && fromAll) {
|
if (onServer.isEmpty() && fromAll) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
TextComponent.Builder builder = Component.text()
|
TextComponent.Builder builder = Component.text()
|
||||||
.append(Component.text("[" + server.getServerInfo().getName() + "] ",
|
.append(Component.text("[" + server.serverInfo().name() + "] ",
|
||||||
NamedTextColor.DARK_AQUA))
|
NamedTextColor.DARK_AQUA))
|
||||||
.append(Component.text("(" + onServer.size() + ")", NamedTextColor.GRAY))
|
.append(Component.text("(" + onServer.size() + ")", NamedTextColor.GRAY))
|
||||||
.append(Component.text(": "))
|
.append(Component.text(": "))
|
||||||
@ -130,7 +130,7 @@ public class GlistCommand {
|
|||||||
|
|
||||||
for (int i = 0; i < onServer.size(); i++) {
|
for (int i = 0; i < onServer.size(); i++) {
|
||||||
Player player = onServer.get(i);
|
Player player = onServer.get(i);
|
||||||
builder.append(Component.text(player.getUsername()));
|
builder.append(Component.text(player.username()));
|
||||||
|
|
||||||
if (i + 1 < onServer.size()) {
|
if (i + 1 < onServer.size()) {
|
||||||
builder.append(Component.text(", "));
|
builder.append(Component.text(", "));
|
||||||
|
@ -77,8 +77,8 @@ public class ServerCommand implements SimpleCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void outputServerInformation(Player executor) {
|
private void outputServerInformation(Player executor) {
|
||||||
String currentServer = executor.getCurrentServer().map(ServerConnection::getServerInfo)
|
String currentServer = executor.connectedServer().map(ServerConnection::serverInfo)
|
||||||
.map(ServerInfo::getName).orElse("<unknown>");
|
.map(ServerInfo::name).orElse("<unknown>");
|
||||||
executor.sendMessage(Component.translatable(
|
executor.sendMessage(Component.translatable(
|
||||||
"velocity.command.server-current-server",
|
"velocity.command.server-current-server",
|
||||||
NamedTextColor.YELLOW,
|
NamedTextColor.YELLOW,
|
||||||
@ -108,10 +108,10 @@ public class ServerCommand implements SimpleCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private TextComponent formatServerComponent(String currentPlayerServer, RegisteredServer server) {
|
private TextComponent formatServerComponent(String currentPlayerServer, RegisteredServer server) {
|
||||||
ServerInfo serverInfo = server.getServerInfo();
|
ServerInfo serverInfo = server.serverInfo();
|
||||||
TextComponent serverTextComponent = Component.text(serverInfo.getName());
|
TextComponent serverTextComponent = Component.text(serverInfo.name());
|
||||||
|
|
||||||
int connectedPlayers = server.getPlayersConnected().size();
|
int connectedPlayers = server.players().size();
|
||||||
TranslatableComponent playersTextComponent;
|
TranslatableComponent playersTextComponent;
|
||||||
if (connectedPlayers == 1) {
|
if (connectedPlayers == 1) {
|
||||||
playersTextComponent = Component.translatable(
|
playersTextComponent = Component.translatable(
|
||||||
@ -121,7 +121,7 @@ public class ServerCommand implements SimpleCommand {
|
|||||||
"velocity.command.server-tooltip-players-online");
|
"velocity.command.server-tooltip-players-online");
|
||||||
}
|
}
|
||||||
playersTextComponent = playersTextComponent.args(Component.text(connectedPlayers));
|
playersTextComponent = playersTextComponent.args(Component.text(connectedPlayers));
|
||||||
if (serverInfo.getName().equals(currentPlayerServer)) {
|
if (serverInfo.name().equals(currentPlayerServer)) {
|
||||||
serverTextComponent = serverTextComponent.color(NamedTextColor.GREEN)
|
serverTextComponent = serverTextComponent.color(NamedTextColor.GREEN)
|
||||||
.hoverEvent(
|
.hoverEvent(
|
||||||
showText(
|
showText(
|
||||||
@ -131,7 +131,7 @@ public class ServerCommand implements SimpleCommand {
|
|||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
serverTextComponent = serverTextComponent.color(NamedTextColor.GRAY)
|
serverTextComponent = serverTextComponent.color(NamedTextColor.GRAY)
|
||||||
.clickEvent(ClickEvent.runCommand("/server " + serverInfo.getName()))
|
.clickEvent(ClickEvent.runCommand("/server " + serverInfo.name()))
|
||||||
.hoverEvent(
|
.hoverEvent(
|
||||||
showText(
|
showText(
|
||||||
Component.translatable("velocity.command.server-tooltip-offer-connect-server")
|
Component.translatable("velocity.command.server-tooltip-offer-connect-server")
|
||||||
@ -146,7 +146,7 @@ public class ServerCommand implements SimpleCommand {
|
|||||||
public List<String> suggest(final SimpleCommand.Invocation invocation) {
|
public List<String> suggest(final SimpleCommand.Invocation invocation) {
|
||||||
final String[] currentArgs = invocation.arguments();
|
final String[] currentArgs = invocation.arguments();
|
||||||
Stream<String> possibilities = server.getAllServers().stream()
|
Stream<String> possibilities = server.getAllServers().stream()
|
||||||
.map(rs -> rs.getServerInfo().getName());
|
.map(rs -> rs.serverInfo().name());
|
||||||
|
|
||||||
if (currentArgs.length == 0) {
|
if (currentArgs.length == 0) {
|
||||||
return possibilities.collect(Collectors.toList());
|
return possibilities.collect(Collectors.toList());
|
||||||
|
@ -222,19 +222,19 @@ public class VelocityCommand implements SimpleCommand {
|
|||||||
|
|
||||||
ProxyVersion version = server.getVersion();
|
ProxyVersion version = server.getVersion();
|
||||||
|
|
||||||
Component velocity = Component.text().content(version.getName() + " ")
|
Component velocity = Component.text().content(version.name() + " ")
|
||||||
.decoration(TextDecoration.BOLD, true)
|
.decoration(TextDecoration.BOLD, true)
|
||||||
.color(VELOCITY_COLOR)
|
.color(VELOCITY_COLOR)
|
||||||
.append(Component.text(version.getVersion()).decoration(TextDecoration.BOLD, false))
|
.append(Component.text(version.version()).decoration(TextDecoration.BOLD, false))
|
||||||
.build();
|
.build();
|
||||||
Component copyright = Component
|
Component copyright = Component
|
||||||
.translatable("velocity.command.version-copyright",
|
.translatable("velocity.command.version-copyright",
|
||||||
Component.text(version.getVendor()),
|
Component.text(version.vendor()),
|
||||||
Component.text(version.getName()));
|
Component.text(version.name()));
|
||||||
source.sendMessage(velocity);
|
source.sendMessage(velocity);
|
||||||
source.sendMessage(copyright);
|
source.sendMessage(copyright);
|
||||||
|
|
||||||
if (version.getName().equals("Velocity")) {
|
if (version.name().equals("Velocity")) {
|
||||||
TextComponent embellishment = Component.text()
|
TextComponent embellishment = Component.text()
|
||||||
.append(Component.text().content("velocitypowered.com")
|
.append(Component.text().content("velocitypowered.com")
|
||||||
.color(NamedTextColor.GREEN)
|
.color(NamedTextColor.GREEN)
|
||||||
@ -274,7 +274,7 @@ public class VelocityCommand implements SimpleCommand {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<PluginContainer> plugins = ImmutableList.copyOf(server.getPluginManager().getPlugins());
|
List<PluginContainer> plugins = ImmutableList.copyOf(server.getPluginManager().plugins());
|
||||||
int pluginCount = plugins.size();
|
int pluginCount = plugins.size();
|
||||||
|
|
||||||
if (pluginCount == 0) {
|
if (pluginCount == 0) {
|
||||||
@ -286,7 +286,7 @@ public class VelocityCommand implements SimpleCommand {
|
|||||||
TextComponent.Builder listBuilder = Component.text();
|
TextComponent.Builder listBuilder = Component.text();
|
||||||
for (int i = 0; i < pluginCount; i++) {
|
for (int i = 0; i < pluginCount; i++) {
|
||||||
PluginContainer plugin = plugins.get(i);
|
PluginContainer plugin = plugins.get(i);
|
||||||
listBuilder.append(componentForPlugin(plugin.getDescription()));
|
listBuilder.append(componentForPlugin(plugin.description()));
|
||||||
if (i + 1 < pluginCount) {
|
if (i + 1 < pluginCount) {
|
||||||
listBuilder.append(Component.text(", "));
|
listBuilder.append(Component.text(", "));
|
||||||
}
|
}
|
||||||
@ -300,37 +300,37 @@ public class VelocityCommand implements SimpleCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private TextComponent componentForPlugin(PluginDescription description) {
|
private TextComponent componentForPlugin(PluginDescription description) {
|
||||||
String pluginInfo = description.getName().orElse(description.getId())
|
String pluginInfo = description.name().orElse(description.id())
|
||||||
+ description.getVersion().map(v -> " " + v).orElse("");
|
+ description.version().map(v -> " " + v).orElse("");
|
||||||
|
|
||||||
TextComponent.Builder hoverText = Component.text().content(pluginInfo);
|
TextComponent.Builder hoverText = Component.text().content(pluginInfo);
|
||||||
|
|
||||||
description.getUrl().ifPresent(url -> {
|
description.url().ifPresent(url -> {
|
||||||
hoverText.append(Component.newline());
|
hoverText.append(Component.newline());
|
||||||
hoverText.append(Component.translatable(
|
hoverText.append(Component.translatable(
|
||||||
"velocity.command.plugin-tooltip-website",
|
"velocity.command.plugin-tooltip-website",
|
||||||
Component.text(url)));
|
Component.text(url)));
|
||||||
});
|
});
|
||||||
if (!description.getAuthors().isEmpty()) {
|
if (!description.authors().isEmpty()) {
|
||||||
hoverText.append(Component.newline());
|
hoverText.append(Component.newline());
|
||||||
if (description.getAuthors().size() == 1) {
|
if (description.authors().size() == 1) {
|
||||||
hoverText.append(Component.translatable("velocity.command.plugin-tooltip-author",
|
hoverText.append(Component.translatable("velocity.command.plugin-tooltip-author",
|
||||||
Component.text(description.getAuthors().get(0))));
|
Component.text(description.authors().get(0))));
|
||||||
} else {
|
} else {
|
||||||
hoverText.append(
|
hoverText.append(
|
||||||
Component.translatable("velocity.command.plugin-tooltip-author",
|
Component.translatable("velocity.command.plugin-tooltip-author",
|
||||||
Component.text(String.join(", ", description.getAuthors()))
|
Component.text(String.join(", ", description.authors()))
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
description.getDescription().ifPresent(pdesc -> {
|
description.description().ifPresent(pdesc -> {
|
||||||
hoverText.append(Component.newline());
|
hoverText.append(Component.newline());
|
||||||
hoverText.append(Component.newline());
|
hoverText.append(Component.newline());
|
||||||
hoverText.append(Component.text(pdesc));
|
hoverText.append(Component.text(pdesc));
|
||||||
});
|
});
|
||||||
|
|
||||||
return Component.text(description.getId(), NamedTextColor.GRAY)
|
return Component.text(description.id(), NamedTextColor.GRAY)
|
||||||
.hoverEvent(HoverEvent.showText(hoverText.build()));
|
.hoverEvent(HoverEvent.showText(hoverText.build()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -359,7 +359,7 @@ public class VelocityCommand implements SimpleCommand {
|
|||||||
Collection<RegisteredServer> allServers = ImmutableSet.copyOf(server.getAllServers());
|
Collection<RegisteredServer> allServers = ImmutableSet.copyOf(server.getAllServers());
|
||||||
JsonObject servers = new JsonObject();
|
JsonObject servers = new JsonObject();
|
||||||
for (RegisteredServer iter : allServers) {
|
for (RegisteredServer iter : allServers) {
|
||||||
servers.add(iter.getServerInfo().getName(),
|
servers.add(iter.serverInfo().name(),
|
||||||
InformationUtils.collectServerInfo(iter));
|
InformationUtils.collectServerInfo(iter));
|
||||||
}
|
}
|
||||||
JsonArray connectOrder = new JsonArray();
|
JsonArray connectOrder = new JsonArray();
|
||||||
|
@ -39,14 +39,14 @@ public final class BrigadierCommandRegistrar extends AbstractCommandRegistrar<Br
|
|||||||
// The literal name might not match any aliases on the given meta.
|
// The literal name might not match any aliases on the given meta.
|
||||||
// Register it (if valid), since it's probably what the user expects.
|
// Register it (if valid), since it's probably what the user expects.
|
||||||
// If invalid, the metadata contains the same alias, but in lowercase.
|
// If invalid, the metadata contains the same alias, but in lowercase.
|
||||||
final LiteralCommandNode<CommandSource> literal = command.getNode();
|
final LiteralCommandNode<CommandSource> literal = command.node();
|
||||||
final String primaryAlias = literal.getName();
|
final String primaryAlias = literal.getName();
|
||||||
if (VelocityCommands.isValidAlias(primaryAlias)) {
|
if (VelocityCommands.isValidAlias(primaryAlias)) {
|
||||||
// Register directly without copying
|
// Register directly without copying
|
||||||
this.register(literal);
|
this.register(literal);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (final String alias : meta.getAliases()) {
|
for (final String alias : meta.aliases()) {
|
||||||
if (primaryAlias.equals(alias)) {
|
if (primaryAlias.equals(alias)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,7 @@ abstract class InvocableCommandRegistrar<T extends InvocableCommand<I>,
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void register(final CommandMeta meta, final T command) {
|
public void register(final CommandMeta meta, final T command) {
|
||||||
final Iterator<String> aliases = meta.getAliases().iterator();
|
final Iterator<String> aliases = meta.aliases().iterator();
|
||||||
|
|
||||||
final String primaryAlias = aliases.next();
|
final String primaryAlias = aliases.next();
|
||||||
final LiteralCommandNode<CommandSource> literal =
|
final LiteralCommandNode<CommandSource> literal =
|
||||||
|
@ -88,7 +88,7 @@ public class BackendPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
BackendPlaySessionHandler(VelocityServer server, VelocityServerConnection serverConn) {
|
BackendPlaySessionHandler(VelocityServer server, VelocityServerConnection serverConn) {
|
||||||
this.server = server;
|
this.server = server;
|
||||||
this.serverConn = serverConn;
|
this.serverConn = serverConn;
|
||||||
this.playerConnection = serverConn.getPlayer().getConnection();
|
this.playerConnection = serverConn.player().getConnection();
|
||||||
|
|
||||||
MinecraftSessionHandler psh = playerConnection.getActiveSessionHandler();
|
MinecraftSessionHandler psh = playerConnection.getActiveSessionHandler();
|
||||||
if (!(psh instanceof ClientPlaySessionHandler)) {
|
if (!(psh instanceof ClientPlaySessionHandler)) {
|
||||||
@ -98,12 +98,12 @@ public class BackendPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
this.playerSessionHandler = (ClientPlaySessionHandler) psh;
|
this.playerSessionHandler = (ClientPlaySessionHandler) psh;
|
||||||
|
|
||||||
this.bungeecordMessageResponder = new BungeeCordMessageResponder(server,
|
this.bungeecordMessageResponder = new BungeeCordMessageResponder(server,
|
||||||
serverConn.getPlayer());
|
serverConn.player());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void activated() {
|
public void activated() {
|
||||||
serverConn.getServer().addPlayer(serverConn.getPlayer());
|
serverConn.server().addPlayer(serverConn.player());
|
||||||
|
|
||||||
MinecraftConnection serverMc = serverConn.ensureConnected();
|
MinecraftConnection serverMc = serverConn.ensureConnected();
|
||||||
if (server.getConfiguration().isBungeePluginChannelEnabled()) {
|
if (server.getConfiguration().isBungeePluginChannelEnabled()) {
|
||||||
@ -130,7 +130,7 @@ public class BackendPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
smc.setAutoReading(false);
|
smc.setAutoReading(false);
|
||||||
// Even when not auto reading messages are still decoded. Decode them with the correct state
|
// Even when not auto reading messages are still decoded. Decode them with the correct state
|
||||||
smc.getChannel().pipeline().get(MinecraftDecoder.class).setState(StateRegistry.CONFIG);
|
smc.getChannel().pipeline().get(MinecraftDecoder.class).setState(StateRegistry.CONFIG);
|
||||||
serverConn.getPlayer().switchToConfigState();
|
serverConn.player().switchToConfigState();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -149,7 +149,7 @@ public class BackendPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
@Override
|
@Override
|
||||||
public boolean handle(Disconnect packet) {
|
public boolean handle(Disconnect packet) {
|
||||||
serverConn.disconnect();
|
serverConn.disconnect();
|
||||||
serverConn.getPlayer().handleConnectionException(serverConn.getServer(), packet, true);
|
serverConn.player().handleConnectionException(serverConn.server(), packet, true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -167,14 +167,14 @@ public class BackendPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
public boolean handle(ResourcePackRequest packet) {
|
public boolean handle(ResourcePackRequest packet) {
|
||||||
ResourcePackInfo.Builder builder = new VelocityResourcePackInfo.BuilderImpl(
|
ResourcePackInfo.Builder builder = new VelocityResourcePackInfo.BuilderImpl(
|
||||||
Preconditions.checkNotNull(packet.getUrl()))
|
Preconditions.checkNotNull(packet.getUrl()))
|
||||||
.setPrompt(packet.getPrompt())
|
.prompt(packet.getPrompt())
|
||||||
.setShouldForce(packet.isRequired())
|
.required(packet.isRequired())
|
||||||
.setOrigin(ResourcePackInfo.Origin.DOWNSTREAM_SERVER);
|
.setOrigin(ResourcePackInfo.Origin.DOWNSTREAM_SERVER);
|
||||||
|
|
||||||
String hash = packet.getHash();
|
String hash = packet.getHash();
|
||||||
if (hash != null && !hash.isEmpty()) {
|
if (hash != null && !hash.isEmpty()) {
|
||||||
if (PLAUSIBLE_SHA1_HASH.matcher(hash).matches()) {
|
if (PLAUSIBLE_SHA1_HASH.matcher(hash).matches()) {
|
||||||
builder.setHash(ByteBufUtil.decodeHexDump(hash));
|
builder.hash(ByteBufUtil.decodeHexDump(hash));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -185,14 +185,14 @@ public class BackendPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
if (playerConnection.isClosed()) {
|
if (playerConnection.isClosed()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (serverResourcePackSendEvent.getResult().isAllowed()) {
|
if (serverResourcePackSendEvent.result().allowed()) {
|
||||||
ResourcePackInfo toSend = serverResourcePackSendEvent.getProvidedResourcePack();
|
ResourcePackInfo toSend = serverResourcePackSendEvent.providedResourcePack();
|
||||||
if (toSend != serverResourcePackSendEvent.getReceivedResourcePack()) {
|
if (toSend != serverResourcePackSendEvent.receivedResourcePack()) {
|
||||||
((VelocityResourcePackInfo) toSend)
|
((VelocityResourcePackInfo) toSend)
|
||||||
.setOriginalOrigin(ResourcePackInfo.Origin.DOWNSTREAM_SERVER);
|
.setOriginalOrigin(ResourcePackInfo.Origin.DOWNSTREAM_SERVER);
|
||||||
}
|
}
|
||||||
|
|
||||||
serverConn.getPlayer().queueResourcePack(toSend);
|
serverConn.player().queueResourcePack(toSend);
|
||||||
} else if (serverConn.getConnection() != null) {
|
} else if (serverConn.getConnection() != null) {
|
||||||
serverConn.getConnection().write(new ResourcePackResponse(
|
serverConn.getConnection().write(new ResourcePackResponse(
|
||||||
packet.getHash(),
|
packet.getHash(),
|
||||||
@ -231,7 +231,7 @@ public class BackendPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (serverConn.getPhase().handle(serverConn, serverConn.getPlayer(), packet)) {
|
if (serverConn.getPhase().handle(serverConn, serverConn.player(), packet)) {
|
||||||
// Handled.
|
// Handled.
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -242,9 +242,9 @@ public class BackendPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
byte[] copy = ByteBufUtil.getBytes(packet.content());
|
byte[] copy = ByteBufUtil.getBytes(packet.content());
|
||||||
PluginMessageEvent event = new PluginMessageEvent(serverConn, serverConn.getPlayer(), id, copy);
|
PluginMessageEvent event = new PluginMessageEvent(serverConn, serverConn.player(), id, copy);
|
||||||
server.getEventManager().fire(event).thenAcceptAsync(pme -> {
|
server.getEventManager().fire(event).thenAcceptAsync(pme -> {
|
||||||
if (pme.getResult().isAllowed() && !playerConnection.isClosed()) {
|
if (pme.result().allowed() && !playerConnection.isClosed()) {
|
||||||
PluginMessage copied = new PluginMessage(packet.getChannel(), Unpooled.wrappedBuffer(copy));
|
PluginMessage copied = new PluginMessage(packet.getChannel(), Unpooled.wrappedBuffer(copy));
|
||||||
playerConnection.write(copied);
|
playerConnection.write(copied);
|
||||||
}
|
}
|
||||||
@ -263,19 +263,19 @@ public class BackendPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(LegacyPlayerListItem packet) {
|
public boolean handle(LegacyPlayerListItem packet) {
|
||||||
serverConn.getPlayer().getTabList().processLegacy(packet);
|
serverConn.player().tabList().processLegacy(packet);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(UpsertPlayerInfo packet) {
|
public boolean handle(UpsertPlayerInfo packet) {
|
||||||
serverConn.getPlayer().getTabList().processUpdate(packet);
|
serverConn.player().tabList().processUpdate(packet);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(RemovePlayerInfo packet) {
|
public boolean handle(RemovePlayerInfo packet) {
|
||||||
serverConn.getPlayer().getTabList().processRemove(packet);
|
serverConn.player().tabList().processRemove(packet);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -285,11 +285,11 @@ public class BackendPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
if (server.getConfiguration().isAnnounceProxyCommands()) {
|
if (server.getConfiguration().isAnnounceProxyCommands()) {
|
||||||
// Inject commands from the proxy.
|
// Inject commands from the proxy.
|
||||||
final CommandGraphInjector<CommandSource> injector = server.getCommandManager().getInjector();
|
final CommandGraphInjector<CommandSource> injector = server.getCommandManager().getInjector();
|
||||||
injector.inject(rootNode, serverConn.getPlayer());
|
injector.inject(rootNode, serverConn.player());
|
||||||
}
|
}
|
||||||
|
|
||||||
server.getEventManager().fire(
|
server.getEventManager().fire(
|
||||||
new PlayerAvailableCommandsEvent(serverConn.getPlayer(), rootNode))
|
new PlayerAvailableCommandsEvent(serverConn.player(), rootNode))
|
||||||
.thenAcceptAsync(event -> playerConnection.write(commands), playerConnection.eventLoop())
|
.thenAcceptAsync(event -> playerConnection.write(commands), playerConnection.eventLoop())
|
||||||
.exceptionally((ex) -> {
|
.exceptionally((ex) -> {
|
||||||
logger.error("Exception while handling available commands for {}", playerConnection, ex);
|
logger.error("Exception while handling available commands for {}", playerConnection, ex);
|
||||||
@ -300,12 +300,12 @@ public class BackendPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(ServerData packet) {
|
public boolean handle(ServerData packet) {
|
||||||
server.getServerListPingHandler().getInitialPing(this.serverConn.getPlayer()).thenComposeAsync(
|
server.getServerListPingHandler().getInitialPing(this.serverConn.player()).thenComposeAsync(
|
||||||
ping -> server.getEventManager()
|
ping -> server.getEventManager()
|
||||||
.fire(new ProxyPingEvent(this.serverConn.getPlayer(), ping)),
|
.fire(new ProxyPingEvent(this.serverConn.player(), ping)),
|
||||||
playerConnection.eventLoop()).thenAcceptAsync(pingEvent -> this.playerConnection.write(
|
playerConnection.eventLoop()).thenAcceptAsync(pingEvent -> this.playerConnection.write(
|
||||||
new ServerData(pingEvent.getPing().getDescriptionComponent(),
|
new ServerData(pingEvent.ping().description(),
|
||||||
pingEvent.getPing().getFavicon().orElse(null), packet.isSecureChatEnforced())),
|
pingEvent.ping().favicon().orElse(null), packet.isSecureChatEnforced())),
|
||||||
playerConnection.eventLoop());
|
playerConnection.eventLoop());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -340,7 +340,7 @@ public class BackendPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
@Override
|
@Override
|
||||||
public void exception(Throwable throwable) {
|
public void exception(Throwable throwable) {
|
||||||
exceptionTriggered = true;
|
exceptionTriggered = true;
|
||||||
serverConn.getPlayer().handleConnectionException(serverConn.getServer(), throwable,
|
serverConn.player().handleConnectionException(serverConn.server(), throwable,
|
||||||
!(throwable instanceof ReadTimeoutException));
|
!(throwable instanceof ReadTimeoutException));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -350,14 +350,14 @@ public class BackendPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void disconnected() {
|
public void disconnected() {
|
||||||
serverConn.getServer().removePlayer(serverConn.getPlayer());
|
serverConn.server().removePlayer(serverConn.player());
|
||||||
if (!serverConn.isGracefulDisconnect() && !exceptionTriggered) {
|
if (!serverConn.isGracefulDisconnect() && !exceptionTriggered) {
|
||||||
if (server.getConfiguration().isFailoverOnUnexpectedServerDisconnect()) {
|
if (server.getConfiguration().isFailoverOnUnexpectedServerDisconnect()) {
|
||||||
serverConn.getPlayer().handleConnectionException(serverConn.getServer(),
|
serverConn.player().handleConnectionException(serverConn.server(),
|
||||||
Disconnect.create(ConnectionMessages.INTERNAL_SERVER_CONNECTION_ERROR,
|
Disconnect.create(ConnectionMessages.INTERNAL_SERVER_CONNECTION_ERROR,
|
||||||
ProtocolVersion.MINECRAFT_1_16), true);
|
ProtocolVersion.MINECRAFT_1_16), true);
|
||||||
} else {
|
} else {
|
||||||
serverConn.getPlayer().disconnect(ConnectionMessages.INTERNAL_SERVER_CONNECTION_ERROR);
|
serverConn.player().disconnect(ConnectionMessages.INTERNAL_SERVER_CONNECTION_ERROR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,7 @@ public class BungeeCordMessageResponder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isBungeeCordMessage(PluginMessage message) {
|
public static boolean isBungeeCordMessage(PluginMessage message) {
|
||||||
return MODERN_CHANNEL.getId().equals(message.getChannel()) || LEGACY_CHANNEL.getId()
|
return MODERN_CHANNEL.id().equals(message.getChannel()) || LEGACY_CHANNEL.id()
|
||||||
.equals(message.getChannel());
|
.equals(message.getChannel());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,7 +98,7 @@ public class BungeeCordMessageResponder {
|
|||||||
ByteBufDataOutput out = new ByteBufDataOutput(buf);
|
ByteBufDataOutput out = new ByteBufDataOutput(buf);
|
||||||
out.writeUTF("IP");
|
out.writeUTF("IP");
|
||||||
|
|
||||||
SocketAddress address = player.getRemoteAddress();
|
SocketAddress address = player.remoteAddress();
|
||||||
if (address instanceof InetSocketAddress) {
|
if (address instanceof InetSocketAddress) {
|
||||||
InetSocketAddress serverInetAddr = (InetSocketAddress) address;
|
InetSocketAddress serverInetAddr = (InetSocketAddress) address;
|
||||||
out.writeUTF(serverInetAddr.getHostString());
|
out.writeUTF(serverInetAddr.getHostString());
|
||||||
@ -121,9 +121,9 @@ public class BungeeCordMessageResponder {
|
|||||||
out.writeInt(proxy.getPlayerCount());
|
out.writeInt(proxy.getPlayerCount());
|
||||||
} else {
|
} else {
|
||||||
proxy.getServer(target).ifPresent(rs -> {
|
proxy.getServer(target).ifPresent(rs -> {
|
||||||
int playersOnServer = rs.getPlayersConnected().size();
|
int playersOnServer = rs.players().size();
|
||||||
out.writeUTF("PlayerCount");
|
out.writeUTF("PlayerCount");
|
||||||
out.writeUTF(rs.getServerInfo().getName());
|
out.writeUTF(rs.serverInfo().name());
|
||||||
out.writeInt(playersOnServer);
|
out.writeInt(playersOnServer);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -146,17 +146,17 @@ public class BungeeCordMessageResponder {
|
|||||||
|
|
||||||
StringJoiner joiner = new StringJoiner(", ");
|
StringJoiner joiner = new StringJoiner(", ");
|
||||||
for (Player online : proxy.getAllPlayers()) {
|
for (Player online : proxy.getAllPlayers()) {
|
||||||
joiner.add(online.getUsername());
|
joiner.add(online.username());
|
||||||
}
|
}
|
||||||
out.writeUTF(joiner.toString());
|
out.writeUTF(joiner.toString());
|
||||||
} else {
|
} else {
|
||||||
proxy.getServer(target).ifPresent(info -> {
|
proxy.getServer(target).ifPresent(info -> {
|
||||||
out.writeUTF("PlayerList");
|
out.writeUTF("PlayerList");
|
||||||
out.writeUTF(info.getServerInfo().getName());
|
out.writeUTF(info.serverInfo().name());
|
||||||
|
|
||||||
StringJoiner joiner = new StringJoiner(", ");
|
StringJoiner joiner = new StringJoiner(", ");
|
||||||
for (Player online : info.getPlayersConnected()) {
|
for (Player online : info.players()) {
|
||||||
joiner.add(online.getUsername());
|
joiner.add(online.username());
|
||||||
}
|
}
|
||||||
out.writeUTF(joiner.toString());
|
out.writeUTF(joiner.toString());
|
||||||
});
|
});
|
||||||
@ -172,7 +172,7 @@ public class BungeeCordMessageResponder {
|
|||||||
private void processGetServers() {
|
private void processGetServers() {
|
||||||
StringJoiner joiner = new StringJoiner(", ");
|
StringJoiner joiner = new StringJoiner(", ");
|
||||||
for (RegisteredServer server : proxy.getAllServers()) {
|
for (RegisteredServer server : proxy.getAllServers()) {
|
||||||
joiner.add(server.getServerInfo().getName());
|
joiner.add(server.serverInfo().name());
|
||||||
}
|
}
|
||||||
|
|
||||||
ByteBuf buf = Unpooled.buffer();
|
ByteBuf buf = Unpooled.buffer();
|
||||||
@ -210,7 +210,7 @@ public class BungeeCordMessageResponder {
|
|||||||
ByteBufDataOutput out = new ByteBufDataOutput(buf);
|
ByteBufDataOutput out = new ByteBufDataOutput(buf);
|
||||||
|
|
||||||
out.writeUTF("GetServer");
|
out.writeUTF("GetServer");
|
||||||
out.writeUTF(player.ensureAndGetCurrentServer().getServerInfo().getName());
|
out.writeUTF(player.ensureAndGetCurrentServer().serverInfo().name());
|
||||||
|
|
||||||
sendResponseOnConnection(buf);
|
sendResponseOnConnection(buf);
|
||||||
}
|
}
|
||||||
@ -220,7 +220,7 @@ public class BungeeCordMessageResponder {
|
|||||||
ByteBufDataOutput out = new ByteBufDataOutput(buf);
|
ByteBufDataOutput out = new ByteBufDataOutput(buf);
|
||||||
|
|
||||||
out.writeUTF("UUID");
|
out.writeUTF("UUID");
|
||||||
out.writeUTF(UuidUtils.toUndashed(player.getUniqueId()));
|
out.writeUTF(UuidUtils.toUndashed(player.uuid()));
|
||||||
|
|
||||||
sendResponseOnConnection(buf);
|
sendResponseOnConnection(buf);
|
||||||
}
|
}
|
||||||
@ -231,8 +231,8 @@ public class BungeeCordMessageResponder {
|
|||||||
ByteBufDataOutput out = new ByteBufDataOutput(buf);
|
ByteBufDataOutput out = new ByteBufDataOutput(buf);
|
||||||
|
|
||||||
out.writeUTF("UUIDOther");
|
out.writeUTF("UUIDOther");
|
||||||
out.writeUTF(player.getUsername());
|
out.writeUTF(player.username());
|
||||||
out.writeUTF(UuidUtils.toUndashed(player.getUniqueId()));
|
out.writeUTF(UuidUtils.toUndashed(player.uuid()));
|
||||||
|
|
||||||
sendResponseOnConnection(buf);
|
sendResponseOnConnection(buf);
|
||||||
});
|
});
|
||||||
@ -244,8 +244,8 @@ public class BungeeCordMessageResponder {
|
|||||||
ByteBufDataOutput out = new ByteBufDataOutput(buf);
|
ByteBufDataOutput out = new ByteBufDataOutput(buf);
|
||||||
|
|
||||||
out.writeUTF("IPOther");
|
out.writeUTF("IPOther");
|
||||||
out.writeUTF(player.getUsername());
|
out.writeUTF(player.username());
|
||||||
SocketAddress address = player.getRemoteAddress();
|
SocketAddress address = player.remoteAddress();
|
||||||
if (address instanceof InetSocketAddress) {
|
if (address instanceof InetSocketAddress) {
|
||||||
InetSocketAddress serverInetAddr = (InetSocketAddress) address;
|
InetSocketAddress serverInetAddr = (InetSocketAddress) address;
|
||||||
out.writeUTF(serverInetAddr.getHostString());
|
out.writeUTF(serverInetAddr.getHostString());
|
||||||
@ -265,8 +265,8 @@ public class BungeeCordMessageResponder {
|
|||||||
ByteBufDataOutput out = new ByteBufDataOutput(buf);
|
ByteBufDataOutput out = new ByteBufDataOutput(buf);
|
||||||
|
|
||||||
out.writeUTF("ServerIP");
|
out.writeUTF("ServerIP");
|
||||||
out.writeUTF(info.getServerInfo().getName());
|
out.writeUTF(info.serverInfo().name());
|
||||||
SocketAddress address = info.getServerInfo().getAddress();
|
SocketAddress address = info.serverInfo().address();
|
||||||
if (address instanceof InetSocketAddress) {
|
if (address instanceof InetSocketAddress) {
|
||||||
InetSocketAddress serverInetAddr = (InetSocketAddress) address;
|
InetSocketAddress serverInetAddr = (InetSocketAddress) address;
|
||||||
out.writeUTF(serverInetAddr.getHostString());
|
out.writeUTF(serverInetAddr.getHostString());
|
||||||
@ -298,12 +298,12 @@ public class BungeeCordMessageResponder {
|
|||||||
private void processForwardToServer(ByteBufDataInput in) {
|
private void processForwardToServer(ByteBufDataInput in) {
|
||||||
String target = in.readUTF();
|
String target = in.readUTF();
|
||||||
ByteBuf toForward = in.unwrap().copy();
|
ByteBuf toForward = in.unwrap().copy();
|
||||||
final ServerInfo currentUserServer = player.getCurrentServer()
|
final ServerInfo currentUserServer = player.connectedServer()
|
||||||
.map(ServerConnection::getServerInfo).orElse(null);
|
.map(ServerConnection::serverInfo).orElse(null);
|
||||||
if (target.equals("ALL") || target.equals("ONLINE")) {
|
if (target.equals("ALL") || target.equals("ONLINE")) {
|
||||||
try {
|
try {
|
||||||
for (RegisteredServer rs : proxy.getAllServers()) {
|
for (RegisteredServer rs : proxy.getAllServers()) {
|
||||||
if (!rs.getServerInfo().equals(currentUserServer)) {
|
if (!rs.serverInfo().equals(currentUserServer)) {
|
||||||
((VelocityRegisteredServer) rs).sendPluginMessage(LEGACY_CHANNEL,
|
((VelocityRegisteredServer) rs).sendPluginMessage(LEGACY_CHANNEL,
|
||||||
toForward.retainedSlice());
|
toForward.retainedSlice());
|
||||||
}
|
}
|
||||||
@ -322,8 +322,8 @@ public class BungeeCordMessageResponder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static String getBungeeCordChannel(ProtocolVersion version) {
|
static String getBungeeCordChannel(ProtocolVersion version) {
|
||||||
return version.compareTo(ProtocolVersion.MINECRAFT_1_13) >= 0 ? MODERN_CHANNEL.getId()
|
return version.compareTo(ProtocolVersion.MINECRAFT_1_13) >= 0 ? MODERN_CHANNEL.id()
|
||||||
: LEGACY_CHANNEL.getId();
|
: LEGACY_CHANNEL.id();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note: this method will always release the buffer!
|
// Note: this method will always release the buffer!
|
||||||
|
@ -81,8 +81,8 @@ public class ConfigSessionHandler implements MinecraftSessionHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void activated() {
|
public void activated() {
|
||||||
resourcePackToApply = serverConn.getPlayer().getAppliedResourcePack();
|
resourcePackToApply = serverConn.player().appliedResourcePack();
|
||||||
serverConn.getPlayer().clearAppliedResourcePack();
|
serverConn.player().clearAppliedResourcePack();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -103,7 +103,7 @@ public class ConfigSessionHandler implements MinecraftSessionHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(TagsUpdate packet) {
|
public boolean handle(TagsUpdate packet) {
|
||||||
serverConn.getPlayer().getConnection().write(packet);
|
serverConn.player().getConnection().write(packet);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,7 +115,7 @@ public class ConfigSessionHandler implements MinecraftSessionHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(ResourcePackRequest packet) {
|
public boolean handle(ResourcePackRequest packet) {
|
||||||
final MinecraftConnection playerConnection = serverConn.getPlayer().getConnection();
|
final MinecraftConnection playerConnection = serverConn.player().getConnection();
|
||||||
|
|
||||||
ServerResourcePackSendEvent event =
|
ServerResourcePackSendEvent event =
|
||||||
new ServerResourcePackSendEvent(packet.toServerPromptedPack(), this.serverConn);
|
new ServerResourcePackSendEvent(packet.toServerPromptedPack(), this.serverConn);
|
||||||
@ -124,15 +124,15 @@ public class ConfigSessionHandler implements MinecraftSessionHandler {
|
|||||||
if (playerConnection.isClosed()) {
|
if (playerConnection.isClosed()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (serverResourcePackSendEvent.getResult().isAllowed()) {
|
if (serverResourcePackSendEvent.result().allowed()) {
|
||||||
ResourcePackInfo toSend = serverResourcePackSendEvent.getProvidedResourcePack();
|
ResourcePackInfo toSend = serverResourcePackSendEvent.providedResourcePack();
|
||||||
if (toSend != serverResourcePackSendEvent.getReceivedResourcePack()) {
|
if (toSend != serverResourcePackSendEvent.receivedResourcePack()) {
|
||||||
((VelocityResourcePackInfo) toSend).setOriginalOrigin(
|
((VelocityResourcePackInfo) toSend).setOriginalOrigin(
|
||||||
ResourcePackInfo.Origin.DOWNSTREAM_SERVER);
|
ResourcePackInfo.Origin.DOWNSTREAM_SERVER);
|
||||||
}
|
}
|
||||||
|
|
||||||
resourcePackToApply = null;
|
resourcePackToApply = null;
|
||||||
serverConn.getPlayer().queueResourcePack(toSend);
|
serverConn.player().queueResourcePack(toSend);
|
||||||
} else if (serverConn.getConnection() != null) {
|
} else if (serverConn.getConnection() != null) {
|
||||||
serverConn.getConnection().write(new ResourcePackResponse(packet.getHash(),
|
serverConn.getConnection().write(new ResourcePackResponse(packet.getHash(),
|
||||||
PlayerResourcePackStatusEvent.Status.DECLINED));
|
PlayerResourcePackStatusEvent.Status.DECLINED));
|
||||||
@ -152,7 +152,7 @@ public class ConfigSessionHandler implements MinecraftSessionHandler {
|
|||||||
@Override
|
@Override
|
||||||
public boolean handle(FinishedUpdate packet) {
|
public boolean handle(FinishedUpdate packet) {
|
||||||
MinecraftConnection smc = serverConn.ensureConnected();
|
MinecraftConnection smc = serverConn.ensureConnected();
|
||||||
ConnectedPlayer player = serverConn.getPlayer();
|
ConnectedPlayer player = serverConn.player();
|
||||||
ClientConfigSessionHandler configHandler =
|
ClientConfigSessionHandler configHandler =
|
||||||
(ClientConfigSessionHandler) player.getConnection().getActiveSessionHandler();
|
(ClientConfigSessionHandler) player.getConnection().getActiveSessionHandler();
|
||||||
|
|
||||||
@ -165,12 +165,12 @@ public class ConfigSessionHandler implements MinecraftSessionHandler {
|
|||||||
player.sendPlayerListHeaderAndFooter(
|
player.sendPlayerListHeaderAndFooter(
|
||||||
player.getPlayerListHeader(), player.getPlayerListFooter());
|
player.getPlayerListHeader(), player.getPlayerListFooter());
|
||||||
// The client cleared the tab list. TODO: Restore changes done via TabList API
|
// The client cleared the tab list. TODO: Restore changes done via TabList API
|
||||||
player.getTabList().clearAllSilent();
|
player.tabList().clearAllSilent();
|
||||||
} else {
|
} else {
|
||||||
smc.setActiveSessionHandler(StateRegistry.PLAY,
|
smc.setActiveSessionHandler(StateRegistry.PLAY,
|
||||||
new TransitionSessionHandler(server, serverConn, resultFuture));
|
new TransitionSessionHandler(server, serverConn, resultFuture));
|
||||||
}
|
}
|
||||||
if (player.getAppliedResourcePack() == null && resourcePackToApply != null) {
|
if (player.appliedResourcePack() == null && resourcePackToApply != null) {
|
||||||
player.queueResourcePack(resourcePackToApply);
|
player.queueResourcePack(resourcePackToApply);
|
||||||
}
|
}
|
||||||
smc.setAutoReading(true);
|
smc.setAutoReading(true);
|
||||||
@ -181,25 +181,25 @@ public class ConfigSessionHandler implements MinecraftSessionHandler {
|
|||||||
@Override
|
@Override
|
||||||
public boolean handle(Disconnect packet) {
|
public boolean handle(Disconnect packet) {
|
||||||
serverConn.disconnect();
|
serverConn.disconnect();
|
||||||
resultFuture.complete(ConnectionRequestResults.forDisconnect(packet, serverConn.getServer()));
|
resultFuture.complete(ConnectionRequestResults.forDisconnect(packet, serverConn.server()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(PluginMessage packet) {
|
public boolean handle(PluginMessage packet) {
|
||||||
if (PluginMessageUtil.isMcBrand(packet)) {
|
if (PluginMessageUtil.isMcBrand(packet)) {
|
||||||
serverConn.getPlayer().getConnection().write(
|
serverConn.player().getConnection().write(
|
||||||
PluginMessageUtil.rewriteMinecraftBrand(packet, server.getVersion(),
|
PluginMessageUtil.rewriteMinecraftBrand(packet, server.getVersion(),
|
||||||
serverConn.getPlayer().getProtocolVersion()));
|
serverConn.player().protocolVersion()));
|
||||||
} else {
|
} else {
|
||||||
serverConn.getPlayer().getConnection().write(packet.retain());
|
serverConn.player().getConnection().write(packet.retain());
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(RegistrySync packet) {
|
public boolean handle(RegistrySync packet) {
|
||||||
serverConn.getPlayer().getConnection().write(packet.retain());
|
serverConn.player().getConnection().write(packet.retain());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -211,13 +211,13 @@ public class ConfigSessionHandler implements MinecraftSessionHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleGeneric(MinecraftPacket packet) {
|
public void handleGeneric(MinecraftPacket packet) {
|
||||||
serverConn.getPlayer().getConnection().write(packet);
|
serverConn.player().getConnection().write(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void switchFailure(Throwable cause) {
|
private void switchFailure(Throwable cause) {
|
||||||
logger.error("Unable to switch to new server {} for {}", serverConn.getServerInfo().getName(),
|
logger.error("Unable to switch to new server {} for {}", serverConn.serverInfo().name(),
|
||||||
serverConn.getPlayer().getUsername(), cause);
|
serverConn.player().username(), cause);
|
||||||
serverConn.getPlayer().disconnect(ConnectionMessages.INTERNAL_SERVER_CONNECTION_ERROR);
|
serverConn.player().disconnect(ConnectionMessages.INTERNAL_SERVER_CONNECTION_ERROR);
|
||||||
resultFuture.completeExceptionally(cause);
|
resultFuture.completeExceptionally(cause);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ public class LoginSessionHandler implements MinecraftSessionHandler {
|
|||||||
requestedForwardingVersion = packet.content().readByte();
|
requestedForwardingVersion = packet.content().readByte();
|
||||||
}
|
}
|
||||||
ByteBuf forwardingData = createForwardingData(configuration.getForwardingSecret(),
|
ByteBuf forwardingData = createForwardingData(configuration.getForwardingSecret(),
|
||||||
serverConn.getPlayerRemoteAddressAsString(), serverConn.getPlayer(),
|
serverConn.getPlayerRemoteAddressAsString(), serverConn.player(),
|
||||||
requestedForwardingVersion);
|
requestedForwardingVersion);
|
||||||
|
|
||||||
LoginPluginResponse response = new LoginPluginResponse(packet.getId(), true, forwardingData);
|
LoginPluginResponse response = new LoginPluginResponse(packet.getId(), true, forwardingData);
|
||||||
@ -113,9 +113,9 @@ public class LoginSessionHandler implements MinecraftSessionHandler {
|
|||||||
this.server.getEventManager().fire(new ServerLoginPluginMessageEvent(serverConn, identifier,
|
this.server.getEventManager().fire(new ServerLoginPluginMessageEvent(serverConn, identifier,
|
||||||
contents, packet.getId()))
|
contents, packet.getId()))
|
||||||
.thenAcceptAsync(event -> {
|
.thenAcceptAsync(event -> {
|
||||||
if (event.getResult().isAllowed()) {
|
if (event.result().allowed()) {
|
||||||
mc.write(new LoginPluginResponse(packet.getId(), true, Unpooled
|
mc.write(new LoginPluginResponse(packet.getId(), true, Unpooled
|
||||||
.wrappedBuffer(event.getResult().getResponse())));
|
.wrappedBuffer(event.result().response())));
|
||||||
} else {
|
} else {
|
||||||
mc.write(new LoginPluginResponse(packet.getId(), false, Unpooled.EMPTY_BUFFER));
|
mc.write(new LoginPluginResponse(packet.getId(), false, Unpooled.EMPTY_BUFFER));
|
||||||
}
|
}
|
||||||
@ -126,7 +126,7 @@ public class LoginSessionHandler implements MinecraftSessionHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(Disconnect packet) {
|
public boolean handle(Disconnect packet) {
|
||||||
resultFuture.complete(ConnectionRequestResults.forDisconnect(packet, serverConn.getServer()));
|
resultFuture.complete(ConnectionRequestResults.forDisconnect(packet, serverConn.server()));
|
||||||
serverConn.disconnect();
|
serverConn.disconnect();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -142,7 +142,7 @@ public class LoginSessionHandler implements MinecraftSessionHandler {
|
|||||||
if (server.getConfiguration().getPlayerInfoForwardingMode() == PlayerInfoForwarding.MODERN
|
if (server.getConfiguration().getPlayerInfoForwardingMode() == PlayerInfoForwarding.MODERN
|
||||||
&& !informationForwarded) {
|
&& !informationForwarded) {
|
||||||
resultFuture.complete(ConnectionRequestResults.forDisconnect(MODERN_IP_FORWARDING_FAILURE,
|
resultFuture.complete(ConnectionRequestResults.forDisconnect(MODERN_IP_FORWARDING_FAILURE,
|
||||||
serverConn.getServer()));
|
serverConn.server()));
|
||||||
serverConn.disconnect();
|
serverConn.disconnect();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -159,7 +159,7 @@ public class LoginSessionHandler implements MinecraftSessionHandler {
|
|||||||
smc.write(new LoginAcknowledged());
|
smc.write(new LoginAcknowledged());
|
||||||
smc.setActiveSessionHandler(StateRegistry.CONFIG,
|
smc.setActiveSessionHandler(StateRegistry.CONFIG,
|
||||||
new ConfigSessionHandler(server, serverConn, resultFuture));
|
new ConfigSessionHandler(server, serverConn, resultFuture));
|
||||||
ConnectedPlayer player = serverConn.getPlayer();
|
ConnectedPlayer player = serverConn.player();
|
||||||
if (player.getClientSettingsPacket() != null) {
|
if (player.getClientSettingsPacket() != null) {
|
||||||
smc.write(player.getClientSettingsPacket());
|
smc.write(player.getClientSettingsPacket());
|
||||||
}
|
}
|
||||||
@ -200,14 +200,14 @@ public class LoginSessionHandler implements MinecraftSessionHandler {
|
|||||||
// Ensure we are in range
|
// Ensure we are in range
|
||||||
requested = Math.min(requested, VelocityConstants.MODERN_FORWARDING_MAX_VERSION);
|
requested = Math.min(requested, VelocityConstants.MODERN_FORWARDING_MAX_VERSION);
|
||||||
if (requested > VelocityConstants.MODERN_FORWARDING_DEFAULT) {
|
if (requested > VelocityConstants.MODERN_FORWARDING_DEFAULT) {
|
||||||
if (player.getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_19_3) >= 0) {
|
if (player.protocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_19_3) >= 0) {
|
||||||
return requested >= VelocityConstants.MODERN_LAZY_SESSION
|
return requested >= VelocityConstants.MODERN_LAZY_SESSION
|
||||||
? VelocityConstants.MODERN_LAZY_SESSION
|
? VelocityConstants.MODERN_LAZY_SESSION
|
||||||
: VelocityConstants.MODERN_FORWARDING_DEFAULT;
|
: VelocityConstants.MODERN_FORWARDING_DEFAULT;
|
||||||
}
|
}
|
||||||
if (player.getIdentifiedKey() != null) {
|
if (player.identifiedKey() != null) {
|
||||||
// No enhanced switch on java 11
|
// No enhanced switch on java 11
|
||||||
switch (player.getIdentifiedKey().getKeyRevision()) {
|
switch (player.identifiedKey().revision()) {
|
||||||
case GENERIC_V1:
|
case GENERIC_V1:
|
||||||
return VelocityConstants.MODERN_FORWARDING_WITH_KEY;
|
return VelocityConstants.MODERN_FORWARDING_WITH_KEY;
|
||||||
// Since V2 is not backwards compatible we have to throw the key if v2 and requested is v1
|
// Since V2 is not backwards compatible we have to throw the key if v2 and requested is v1
|
||||||
@ -233,15 +233,15 @@ public class LoginSessionHandler implements MinecraftSessionHandler {
|
|||||||
|
|
||||||
ProtocolUtils.writeVarInt(forwarded, actualVersion);
|
ProtocolUtils.writeVarInt(forwarded, actualVersion);
|
||||||
ProtocolUtils.writeString(forwarded, address);
|
ProtocolUtils.writeString(forwarded, address);
|
||||||
ProtocolUtils.writeUuid(forwarded, player.getGameProfile().getId());
|
ProtocolUtils.writeUuid(forwarded, player.profile().uuid());
|
||||||
ProtocolUtils.writeString(forwarded, player.getGameProfile().getName());
|
ProtocolUtils.writeString(forwarded, player.profile().name());
|
||||||
ProtocolUtils.writeProperties(forwarded, player.getGameProfile().getProperties());
|
ProtocolUtils.writeProperties(forwarded, player.profile().properties());
|
||||||
|
|
||||||
// This serves as additional redundancy. The key normally is stored in the
|
// This serves as additional redundancy. The key normally is stored in the
|
||||||
// login start to the server, but some setups require this.
|
// login start to the server, but some setups require this.
|
||||||
if (actualVersion >= VelocityConstants.MODERN_FORWARDING_WITH_KEY
|
if (actualVersion >= VelocityConstants.MODERN_FORWARDING_WITH_KEY
|
||||||
&& actualVersion < VelocityConstants.MODERN_LAZY_SESSION) {
|
&& actualVersion < VelocityConstants.MODERN_LAZY_SESSION) {
|
||||||
IdentifiedKey key = player.getIdentifiedKey();
|
IdentifiedKey key = player.identifiedKey();
|
||||||
assert key != null;
|
assert key != null;
|
||||||
ProtocolUtils.writePlayerKey(forwarded, key);
|
ProtocolUtils.writePlayerKey(forwarded, key);
|
||||||
|
|
||||||
@ -249,9 +249,9 @@ public class LoginSessionHandler implements MinecraftSessionHandler {
|
|||||||
// assigned UUID. Doing that breaks the signatures anyway but the server
|
// assigned UUID. Doing that breaks the signatures anyway but the server
|
||||||
// should be able to verify the key independently.
|
// should be able to verify the key independently.
|
||||||
if (actualVersion >= VelocityConstants.MODERN_FORWARDING_WITH_KEY_V2) {
|
if (actualVersion >= VelocityConstants.MODERN_FORWARDING_WITH_KEY_V2) {
|
||||||
if (key.getSignatureHolder() != null) {
|
if (key.signatureHolder() != null) {
|
||||||
forwarded.writeBoolean(true);
|
forwarded.writeBoolean(true);
|
||||||
ProtocolUtils.writeUuid(forwarded, key.getSignatureHolder());
|
ProtocolUtils.writeUuid(forwarded, key.signatureHolder());
|
||||||
} else {
|
} else {
|
||||||
// Should only not be provided if the player was connected
|
// Should only not be provided if the player was connected
|
||||||
// as offline-mode and the signer UUID was not backfilled
|
// as offline-mode and the signer UUID was not backfilled
|
||||||
|
@ -69,7 +69,7 @@ public class TransitionSessionHandler implements MinecraftSessionHandler {
|
|||||||
this.serverConn = serverConn;
|
this.serverConn = serverConn;
|
||||||
this.resultFuture = resultFuture;
|
this.resultFuture = resultFuture;
|
||||||
this.bungeecordMessageResponder = new BungeeCordMessageResponder(server,
|
this.bungeecordMessageResponder = new BungeeCordMessageResponder(server,
|
||||||
serverConn.getPlayer());
|
serverConn.player());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -91,10 +91,10 @@ public class TransitionSessionHandler implements MinecraftSessionHandler {
|
|||||||
@Override
|
@Override
|
||||||
public boolean handle(JoinGame packet) {
|
public boolean handle(JoinGame packet) {
|
||||||
MinecraftConnection smc = serverConn.ensureConnected();
|
MinecraftConnection smc = serverConn.ensureConnected();
|
||||||
RegisteredServer previousServer = serverConn.getPreviousServer().orElse(null);
|
RegisteredServer previousServer = serverConn.previousServer().orElse(null);
|
||||||
VelocityServerConnection existingConnection = serverConn.getPlayer().getConnectedServer();
|
VelocityServerConnection existingConnection = serverConn.player().getConnectedServer();
|
||||||
|
|
||||||
final ConnectedPlayer player = serverConn.getPlayer();
|
final ConnectedPlayer player = serverConn.player();
|
||||||
|
|
||||||
if (existingConnection != null) {
|
if (existingConnection != null) {
|
||||||
// Shut down the existing server connection.
|
// Shut down the existing server connection.
|
||||||
@ -111,7 +111,7 @@ public class TransitionSessionHandler implements MinecraftSessionHandler {
|
|||||||
// The goods are in hand! We got JoinGame. Let's transition completely to the new state.
|
// The goods are in hand! We got JoinGame. Let's transition completely to the new state.
|
||||||
smc.setAutoReading(false);
|
smc.setAutoReading(false);
|
||||||
server.getEventManager()
|
server.getEventManager()
|
||||||
.fire(new ServerConnectedEvent(player, serverConn.getServer(), previousServer))
|
.fire(new ServerConnectedEvent(player, serverConn.server(), previousServer))
|
||||||
.thenRunAsync(() -> {
|
.thenRunAsync(() -> {
|
||||||
// Make sure we can still transition (player might have disconnected here).
|
// Make sure we can still transition (player might have disconnected here).
|
||||||
if (!serverConn.isActive()) {
|
if (!serverConn.isActive()) {
|
||||||
@ -142,7 +142,7 @@ public class TransitionSessionHandler implements MinecraftSessionHandler {
|
|||||||
smc.setAutoReading(true);
|
smc.setAutoReading(true);
|
||||||
|
|
||||||
// Now set the connected server.
|
// Now set the connected server.
|
||||||
serverConn.getPlayer().setConnectedServer(serverConn);
|
serverConn.player().setConnectedServer(serverConn);
|
||||||
|
|
||||||
// Send client settings. In 1.20.2+ this is done in the config state.
|
// Send client settings. In 1.20.2+ this is done in the config state.
|
||||||
if (smc.getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_20_2) < 0
|
if (smc.getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_20_2) < 0
|
||||||
@ -153,11 +153,11 @@ public class TransitionSessionHandler implements MinecraftSessionHandler {
|
|||||||
// We're done! :)
|
// We're done! :)
|
||||||
server.getEventManager().fireAndForget(new ServerPostConnectEvent(player,
|
server.getEventManager().fireAndForget(new ServerPostConnectEvent(player,
|
||||||
previousServer));
|
previousServer));
|
||||||
resultFuture.complete(ConnectionRequestResults.successful(serverConn.getServer()));
|
resultFuture.complete(ConnectionRequestResults.successful(serverConn.server()));
|
||||||
}, smc.eventLoop()).exceptionally(exc -> {
|
}, smc.eventLoop()).exceptionally(exc -> {
|
||||||
logger.error("Unable to switch to new server {} for {}",
|
logger.error("Unable to switch to new server {} for {}",
|
||||||
serverConn.getServerInfo().getName(),
|
serverConn.serverInfo().name(),
|
||||||
player.getUsername(), exc);
|
player.username(), exc);
|
||||||
player.disconnect(ConnectionMessages.INTERNAL_SERVER_CONNECTION_ERROR);
|
player.disconnect(ConnectionMessages.INTERNAL_SERVER_CONNECTION_ERROR);
|
||||||
resultFuture.completeExceptionally(exc);
|
resultFuture.completeExceptionally(exc);
|
||||||
return null;
|
return null;
|
||||||
@ -176,9 +176,9 @@ public class TransitionSessionHandler implements MinecraftSessionHandler {
|
|||||||
if (connection.getType() == ConnectionTypes.LEGACY_FORGE
|
if (connection.getType() == ConnectionTypes.LEGACY_FORGE
|
||||||
&& !serverConn.getPhase().consideredComplete()) {
|
&& !serverConn.getPhase().consideredComplete()) {
|
||||||
resultFuture.complete(ConnectionRequestResults.forUnsafeDisconnect(packet,
|
resultFuture.complete(ConnectionRequestResults.forUnsafeDisconnect(packet,
|
||||||
serverConn.getServer()));
|
serverConn.server()));
|
||||||
} else {
|
} else {
|
||||||
resultFuture.complete(ConnectionRequestResults.forDisconnect(packet, serverConn.getServer()));
|
resultFuture.complete(ConnectionRequestResults.forDisconnect(packet, serverConn.server()));
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -191,23 +191,23 @@ public class TransitionSessionHandler implements MinecraftSessionHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// We always need to handle plugin messages, for Forge compatibility.
|
// We always need to handle plugin messages, for Forge compatibility.
|
||||||
if (serverConn.getPhase().handle(serverConn, serverConn.getPlayer(), packet)) {
|
if (serverConn.getPhase().handle(serverConn, serverConn.player(), packet)) {
|
||||||
// Handled, but check the server connection phase.
|
// Handled, but check the server connection phase.
|
||||||
if (serverConn.getPhase() == HELLO) {
|
if (serverConn.getPhase() == HELLO) {
|
||||||
VelocityServerConnection existingConnection = serverConn.getPlayer().getConnectedServer();
|
VelocityServerConnection existingConnection = serverConn.player().getConnectedServer();
|
||||||
if (existingConnection != null && existingConnection.getPhase() != IN_TRANSITION) {
|
if (existingConnection != null && existingConnection.getPhase() != IN_TRANSITION) {
|
||||||
// Indicate that this connection is "in transition"
|
// Indicate that this connection is "in transition"
|
||||||
existingConnection.setConnectionPhase(IN_TRANSITION);
|
existingConnection.setConnectionPhase(IN_TRANSITION);
|
||||||
|
|
||||||
// Tell the player that we're leaving and we just aren't coming back.
|
// Tell the player that we're leaving and we just aren't coming back.
|
||||||
existingConnection.getPhase().onDepartForNewServer(existingConnection,
|
existingConnection.getPhase().onDepartForNewServer(existingConnection,
|
||||||
serverConn.getPlayer());
|
serverConn.player());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
serverConn.getPlayer().getConnection().write(packet.retain());
|
serverConn.player().getConnection().write(packet.retain());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,7 +102,7 @@ public class VelocityServerConnection implements MinecraftConnectionAssociation,
|
|||||||
CompletableFuture<Impl> result = new CompletableFuture<>();
|
CompletableFuture<Impl> result = new CompletableFuture<>();
|
||||||
// Note: we use the event loop for the connection the player is on. This reduces context
|
// Note: we use the event loop for the connection the player is on. This reduces context
|
||||||
// switches.
|
// switches.
|
||||||
SocketAddress destinationAddress = registeredServer.getServerInfo().getAddress();
|
SocketAddress destinationAddress = registeredServer.serverInfo().address();
|
||||||
server.createBootstrap(proxyPlayer.getConnection().eventLoop(), destinationAddress)
|
server.createBootstrap(proxyPlayer.getConnection().eventLoop(), destinationAddress)
|
||||||
.handler(server.getBackendChannelInitializer())
|
.handler(server.getBackendChannelInitializer())
|
||||||
.connect(destinationAddress)
|
.connect(destinationAddress)
|
||||||
@ -135,7 +135,7 @@ public class VelocityServerConnection implements MinecraftConnectionAssociation,
|
|||||||
}
|
}
|
||||||
|
|
||||||
String getPlayerRemoteAddressAsString() {
|
String getPlayerRemoteAddressAsString() {
|
||||||
final SocketAddress address = proxyPlayer.getRemoteAddress();
|
final SocketAddress address = proxyPlayer.remoteAddress();
|
||||||
if (!(address instanceof InetSocketAddress)) {
|
if (!(address instanceof InetSocketAddress)) {
|
||||||
return address.toString();
|
return address.toString();
|
||||||
}
|
}
|
||||||
@ -148,9 +148,9 @@ public class VelocityServerConnection implements MinecraftConnectionAssociation,
|
|||||||
}
|
}
|
||||||
|
|
||||||
private String getHandshakeRemoteAddress() {
|
private String getHandshakeRemoteAddress() {
|
||||||
return proxyPlayer.getVirtualHost()
|
return proxyPlayer.virtualHost()
|
||||||
.map(InetSocketAddress::getHostString)
|
.map(InetSocketAddress::getHostString)
|
||||||
.or(() -> Optional.of(registeredServer.getServerInfo().getAddress())
|
.or(() -> Optional.of(registeredServer.serverInfo().address())
|
||||||
.filter(addr -> addr instanceof InetSocketAddress)
|
.filter(addr -> addr instanceof InetSocketAddress)
|
||||||
.map(addr -> ((InetSocketAddress) addr).getHostString()))
|
.map(addr -> ((InetSocketAddress) addr).getHostString()))
|
||||||
.orElse("");
|
.orElse("");
|
||||||
@ -160,7 +160,7 @@ public class VelocityServerConnection implements MinecraftConnectionAssociation,
|
|||||||
// BungeeCord IP forwarding is simply a special injection after the "address" in the handshake,
|
// BungeeCord IP forwarding is simply a special injection after the "address" in the handshake,
|
||||||
// separated by \0 (the null byte). In order, you send the original host, the player's IP, their
|
// separated by \0 (the null byte). In order, you send the original host, the player's IP, their
|
||||||
// UUID (undashed), and if you are in online-mode, their login properties (from Mojang).
|
// UUID (undashed), and if you are in online-mode, their login properties (from Mojang).
|
||||||
SocketAddress playerRemoteAddress = proxyPlayer.getRemoteAddress();
|
SocketAddress playerRemoteAddress = proxyPlayer.remoteAddress();
|
||||||
if (!(playerRemoteAddress instanceof InetSocketAddress)) {
|
if (!(playerRemoteAddress instanceof InetSocketAddress)) {
|
||||||
return getHandshakeRemoteAddress();
|
return getHandshakeRemoteAddress();
|
||||||
}
|
}
|
||||||
@ -169,10 +169,10 @@ public class VelocityServerConnection implements MinecraftConnectionAssociation,
|
|||||||
.append('\0')
|
.append('\0')
|
||||||
.append(getPlayerRemoteAddressAsString())
|
.append(getPlayerRemoteAddressAsString())
|
||||||
.append('\0')
|
.append('\0')
|
||||||
.append(proxyPlayer.getGameProfile().getUndashedId())
|
.append(proxyPlayer.profile().undashedId())
|
||||||
.append('\0');
|
.append('\0');
|
||||||
GENERAL_GSON
|
GENERAL_GSON
|
||||||
.toJson(propertiesTransform.apply(proxyPlayer.getGameProfile().getProperties()), data);
|
.toJson(propertiesTransform.apply(proxyPlayer.profile().properties()), data);
|
||||||
return data.toString();
|
return data.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -208,7 +208,7 @@ public class VelocityServerConnection implements MinecraftConnectionAssociation,
|
|||||||
handshake.setServerAddress(getHandshakeRemoteAddress());
|
handshake.setServerAddress(getHandshakeRemoteAddress());
|
||||||
}
|
}
|
||||||
|
|
||||||
SocketAddress destinationAddr = registeredServer.getServerInfo().getAddress();
|
SocketAddress destinationAddr = registeredServer.serverInfo().address();
|
||||||
if (destinationAddr instanceof InetSocketAddress) {
|
if (destinationAddr instanceof InetSocketAddress) {
|
||||||
handshake.setPort(((InetSocketAddress) destinationAddr).getPort());
|
handshake.setPort(((InetSocketAddress) destinationAddr).getPort());
|
||||||
}
|
}
|
||||||
@ -216,11 +216,11 @@ public class VelocityServerConnection implements MinecraftConnectionAssociation,
|
|||||||
|
|
||||||
mc.setProtocolVersion(protocolVersion);
|
mc.setProtocolVersion(protocolVersion);
|
||||||
mc.setActiveSessionHandler(StateRegistry.LOGIN);
|
mc.setActiveSessionHandler(StateRegistry.LOGIN);
|
||||||
if (proxyPlayer.getIdentifiedKey() == null
|
if (proxyPlayer.identifiedKey() == null
|
||||||
&& proxyPlayer.getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_19_3) >= 0) {
|
&& proxyPlayer.protocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_19_3) >= 0) {
|
||||||
mc.delayedWrite(new ServerLogin(proxyPlayer.getUsername(), proxyPlayer.getUniqueId()));
|
mc.delayedWrite(new ServerLogin(proxyPlayer.username(), proxyPlayer.uuid()));
|
||||||
} else {
|
} else {
|
||||||
mc.delayedWrite(new ServerLogin(proxyPlayer.getUsername(), proxyPlayer.getIdentifiedKey()));
|
mc.delayedWrite(new ServerLogin(proxyPlayer.username(), proxyPlayer.identifiedKey()));
|
||||||
}
|
}
|
||||||
mc.flush();
|
mc.flush();
|
||||||
}
|
}
|
||||||
@ -243,22 +243,22 @@ public class VelocityServerConnection implements MinecraftConnectionAssociation,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VelocityRegisteredServer getServer() {
|
public VelocityRegisteredServer server() {
|
||||||
return registeredServer;
|
return registeredServer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<RegisteredServer> getPreviousServer() {
|
public Optional<RegisteredServer> previousServer() {
|
||||||
return Optional.ofNullable(this.previousServer);
|
return Optional.ofNullable(this.previousServer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ServerInfo getServerInfo() {
|
public ServerInfo serverInfo() {
|
||||||
return registeredServer.getServerInfo();
|
return registeredServer.serverInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ConnectedPlayer getPlayer() {
|
public ConnectedPlayer player() {
|
||||||
return proxyPlayer;
|
return proxyPlayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -275,8 +275,8 @@ public class VelocityServerConnection implements MinecraftConnectionAssociation,
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "[server connection] " + proxyPlayer.getGameProfile().getName() + " -> "
|
return "[server connection] " + proxyPlayer.profile().name() + " -> "
|
||||||
+ registeredServer.getServerInfo().getName();
|
+ registeredServer.serverInfo().name();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -297,7 +297,7 @@ public class VelocityServerConnection implements MinecraftConnectionAssociation,
|
|||||||
|
|
||||||
MinecraftConnection mc = ensureConnected();
|
MinecraftConnection mc = ensureConnected();
|
||||||
|
|
||||||
PluginMessage message = new PluginMessage(identifier.getId(), data);
|
PluginMessage message = new PluginMessage(identifier.id(), data);
|
||||||
mc.write(message);
|
mc.write(message);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -52,6 +52,7 @@ import net.kyori.adventure.text.format.NamedTextColor;
|
|||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A session handler that is activated to complete the login phase.
|
* A session handler that is activated to complete the login phase.
|
||||||
@ -93,9 +94,9 @@ public class AuthSessionHandler implements MinecraftSessionHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Initiate a regular connection and move over to it.
|
// Initiate a regular connection and move over to it.
|
||||||
ConnectedPlayer player = new ConnectedPlayer(server, profileEvent.getGameProfile(),
|
ConnectedPlayer player = new ConnectedPlayer(server, profileEvent.profileToUse(),
|
||||||
mcConnection, inbound.getVirtualHost().orElse(null), onlineMode,
|
mcConnection, inbound.virtualHost().orElse(null), onlineMode,
|
||||||
inbound.getIdentifiedKey());
|
inbound.identifiedKey());
|
||||||
this.connectedPlayer = player;
|
this.connectedPlayer = player;
|
||||||
if (!server.canRegisterConnection(player)) {
|
if (!server.canRegisterConnection(player)) {
|
||||||
player.disconnect0(
|
player.disconnect0(
|
||||||
@ -117,8 +118,8 @@ public class AuthSessionHandler implements MinecraftSessionHandler {
|
|||||||
"A plugin permission provider {} provided an invalid permission function"
|
"A plugin permission provider {} provided an invalid permission function"
|
||||||
+ " for player {}. This is a bug in the plugin, not in Velocity. Falling"
|
+ " for player {}. This is a bug in the plugin, not in Velocity. Falling"
|
||||||
+ " back to the default permission function.",
|
+ " back to the default permission function.",
|
||||||
event.getProvider().getClass().getName(),
|
event.provider().getClass().getName(),
|
||||||
player.getUsername());
|
player.username());
|
||||||
} else {
|
} else {
|
||||||
player.setPermissionChecker(checker);
|
player.setPermissionChecker(checker);
|
||||||
}
|
}
|
||||||
@ -138,32 +139,32 @@ public class AuthSessionHandler implements MinecraftSessionHandler {
|
|||||||
mcConnection.setCompressionThreshold(threshold);
|
mcConnection.setCompressionThreshold(threshold);
|
||||||
}
|
}
|
||||||
VelocityConfiguration configuration = server.getConfiguration();
|
VelocityConfiguration configuration = server.getConfiguration();
|
||||||
UUID playerUniqueId = player.getUniqueId();
|
UUID playerUniqueId = player.uuid();
|
||||||
if (configuration.getPlayerInfoForwardingMode() == PlayerInfoForwarding.NONE) {
|
if (configuration.getPlayerInfoForwardingMode() == PlayerInfoForwarding.NONE) {
|
||||||
playerUniqueId = UuidUtils.generateOfflinePlayerUuid(player.getUsername());
|
playerUniqueId = UuidUtils.generateOfflinePlayerUuid(player.username());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player.getIdentifiedKey() != null) {
|
if (player.identifiedKey() != null) {
|
||||||
IdentifiedKey playerKey = player.getIdentifiedKey();
|
IdentifiedKey playerKey = player.identifiedKey();
|
||||||
if (playerKey.getSignatureHolder() == null) {
|
if (playerKey.signatureHolder() == null) {
|
||||||
if (playerKey instanceof IdentifiedKeyImpl) {
|
if (playerKey instanceof IdentifiedKeyImpl) {
|
||||||
IdentifiedKeyImpl unlinkedKey = (IdentifiedKeyImpl) playerKey;
|
IdentifiedKeyImpl unlinkedKey = (IdentifiedKeyImpl) playerKey;
|
||||||
// Failsafe
|
// Failsafe
|
||||||
if (!unlinkedKey.internalAddHolder(player.getUniqueId())) {
|
if (!unlinkedKey.internalAddHolder(player.uuid())) {
|
||||||
if (onlineMode) {
|
if (onlineMode) {
|
||||||
inbound.disconnect(
|
inbound.disconnect(
|
||||||
Component.translatable("multiplayer.disconnect.invalid_public_key"));
|
Component.translatable("multiplayer.disconnect.invalid_public_key"));
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
logger.warn("Key for player " + player.getUsername() + " could not be verified!");
|
logger.warn("Key for player " + player.username() + " could not be verified!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
logger.warn("A custom key type has been set for player " + player.getUsername());
|
logger.warn("A custom key type has been set for player " + player.username());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!Objects.equals(playerKey.getSignatureHolder(), playerUniqueId)) {
|
if (!Objects.equals(playerKey.signatureHolder(), playerUniqueId)) {
|
||||||
logger.warn("UUID for Player " + player.getUsername() + " mismatches! "
|
logger.warn("UUID for Player " + player.username() + " mismatches! "
|
||||||
+ "Chat/Commands signatures will not work correctly for this player!");
|
+ "Chat/Commands signatures will not work correctly for this player!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -201,9 +202,9 @@ public class AuthSessionHandler implements MinecraftSessionHandler {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Optional<Component> reason = event.getResult().getReasonComponent();
|
@Nullable Component explanation = event.result().explanation();
|
||||||
if (reason.isPresent()) {
|
if (explanation != null) {
|
||||||
player.disconnect0(reason.get(), true);
|
player.disconnect0(explanation, true);
|
||||||
} else {
|
} else {
|
||||||
if (!server.registerConnection(player)) {
|
if (!server.registerConnection(player)) {
|
||||||
player.disconnect0(Component.translatable("velocity.error.already-connected-proxy"),
|
player.disconnect0(Component.translatable("velocity.error.already-connected-proxy"),
|
||||||
@ -212,13 +213,13 @@ public class AuthSessionHandler implements MinecraftSessionHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ServerLoginSuccess success = new ServerLoginSuccess();
|
ServerLoginSuccess success = new ServerLoginSuccess();
|
||||||
success.setUsername(player.getUsername());
|
success.setUsername(player.username());
|
||||||
success.setProperties(player.getGameProfileProperties());
|
success.setProperties(player.profileProperties());
|
||||||
success.setUuid(player.getUniqueId());
|
success.setUuid(player.uuid());
|
||||||
mcConnection.write(success);
|
mcConnection.write(success);
|
||||||
|
|
||||||
loginState = State.SUCCESS_SENT;
|
loginState = State.SUCCESS_SENT;
|
||||||
if (inbound.getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_20_2) < 0) {
|
if (inbound.protocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_20_2) < 0) {
|
||||||
loginState = State.ACKNOWLEDGED;
|
loginState = State.ACKNOWLEDGED;
|
||||||
mcConnection.setActiveSessionHandler(StateRegistry.PLAY,
|
mcConnection.setActiveSessionHandler(StateRegistry.PLAY,
|
||||||
new InitialConnectSessionHandler(player, server));
|
new InitialConnectSessionHandler(player, server));
|
||||||
|
@ -116,10 +116,10 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
this.player = player;
|
this.player = player;
|
||||||
this.server = server;
|
this.server = server;
|
||||||
|
|
||||||
if (this.player.getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_19_3) >= 0) {
|
if (this.player.protocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_19_3) >= 0) {
|
||||||
this.chatHandler = new SessionChatHandler(this.player, this.server);
|
this.chatHandler = new SessionChatHandler(this.player, this.server);
|
||||||
this.commandHandler = new SessionCommandHandler(this.player, this.server);
|
this.commandHandler = new SessionCommandHandler(this.player, this.server);
|
||||||
} else if (this.player.getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_19) >= 0) {
|
} else if (this.player.protocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_19) >= 0) {
|
||||||
this.chatHandler = new KeyedChatHandler(this.server, this.player);
|
this.chatHandler = new KeyedChatHandler(this.server, this.player);
|
||||||
this.commandHandler = new KeyedCommandHandler(this.player, this.server);
|
this.commandHandler = new KeyedCommandHandler(this.player, this.server);
|
||||||
} else {
|
} else {
|
||||||
@ -154,9 +154,9 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
public void activated() {
|
public void activated() {
|
||||||
configSwitchFuture = new CompletableFuture<>();
|
configSwitchFuture = new CompletableFuture<>();
|
||||||
Collection<String> channels =
|
Collection<String> channels =
|
||||||
server.getChannelRegistrar().getChannelsForProtocol(player.getProtocolVersion());
|
server.getChannelRegistrar().getChannelsForProtocol(player.protocolVersion());
|
||||||
if (!channels.isEmpty()) {
|
if (!channels.isEmpty()) {
|
||||||
PluginMessage register = constructChannelsPacket(player.getProtocolVersion(), channels);
|
PluginMessage register = constructChannelsPacket(player.protocolVersion(), channels);
|
||||||
player.getConnection().write(register);
|
player.getConnection().write(register);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -320,7 +320,7 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
player.setClientBrand(brand);
|
player.setClientBrand(brand);
|
||||||
backendConn.write(
|
backendConn.write(
|
||||||
PluginMessageUtil.rewriteMinecraftBrand(packet, server.getVersion(),
|
PluginMessageUtil.rewriteMinecraftBrand(packet, server.getVersion(),
|
||||||
player.getProtocolVersion()));
|
player.protocolVersion()));
|
||||||
} else if (BungeeCordMessageResponder.isBungeeCordMessage(packet)) {
|
} else if (BungeeCordMessageResponder.isBungeeCordMessage(packet)) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
@ -355,7 +355,7 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
byte[] copy = ByteBufUtil.getBytes(packet.content());
|
byte[] copy = ByteBufUtil.getBytes(packet.content());
|
||||||
PluginMessageEvent event = new PluginMessageEvent(player, serverConn, id, copy);
|
PluginMessageEvent event = new PluginMessageEvent(player, serverConn, id, copy);
|
||||||
server.getEventManager().fire(event).thenAcceptAsync(pme -> {
|
server.getEventManager().fire(event).thenAcceptAsync(pme -> {
|
||||||
if (pme.getResult().isAllowed()) {
|
if (pme.result().allowed()) {
|
||||||
PluginMessage message = new PluginMessage(packet.getChannel(),
|
PluginMessage message = new PluginMessage(packet.getChannel(),
|
||||||
Unpooled.wrappedBuffer(copy));
|
Unpooled.wrappedBuffer(copy));
|
||||||
if (!player.getPhase().consideredComplete() || !serverConn.getPhase()
|
if (!player.getPhase().consideredComplete() || !serverConn.getPhase()
|
||||||
@ -486,7 +486,7 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
spawned = false;
|
spawned = false;
|
||||||
serverBossBars.clear();
|
serverBossBars.clear();
|
||||||
player.clearPlayerListHeaderAndFooterSilent();
|
player.clearPlayerListHeaderAndFooterSilent();
|
||||||
player.getTabList().clearAllSilent();
|
player.tabList().clearAllSilent();
|
||||||
}
|
}
|
||||||
|
|
||||||
player.switchToConfigState();
|
player.switchToConfigState();
|
||||||
@ -513,7 +513,7 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
player.getPhase().onFirstJoin(player);
|
player.getPhase().onFirstJoin(player);
|
||||||
} else {
|
} else {
|
||||||
// Clear tab list to avoid duplicate entries
|
// Clear tab list to avoid duplicate entries
|
||||||
player.getTabList().clearAll();
|
player.tabList().clearAll();
|
||||||
|
|
||||||
// The player is switching from a server already, so we need to tell the client to change
|
// The player is switching from a server already, so we need to tell the client to change
|
||||||
// entity IDs and send new dimension information.
|
// entity IDs and send new dimension information.
|
||||||
@ -551,10 +551,10 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Clear any title from the previous server.
|
// Clear any title from the previous server.
|
||||||
if (player.getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_8) >= 0) {
|
if (player.protocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_8) >= 0) {
|
||||||
player.getConnection().delayedWrite(
|
player.getConnection().delayedWrite(
|
||||||
GenericTitlePacket.constructTitlePacket(GenericTitlePacket.ActionType.RESET,
|
GenericTitlePacket.constructTitlePacket(GenericTitlePacket.ActionType.RESET,
|
||||||
player.getProtocolVersion()));
|
player.protocolVersion()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Flush everything
|
// Flush everything
|
||||||
@ -574,7 +574,7 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
// improving compatibility with mods.
|
// improving compatibility with mods.
|
||||||
final Respawn respawn = Respawn.fromJoinGame(joinGame);
|
final Respawn respawn = Respawn.fromJoinGame(joinGame);
|
||||||
|
|
||||||
if (player.getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_16) < 0) {
|
if (player.protocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_16) < 0) {
|
||||||
// Before Minecraft 1.16, we could not switch to the same dimension without sending an
|
// Before Minecraft 1.16, we could not switch to the same dimension without sending an
|
||||||
// additional respawn. On older versions of Minecraft this forces the client to perform
|
// additional respawn. On older versions of Minecraft this forces the client to perform
|
||||||
// garbage collection which adds additional latency.
|
// garbage collection which adds additional latency.
|
||||||
@ -616,7 +616,7 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
|
|
||||||
String commandLabel = command.substring(0, commandEndPosition);
|
String commandLabel = command.substring(0, commandEndPosition);
|
||||||
if (!server.getCommandManager().hasCommand(commandLabel)) {
|
if (!server.getCommandManager().hasCommand(commandLabel)) {
|
||||||
if (player.getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_13) < 0) {
|
if (player.protocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_13) < 0) {
|
||||||
// Outstanding tab completes are recorded for use with 1.12 clients and below to provide
|
// Outstanding tab completes are recorded for use with 1.12 clients and below to provide
|
||||||
// additional tab completion support.
|
// additional tab completion support.
|
||||||
outstandingTabComplete = packet;
|
outstandingTabComplete = packet;
|
||||||
@ -658,7 +658,7 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean handleRegularTabComplete(TabCompleteRequest packet) {
|
private boolean handleRegularTabComplete(TabCompleteRequest packet) {
|
||||||
if (player.getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_13) < 0) {
|
if (player.protocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_13) < 0) {
|
||||||
// Outstanding tab completes are recorded for use with 1.12 clients and below to provide
|
// Outstanding tab completes are recorded for use with 1.12 clients and below to provide
|
||||||
// additional tab completion support.
|
// additional tab completion support.
|
||||||
outstandingTabComplete = packet;
|
outstandingTabComplete = packet;
|
||||||
@ -690,7 +690,7 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
server.getCommandManager().offerBrigadierSuggestions(player, command)
|
server.getCommandManager().offerBrigadierSuggestions(player, command)
|
||||||
.thenAcceptAsync(offers -> {
|
.thenAcceptAsync(offers -> {
|
||||||
boolean legacy =
|
boolean legacy =
|
||||||
player.getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_13) < 0;
|
player.protocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_13) < 0;
|
||||||
try {
|
try {
|
||||||
for (Suggestion suggestion : offers.getList()) {
|
for (Suggestion suggestion : offers.getList()) {
|
||||||
String offer = suggestion.getText();
|
String offer = suggestion.getText();
|
||||||
@ -709,7 +709,7 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
player.getConnection().write(response);
|
player.getConnection().write(response);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("Unable to provide tab list completions for {} for command '{}'",
|
logger.error("Unable to provide tab list completions for {} for command '{}'",
|
||||||
player.getUsername(), command,
|
player.username(), command,
|
||||||
e);
|
e);
|
||||||
}
|
}
|
||||||
}, player.getConnection().eventLoop()).exceptionally((ex) -> {
|
}, player.getConnection().eventLoop()).exceptionally((ex) -> {
|
||||||
@ -729,7 +729,7 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
server.getEventManager().fire(new TabCompleteEvent(player, request.getCommand(), offers))
|
server.getEventManager().fire(new TabCompleteEvent(player, request.getCommand(), offers))
|
||||||
.thenAcceptAsync(e -> {
|
.thenAcceptAsync(e -> {
|
||||||
response.getOffers().clear();
|
response.getOffers().clear();
|
||||||
for (String s : e.getSuggestions()) {
|
for (String s : e.suggestions()) {
|
||||||
response.getOffers().add(new Offer(s));
|
response.getOffers().add(new Offer(s));
|
||||||
}
|
}
|
||||||
player.getConnection().write(response);
|
player.getConnection().write(response);
|
||||||
|
@ -42,7 +42,7 @@ public class ClientSettingsWrapper implements PlayerSettings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Locale getLocale() {
|
public Locale locale() {
|
||||||
if (locale == null) {
|
if (locale == null) {
|
||||||
locale = Locale.forLanguageTag(settings.getLocale().replaceAll("_", "-"));
|
locale = Locale.forLanguageTag(settings.getLocale().replaceAll("_", "-"));
|
||||||
}
|
}
|
||||||
@ -50,12 +50,12 @@ public class ClientSettingsWrapper implements PlayerSettings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte getViewDistance() {
|
public byte viewDistance() {
|
||||||
return settings.getViewDistance();
|
return settings.getViewDistance();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ChatMode getChatMode() {
|
public ChatMode chatMode() {
|
||||||
int chat = settings.getChatVisibility();
|
int chat = settings.getChatVisibility();
|
||||||
if (chat < 0 || chat > 2) {
|
if (chat < 0 || chat > 2) {
|
||||||
return ChatMode.SHOWN;
|
return ChatMode.SHOWN;
|
||||||
@ -69,12 +69,12 @@ public class ClientSettingsWrapper implements PlayerSettings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SkinParts getSkinParts() {
|
public SkinParts skinParts() {
|
||||||
return parts;
|
return parts;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MainHand getMainHand() {
|
public MainHand mainHand() {
|
||||||
return settings.getMainHand() == 1 ? MainHand.RIGHT : MainHand.LEFT;
|
return settings.getMainHand() == 1 ? MainHand.RIGHT : MainHand.LEFT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,7 +51,6 @@ import com.velocitypowered.proxy.VelocityServer;
|
|||||||
import com.velocitypowered.proxy.connection.MinecraftConnection;
|
import com.velocitypowered.proxy.connection.MinecraftConnection;
|
||||||
import com.velocitypowered.proxy.connection.MinecraftConnectionAssociation;
|
import com.velocitypowered.proxy.connection.MinecraftConnectionAssociation;
|
||||||
import com.velocitypowered.proxy.connection.backend.VelocityServerConnection;
|
import com.velocitypowered.proxy.connection.backend.VelocityServerConnection;
|
||||||
import com.velocitypowered.proxy.connection.player.VelocityResourcePackInfo;
|
|
||||||
import com.velocitypowered.proxy.connection.util.ConnectionMessages;
|
import com.velocitypowered.proxy.connection.util.ConnectionMessages;
|
||||||
import com.velocitypowered.proxy.connection.util.ConnectionRequestResults.Impl;
|
import com.velocitypowered.proxy.connection.util.ConnectionRequestResults.Impl;
|
||||||
import com.velocitypowered.proxy.connection.util.VelocityInboundConnection;
|
import com.velocitypowered.proxy.connection.util.VelocityInboundConnection;
|
||||||
@ -162,10 +161,10 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
private @Nullable ResourcePackInfo pendingResourcePack;
|
private @Nullable ResourcePackInfo pendingResourcePack;
|
||||||
private @Nullable ResourcePackInfo appliedResourcePack;
|
private @Nullable ResourcePackInfo appliedResourcePack;
|
||||||
private final @NotNull Pointers pointers = Player.super.pointers().toBuilder()
|
private final @NotNull Pointers pointers = Player.super.pointers().toBuilder()
|
||||||
.withDynamic(Identity.UUID, this::getUniqueId)
|
.withDynamic(Identity.UUID, this::uuid)
|
||||||
.withDynamic(Identity.NAME, this::getUsername)
|
.withDynamic(Identity.NAME, this::username)
|
||||||
.withDynamic(Identity.DISPLAY_NAME, () -> Component.text(this.getUsername()))
|
.withDynamic(Identity.DISPLAY_NAME, () -> Component.text(this.username()))
|
||||||
.withDynamic(Identity.LOCALE, this::getEffectiveLocale)
|
.withDynamic(Identity.LOCALE, this::effectiveLocale)
|
||||||
.withDynamic(PermissionChecker.POINTER, () -> this.permissionChecker)
|
.withDynamic(PermissionChecker.POINTER, () -> this.permissionChecker)
|
||||||
.withStatic(FacetPointers.TYPE, Type.PLAYER)
|
.withStatic(FacetPointers.TYPE, Type.PLAYER)
|
||||||
.build();
|
.build();
|
||||||
@ -196,7 +195,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
}
|
}
|
||||||
this.playerKey = playerKey;
|
this.playerKey = playerKey;
|
||||||
this.chatQueue = new ChatQueue(this);
|
this.chatQueue = new ChatQueue(this);
|
||||||
this.chatBuilderFactory = new ChatBuilderFactory(this.getProtocolVersion());
|
this.chatBuilderFactory = new ChatBuilderFactory(this.protocolVersion());
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChatBuilderFactory getChatBuilderFactory() {
|
public ChatBuilderFactory getChatBuilderFactory() {
|
||||||
@ -213,14 +212,14 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getUsername() {
|
public String username() {
|
||||||
return profile.getName();
|
return profile.name();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Locale getEffectiveLocale() {
|
public Locale effectiveLocale() {
|
||||||
if (effectiveLocale == null && settings != null) {
|
if (effectiveLocale == null && settings != null) {
|
||||||
return settings.getLocale();
|
return settings.locale();
|
||||||
}
|
}
|
||||||
return effectiveLocale;
|
return effectiveLocale;
|
||||||
}
|
}
|
||||||
@ -231,12 +230,12 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UUID getUniqueId() {
|
public UUID uuid() {
|
||||||
return profile.getId();
|
return profile.uuid();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<ServerConnection> getCurrentServer() {
|
public Optional<ServerConnection> connectedServer() {
|
||||||
return Optional.ofNullable(connectedServer);
|
return Optional.ofNullable(connectedServer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -254,7 +253,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public GameProfile getGameProfile() {
|
public GameProfile profile() {
|
||||||
return profile;
|
return profile;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -263,7 +262,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long getPing() {
|
public long ping() {
|
||||||
return this.ping;
|
return this.ping;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -277,7 +276,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerSettings getPlayerSettings() {
|
public PlayerSettings settings() {
|
||||||
return settings == null ? ClientSettingsWrapper.DEFAULT : this.settings;
|
return settings == null ? ClientSettingsWrapper.DEFAULT : this.settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,7 +300,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<ModInfo> getModInfo() {
|
public Optional<ModInfo> modInfo() {
|
||||||
return Optional.ofNullable(modInfo);
|
return Optional.ofNullable(modInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -316,12 +315,12 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SocketAddress getRemoteAddress() {
|
public SocketAddress remoteAddress() {
|
||||||
return connection.getRemoteAddress();
|
return connection.getRemoteAddress();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<InetSocketAddress> getVirtualHost() {
|
public Optional<InetSocketAddress> virtualHost() {
|
||||||
return Optional.ofNullable(virtualHost);
|
return Optional.ofNullable(virtualHost);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -335,7 +334,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ProtocolVersion getProtocolVersion() {
|
public ProtocolVersion protocolVersion() {
|
||||||
return connection.getProtocolVersion();
|
return connection.getProtocolVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -347,7 +346,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
*/
|
*/
|
||||||
public Component translateMessage(Component message) {
|
public Component translateMessage(Component message) {
|
||||||
Locale locale = ClosestLocaleMatcher.INSTANCE
|
Locale locale = ClosestLocaleMatcher.INSTANCE
|
||||||
.lookupClosest(getEffectiveLocale() == null ? Locale.getDefault() : getEffectiveLocale());
|
.lookupClosest(effectiveLocale() == null ? Locale.getDefault() : effectiveLocale());
|
||||||
return GlobalTranslator.render(message, locale);
|
return GlobalTranslator.render(message, locale);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -377,7 +376,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
public void sendActionBar(net.kyori.adventure.text.@NonNull Component message) {
|
public void sendActionBar(net.kyori.adventure.text.@NonNull Component message) {
|
||||||
Component translated = translateMessage(message);
|
Component translated = translateMessage(message);
|
||||||
|
|
||||||
ProtocolVersion playerVersion = getProtocolVersion();
|
ProtocolVersion playerVersion = protocolVersion();
|
||||||
if (playerVersion.compareTo(ProtocolVersion.MINECRAFT_1_11) >= 0) {
|
if (playerVersion.compareTo(ProtocolVersion.MINECRAFT_1_11) >= 0) {
|
||||||
// Use the title packet instead.
|
// Use the title packet instead.
|
||||||
GenericTitlePacket pkt = GenericTitlePacket.constructTitlePacket(
|
GenericTitlePacket pkt = GenericTitlePacket.constructTitlePacket(
|
||||||
@ -424,18 +423,18 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
Component translatedFooter = translateMessage(footer);
|
Component translatedFooter = translateMessage(footer);
|
||||||
this.playerListHeader = translatedHeader;
|
this.playerListHeader = translatedHeader;
|
||||||
this.playerListFooter = translatedFooter;
|
this.playerListFooter = translatedFooter;
|
||||||
if (this.getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_8) >= 0) {
|
if (this.protocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_8) >= 0) {
|
||||||
this.connection.write(HeaderAndFooter.create(header, footer, this.getProtocolVersion()));
|
this.connection.write(HeaderAndFooter.create(header, footer, this.protocolVersion()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showTitle(net.kyori.adventure.title.@NonNull Title title) {
|
public void showTitle(net.kyori.adventure.title.@NonNull Title title) {
|
||||||
if (this.getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_8) >= 0) {
|
if (this.protocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_8) >= 0) {
|
||||||
GsonComponentSerializer serializer = ProtocolUtils.getJsonChatSerializer(this
|
GsonComponentSerializer serializer = ProtocolUtils.getJsonChatSerializer(this
|
||||||
.getProtocolVersion());
|
.protocolVersion());
|
||||||
GenericTitlePacket timesPkt = GenericTitlePacket.constructTitlePacket(
|
GenericTitlePacket timesPkt = GenericTitlePacket.constructTitlePacket(
|
||||||
GenericTitlePacket.ActionType.SET_TIMES, this.getProtocolVersion());
|
GenericTitlePacket.ActionType.SET_TIMES, this.protocolVersion());
|
||||||
net.kyori.adventure.title.Title.Times times = title.times();
|
net.kyori.adventure.title.Title.Times times = title.times();
|
||||||
if (times != null) {
|
if (times != null) {
|
||||||
timesPkt.setFadeIn((int) DurationUtils.toTicks(times.fadeIn()));
|
timesPkt.setFadeIn((int) DurationUtils.toTicks(times.fadeIn()));
|
||||||
@ -445,12 +444,12 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
connection.delayedWrite(timesPkt);
|
connection.delayedWrite(timesPkt);
|
||||||
|
|
||||||
GenericTitlePacket subtitlePkt = GenericTitlePacket.constructTitlePacket(
|
GenericTitlePacket subtitlePkt = GenericTitlePacket.constructTitlePacket(
|
||||||
GenericTitlePacket.ActionType.SET_SUBTITLE, this.getProtocolVersion());
|
GenericTitlePacket.ActionType.SET_SUBTITLE, this.protocolVersion());
|
||||||
subtitlePkt.setComponent(serializer.serialize(translateMessage(title.subtitle())));
|
subtitlePkt.setComponent(serializer.serialize(translateMessage(title.subtitle())));
|
||||||
connection.delayedWrite(subtitlePkt);
|
connection.delayedWrite(subtitlePkt);
|
||||||
|
|
||||||
GenericTitlePacket titlePkt = GenericTitlePacket.constructTitlePacket(
|
GenericTitlePacket titlePkt = GenericTitlePacket.constructTitlePacket(
|
||||||
GenericTitlePacket.ActionType.SET_TITLE, this.getProtocolVersion());
|
GenericTitlePacket.ActionType.SET_TITLE, this.protocolVersion());
|
||||||
titlePkt.setComponent(serializer.serialize(translateMessage(title.title())));
|
titlePkt.setComponent(serializer.serialize(translateMessage(title.title())));
|
||||||
connection.delayedWrite(titlePkt);
|
connection.delayedWrite(titlePkt);
|
||||||
|
|
||||||
@ -467,27 +466,27 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
throw new NullPointerException("value");
|
throw new NullPointerException("value");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_8) < 0) {
|
if (this.protocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_8) < 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
GsonComponentSerializer serializer = ProtocolUtils.getJsonChatSerializer(this
|
GsonComponentSerializer serializer = ProtocolUtils.getJsonChatSerializer(this
|
||||||
.getProtocolVersion());
|
.protocolVersion());
|
||||||
|
|
||||||
if (part == TitlePart.TITLE) {
|
if (part == TitlePart.TITLE) {
|
||||||
GenericTitlePacket titlePkt = GenericTitlePacket.constructTitlePacket(
|
GenericTitlePacket titlePkt = GenericTitlePacket.constructTitlePacket(
|
||||||
GenericTitlePacket.ActionType.SET_TITLE, this.getProtocolVersion());
|
GenericTitlePacket.ActionType.SET_TITLE, this.protocolVersion());
|
||||||
titlePkt.setComponent(serializer.serialize(translateMessage((Component) value)));
|
titlePkt.setComponent(serializer.serialize(translateMessage((Component) value)));
|
||||||
connection.write(titlePkt);
|
connection.write(titlePkt);
|
||||||
} else if (part == TitlePart.SUBTITLE) {
|
} else if (part == TitlePart.SUBTITLE) {
|
||||||
GenericTitlePacket titlePkt = GenericTitlePacket.constructTitlePacket(
|
GenericTitlePacket titlePkt = GenericTitlePacket.constructTitlePacket(
|
||||||
GenericTitlePacket.ActionType.SET_SUBTITLE, this.getProtocolVersion());
|
GenericTitlePacket.ActionType.SET_SUBTITLE, this.protocolVersion());
|
||||||
titlePkt.setComponent(serializer.serialize(translateMessage((Component) value)));
|
titlePkt.setComponent(serializer.serialize(translateMessage((Component) value)));
|
||||||
connection.write(titlePkt);
|
connection.write(titlePkt);
|
||||||
} else if (part == TitlePart.TIMES) {
|
} else if (part == TitlePart.TIMES) {
|
||||||
Times times = (Times) value;
|
Times times = (Times) value;
|
||||||
GenericTitlePacket timesPkt = GenericTitlePacket.constructTitlePacket(
|
GenericTitlePacket timesPkt = GenericTitlePacket.constructTitlePacket(
|
||||||
GenericTitlePacket.ActionType.SET_TIMES, this.getProtocolVersion());
|
GenericTitlePacket.ActionType.SET_TIMES, this.protocolVersion());
|
||||||
timesPkt.setFadeIn((int) DurationUtils.toTicks(times.fadeIn()));
|
timesPkt.setFadeIn((int) DurationUtils.toTicks(times.fadeIn()));
|
||||||
timesPkt.setStay((int) DurationUtils.toTicks(times.stay()));
|
timesPkt.setStay((int) DurationUtils.toTicks(times.stay()));
|
||||||
timesPkt.setFadeOut((int) DurationUtils.toTicks(times.fadeOut()));
|
timesPkt.setFadeOut((int) DurationUtils.toTicks(times.fadeOut()));
|
||||||
@ -499,30 +498,30 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void clearTitle() {
|
public void clearTitle() {
|
||||||
if (this.getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_8) >= 0) {
|
if (this.protocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_8) >= 0) {
|
||||||
connection.write(GenericTitlePacket.constructTitlePacket(
|
connection.write(GenericTitlePacket.constructTitlePacket(
|
||||||
GenericTitlePacket.ActionType.HIDE, this.getProtocolVersion()));
|
GenericTitlePacket.ActionType.HIDE, this.protocolVersion()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void resetTitle() {
|
public void resetTitle() {
|
||||||
if (this.getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_8) >= 0) {
|
if (this.protocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_8) >= 0) {
|
||||||
connection.write(GenericTitlePacket.constructTitlePacket(
|
connection.write(GenericTitlePacket.constructTitlePacket(
|
||||||
GenericTitlePacket.ActionType.RESET, this.getProtocolVersion()));
|
GenericTitlePacket.ActionType.RESET, this.protocolVersion()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void hideBossBar(@NonNull BossBar bar) {
|
public void hideBossBar(@NonNull BossBar bar) {
|
||||||
if (this.getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_9) >= 0) {
|
if (this.protocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_9) >= 0) {
|
||||||
this.server.getBossBarManager().removeBossBar(this, bar);
|
this.server.getBossBarManager().removeBossBar(this, bar);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showBossBar(@NonNull BossBar bar) {
|
public void showBossBar(@NonNull BossBar bar) {
|
||||||
if (this.getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_9) >= 0) {
|
if (this.protocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_9) >= 0) {
|
||||||
this.server.getBossBarManager().addBossBar(this, bar);
|
this.server.getBossBarManager().addBossBar(this, bar);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -538,19 +537,19 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<GameProfile.Property> getGameProfileProperties() {
|
public List<GameProfile.Property> profileProperties() {
|
||||||
return this.profile.getProperties();
|
return this.profile.properties();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setGameProfileProperties(List<GameProfile.Property> properties) {
|
public void setProfileProperties(List<GameProfile.Property> properties) {
|
||||||
this.profile = profile.withProperties(Preconditions.checkNotNull(properties));
|
this.profile = profile.withProperties(Preconditions.checkNotNull(properties));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void clearPlayerListHeaderAndFooter() {
|
public void clearPlayerListHeaderAndFooter() {
|
||||||
clearPlayerListHeaderAndFooterSilent();
|
clearPlayerListHeaderAndFooterSilent();
|
||||||
if (this.getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_8) >= 0) {
|
if (this.protocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_8) >= 0) {
|
||||||
this.connection.write(HeaderAndFooter.reset());
|
this.connection.write(HeaderAndFooter.reset());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -561,7 +560,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InternalTabList getTabList() {
|
public InternalTabList tabList() {
|
||||||
return tabList;
|
return tabList;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -587,7 +586,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
logger.info("{} has disconnected: {}", this,
|
logger.info("{} has disconnected: {}", this,
|
||||||
LegacyComponentSerializer.legacySection().serialize(translated));
|
LegacyComponentSerializer.legacySection().serialize(translated));
|
||||||
}
|
}
|
||||||
connection.closeWith(Disconnect.create(translated, this.getProtocolVersion()));
|
connection.closeWith(Disconnect.create(translated, this.protocolVersion()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable VelocityServerConnection getConnectedServer() {
|
public @Nullable VelocityServerConnection getConnectedServer() {
|
||||||
@ -629,14 +628,14 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
}
|
}
|
||||||
|
|
||||||
Component friendlyError;
|
Component friendlyError;
|
||||||
if (connectedServer != null && connectedServer.getServerInfo().equals(server.getServerInfo())) {
|
if (connectedServer != null && connectedServer.serverInfo().equals(server.serverInfo())) {
|
||||||
friendlyError = Component.translatable("velocity.error.connected-server-error",
|
friendlyError = Component.translatable("velocity.error.connected-server-error",
|
||||||
Component.text(server.getServerInfo().getName()));
|
Component.text(server.serverInfo().name()));
|
||||||
} else {
|
} else {
|
||||||
logger.error("{}: unable to connect to server {}", this, server.getServerInfo().getName(),
|
logger.error("{}: unable to connect to server {}", this, server.serverInfo().name(),
|
||||||
wrapped);
|
wrapped);
|
||||||
friendlyError = Component.translatable("velocity.error.connecting-server-error",
|
friendlyError = Component.translatable("velocity.error.connecting-server-error",
|
||||||
Component.text(server.getServerInfo().getName()));
|
Component.text(server.serverInfo().name()));
|
||||||
}
|
}
|
||||||
handleConnectionException(server, null, friendlyError.color(NamedTextColor.RED), safe);
|
handleConnectionException(server, null, friendlyError.color(NamedTextColor.RED), safe);
|
||||||
}
|
}
|
||||||
@ -657,19 +656,19 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
|
|
||||||
Component disconnectReason = GsonComponentSerializer.gson().deserialize(disconnect.getReason());
|
Component disconnectReason = GsonComponentSerializer.gson().deserialize(disconnect.getReason());
|
||||||
String plainTextReason = PASS_THRU_TRANSLATE.serialize(disconnectReason);
|
String plainTextReason = PASS_THRU_TRANSLATE.serialize(disconnectReason);
|
||||||
if (connectedServer != null && connectedServer.getServerInfo().equals(server.getServerInfo())) {
|
if (connectedServer != null && connectedServer.serverInfo().equals(server.serverInfo())) {
|
||||||
logger.info("{}: kicked from server {}: {}", this, server.getServerInfo().getName(),
|
logger.info("{}: kicked from server {}: {}", this, server.serverInfo().name(),
|
||||||
plainTextReason);
|
plainTextReason);
|
||||||
handleConnectionException(server, disconnectReason,
|
handleConnectionException(server, disconnectReason,
|
||||||
Component.translatable("velocity.error.moved-to-new-server", NamedTextColor.RED,
|
Component.translatable("velocity.error.moved-to-new-server", NamedTextColor.RED,
|
||||||
Component.text(server.getServerInfo().getName()),
|
Component.text(server.serverInfo().name()),
|
||||||
disconnectReason), safe);
|
disconnectReason), safe);
|
||||||
} else {
|
} else {
|
||||||
logger.error("{}: disconnected while connecting to {}: {}", this,
|
logger.error("{}: disconnected while connecting to {}: {}", this,
|
||||||
server.getServerInfo().getName(), plainTextReason);
|
server.serverInfo().name(), plainTextReason);
|
||||||
handleConnectionException(server, disconnectReason,
|
handleConnectionException(server, disconnectReason,
|
||||||
Component.translatable("velocity.error.cant-connect", NamedTextColor.RED,
|
Component.translatable("velocity.error.cant-connect", NamedTextColor.RED,
|
||||||
Component.text(server.getServerInfo().getName()),
|
Component.text(server.serverInfo().name()),
|
||||||
disconnectReason), safe);
|
disconnectReason), safe);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -689,18 +688,18 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean kickedFromCurrent = connectedServer == null || connectedServer.getServer().equals(rs);
|
boolean kickedFromCurrent = connectedServer == null || connectedServer.server().equals(rs);
|
||||||
ServerKickResult result;
|
ServerKickResult result;
|
||||||
if (kickedFromCurrent) {
|
if (kickedFromCurrent) {
|
||||||
Optional<RegisteredServer> next = getNextServerToTry(rs);
|
Optional<RegisteredServer> next = getNextServerToTry(rs);
|
||||||
result =
|
result = next.map(RedirectPlayer::redirect)
|
||||||
next.map(RedirectPlayer::create).orElseGet(() -> DisconnectPlayer.create(friendlyReason));
|
.orElseGet(() -> DisconnectPlayer.disconnect(friendlyReason));
|
||||||
} else {
|
} else {
|
||||||
// If we were kicked by going to another server, the connection should not be in flight
|
// If we were kicked by going to another server, the connection should not be in flight
|
||||||
if (connectionInFlight != null && connectionInFlight.getServer().equals(rs)) {
|
if (connectionInFlight != null && connectionInFlight.server().equals(rs)) {
|
||||||
resetInFlightConnection();
|
resetInFlightConnection();
|
||||||
}
|
}
|
||||||
result = Notify.create(friendlyReason);
|
result = Notify.notify(friendlyReason);
|
||||||
}
|
}
|
||||||
KickedFromServerEvent originalEvent = new KickedFromServerEvent(this, rs, kickReason,
|
KickedFromServerEvent originalEvent = new KickedFromServerEvent(this, rs, kickReason,
|
||||||
!kickedFromCurrent, result);
|
!kickedFromCurrent, result);
|
||||||
@ -724,25 +723,25 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event.getResult() instanceof DisconnectPlayer) {
|
if (event.result() instanceof DisconnectPlayer) {
|
||||||
DisconnectPlayer res = (DisconnectPlayer) event.getResult();
|
DisconnectPlayer res = (DisconnectPlayer) event.result();
|
||||||
disconnect(res.getReasonComponent());
|
disconnect(res.reason());
|
||||||
} else if (event.getResult() instanceof RedirectPlayer) {
|
} else if (event.result() instanceof RedirectPlayer) {
|
||||||
RedirectPlayer res = (RedirectPlayer) event.getResult();
|
RedirectPlayer res = (RedirectPlayer) event.result();
|
||||||
createConnectionRequest(res.getServer(), previousConnection).connect()
|
createConnectionRequest(res.getServer(), previousConnection).connect()
|
||||||
.whenCompleteAsync((status, throwable) -> {
|
.whenCompleteAsync((status, throwable) -> {
|
||||||
if (throwable != null) {
|
if (throwable != null) {
|
||||||
handleConnectionException(
|
handleConnectionException(
|
||||||
status != null ? status.getAttemptedConnection() : res.getServer(), throwable,
|
status != null ? status.attemptedConnectedTo() : res.getServer(), throwable,
|
||||||
true);
|
true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (status.getStatus()) {
|
switch (status.status()) {
|
||||||
// Impossible/nonsensical cases
|
// Impossible/nonsensical cases
|
||||||
case ALREADY_CONNECTED:
|
case ALREADY_CONNECTED:
|
||||||
logger.error("{}: already connected to {}", this,
|
logger.error("{}: already connected to {}", this,
|
||||||
status.getAttemptedConnection().getServerInfo().getName());
|
status.attemptedConnectedTo().serverInfo().name());
|
||||||
break;
|
break;
|
||||||
case CONNECTION_IN_PROGRESS:
|
case CONNECTION_IN_PROGRESS:
|
||||||
// Fatal case
|
// Fatal case
|
||||||
@ -751,13 +750,13 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
if (fallbackMsg == null) {
|
if (fallbackMsg == null) {
|
||||||
fallbackMsg = friendlyReason;
|
fallbackMsg = friendlyReason;
|
||||||
}
|
}
|
||||||
disconnect(status.getReasonComponent().orElse(fallbackMsg));
|
disconnect(status.reason().orElse(fallbackMsg));
|
||||||
break;
|
break;
|
||||||
case SERVER_DISCONNECTED:
|
case SERVER_DISCONNECTED:
|
||||||
Component reason = status.getReasonComponent()
|
Component reason = status.reason()
|
||||||
.orElse(ConnectionMessages.INTERNAL_SERVER_CONNECTION_ERROR);
|
.orElse(ConnectionMessages.INTERNAL_SERVER_CONNECTION_ERROR);
|
||||||
handleConnectionException(res.getServer(),
|
handleConnectionException(res.getServer(),
|
||||||
Disconnect.create(reason, getProtocolVersion()), ((Impl) status).isSafe());
|
Disconnect.create(reason, protocolVersion()), ((Impl) status).isSafe());
|
||||||
break;
|
break;
|
||||||
case SUCCESS:
|
case SUCCESS:
|
||||||
Component requestedMessage = res.getMessageComponent();
|
Component requestedMessage = res.getMessageComponent();
|
||||||
@ -773,12 +772,12 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}, connection.eventLoop());
|
}, connection.eventLoop());
|
||||||
} else if (event.getResult() instanceof Notify) {
|
} else if (event.result() instanceof Notify) {
|
||||||
Notify res = (Notify) event.getResult();
|
Notify res = (Notify) event.result();
|
||||||
if (event.kickedDuringServerConnect() && previousConnection != null) {
|
if (event.kickedDuringServerConnect() && previousConnection != null) {
|
||||||
sendMessage(Identity.nil(), res.getMessageComponent());
|
sendMessage(Identity.nil(), res.reason());
|
||||||
} else {
|
} else {
|
||||||
disconnect(res.getMessageComponent());
|
disconnect(res.reason());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// In case someone gets creative, assume we want to disconnect the player.
|
// In case someone gets creative, assume we want to disconnect the player.
|
||||||
@ -806,7 +805,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
*/
|
*/
|
||||||
private Optional<RegisteredServer> getNextServerToTry(@Nullable RegisteredServer current) {
|
private Optional<RegisteredServer> getNextServerToTry(@Nullable RegisteredServer current) {
|
||||||
if (serversToTry == null) {
|
if (serversToTry == null) {
|
||||||
String virtualHostStr = getVirtualHost().map(InetSocketAddress::getHostString)
|
String virtualHostStr = virtualHost().map(InetSocketAddress::getHostString)
|
||||||
.orElse("")
|
.orElse("")
|
||||||
.toLowerCase(Locale.ROOT);
|
.toLowerCase(Locale.ROOT);
|
||||||
serversToTry = server.getConfiguration().getForcedHosts().getOrDefault(virtualHostStr,
|
serversToTry = server.getConfiguration().getForcedHosts().getOrDefault(virtualHostStr,
|
||||||
@ -824,8 +823,8 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
|
|
||||||
for (int i = tryIndex; i < serversToTry.size(); i++) {
|
for (int i = tryIndex; i < serversToTry.size(); i++) {
|
||||||
String toTryName = serversToTry.get(i);
|
String toTryName = serversToTry.get(i);
|
||||||
if ((connectedServer != null && hasSameName(connectedServer.getServer(), toTryName))
|
if ((connectedServer != null && hasSameName(connectedServer.server(), toTryName))
|
||||||
|| (connectionInFlight != null && hasSameName(connectionInFlight.getServer(), toTryName))
|
|| (connectionInFlight != null && hasSameName(connectionInFlight.server(), toTryName))
|
||||||
|| (current != null && hasSameName(current, toTryName))) {
|
|| (current != null && hasSameName(current, toTryName))) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -837,7 +836,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static boolean hasSameName(RegisteredServer server, String name) {
|
private static boolean hasSameName(RegisteredServer server, String name) {
|
||||||
return server.getServerInfo().getName().equalsIgnoreCase(name);
|
return server.serverInfo().name().equalsIgnoreCase(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -880,12 +879,12 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
connectedServer.disconnect();
|
connectedServer.disconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
Optional<Player> connectedPlayer = server.getPlayer(this.getUniqueId());
|
Optional<Player> connectedPlayer = server.getPlayer(this.uuid());
|
||||||
server.unregisterConnection(this);
|
server.unregisterConnection(this);
|
||||||
|
|
||||||
DisconnectEvent.LoginStatus status;
|
DisconnectEvent.LoginStatus status;
|
||||||
if (connectedPlayer.isPresent()) {
|
if (connectedPlayer.isPresent()) {
|
||||||
if (!connectedPlayer.get().getCurrentServer().isPresent()) {
|
if (!connectedPlayer.get().connectedServer().isPresent()) {
|
||||||
status = LoginStatus.PRE_SERVER_JOIN;
|
status = LoginStatus.PRE_SERVER_JOIN;
|
||||||
} else {
|
} else {
|
||||||
status = connectedPlayer.get() == this ? LoginStatus.SUCCESSFUL_LOGIN
|
status = connectedPlayer.get() == this ? LoginStatus.SUCCESSFUL_LOGIN
|
||||||
@ -915,12 +914,12 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
boolean isPlayerAddressLoggingEnabled = server.getConfiguration()
|
boolean isPlayerAddressLoggingEnabled = server.getConfiguration()
|
||||||
.isPlayerAddressLoggingEnabled();
|
.isPlayerAddressLoggingEnabled();
|
||||||
String playerIp =
|
String playerIp =
|
||||||
isPlayerAddressLoggingEnabled ? getRemoteAddress().toString() : "<ip address withheld>";
|
isPlayerAddressLoggingEnabled ? remoteAddress().toString() : "<ip address withheld>";
|
||||||
return "[connected player] " + profile.getName() + " (" + playerIp + ")";
|
return "[connected player] " + profile.name() + " (" + playerIp + ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PermissionChecker getPermissionChecker() {
|
public PermissionChecker permissionChecker() {
|
||||||
return this.permissionChecker;
|
return this.permissionChecker;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -928,7 +927,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
public boolean sendPluginMessage(ChannelIdentifier identifier, byte[] data) {
|
public boolean sendPluginMessage(ChannelIdentifier identifier, byte[] data) {
|
||||||
Preconditions.checkNotNull(identifier, "identifier");
|
Preconditions.checkNotNull(identifier, "identifier");
|
||||||
Preconditions.checkNotNull(data, "data");
|
Preconditions.checkNotNull(data, "data");
|
||||||
PluginMessage message = new PluginMessage(identifier.getId(), Unpooled.wrappedBuffer(data));
|
PluginMessage message = new PluginMessage(identifier.id(), Unpooled.wrappedBuffer(data));
|
||||||
connection.write(message);
|
connection.write(message);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -947,7 +946,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
Preconditions.checkArgument(input.length() <= LegacyChat.MAX_SERVERBOUND_MESSAGE_LENGTH,
|
Preconditions.checkArgument(input.length() <= LegacyChat.MAX_SERVERBOUND_MESSAGE_LENGTH,
|
||||||
"input cannot be greater than " + LegacyChat.MAX_SERVERBOUND_MESSAGE_LENGTH
|
"input cannot be greater than " + LegacyChat.MAX_SERVERBOUND_MESSAGE_LENGTH
|
||||||
+ " characters in length");
|
+ " characters in length");
|
||||||
if (getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_19) >= 0) {
|
if (protocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_19) >= 0) {
|
||||||
this.chatQueue.hijack(getChatBuilderFactory().builder().asPlayer(this).message(input),
|
this.chatQueue.hijack(getChatBuilderFactory().builder().asPlayer(this).message(input),
|
||||||
(instant, item) -> {
|
(instant, item) -> {
|
||||||
item.setTimestamp(instant);
|
item.setTimestamp(instant);
|
||||||
@ -959,21 +958,9 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@Deprecated
|
|
||||||
public void sendResourcePack(String url) {
|
|
||||||
sendResourcePackOffer(new VelocityResourcePackInfo.BuilderImpl(url).build());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Deprecated
|
|
||||||
public void sendResourcePack(String url, byte[] hash) {
|
|
||||||
sendResourcePackOffer(new VelocityResourcePackInfo.BuilderImpl(url).setHash(hash).build());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendResourcePackOffer(ResourcePackInfo packInfo) {
|
public void sendResourcePackOffer(ResourcePackInfo packInfo) {
|
||||||
if (this.getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_8) >= 0) {
|
if (this.protocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_8) >= 0) {
|
||||||
Preconditions.checkNotNull(packInfo, "packInfo");
|
Preconditions.checkNotNull(packInfo, "packInfo");
|
||||||
queueResourcePack(packInfo);
|
queueResourcePack(packInfo);
|
||||||
}
|
}
|
||||||
@ -1000,7 +987,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
// Unless its 1.17+ and forced it will come back denied anyway
|
// Unless its 1.17+ and forced it will come back denied anyway
|
||||||
while (!outstandingResourcePacks.isEmpty()) {
|
while (!outstandingResourcePacks.isEmpty()) {
|
||||||
queued = outstandingResourcePacks.peek();
|
queued = outstandingResourcePacks.peek();
|
||||||
if (queued.getShouldForce() && getProtocolVersion()
|
if (queued.required() && protocolVersion()
|
||||||
.compareTo(ProtocolVersion.MINECRAFT_1_17) >= 0) {
|
.compareTo(ProtocolVersion.MINECRAFT_1_17) >= 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1014,26 +1001,26 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
}
|
}
|
||||||
|
|
||||||
ResourcePackRequest request = new ResourcePackRequest();
|
ResourcePackRequest request = new ResourcePackRequest();
|
||||||
request.setUrl(queued.getUrl());
|
request.setUrl(queued.url());
|
||||||
if (queued.getHash() != null) {
|
if (queued.hash() != null) {
|
||||||
request.setHash(ByteBufUtil.hexDump(queued.getHash()));
|
request.setHash(ByteBufUtil.hexDump(queued.hash()));
|
||||||
} else {
|
} else {
|
||||||
request.setHash("");
|
request.setHash("");
|
||||||
}
|
}
|
||||||
request.setRequired(queued.getShouldForce());
|
request.setRequired(queued.required());
|
||||||
request.setPrompt(queued.getPrompt());
|
request.setPrompt(queued.prompt());
|
||||||
|
|
||||||
connection.write(request);
|
connection.write(request);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable ResourcePackInfo getAppliedResourcePack() {
|
public @Nullable ResourcePackInfo appliedResourcePack() {
|
||||||
return appliedResourcePack;
|
return appliedResourcePack;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable ResourcePackInfo getPendingResourcePack() {
|
public @Nullable ResourcePackInfo pendingResourcePack() {
|
||||||
return pendingResourcePack;
|
return pendingResourcePack;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1055,11 +1042,11 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
server.getEventManager().fire(new PlayerResourcePackStatusEvent(this, status, queued))
|
server.getEventManager().fire(new PlayerResourcePackStatusEvent(this, status, queued))
|
||||||
.thenAcceptAsync(event -> {
|
.thenAcceptAsync(event -> {
|
||||||
if (event.getStatus() == PlayerResourcePackStatusEvent.Status.DECLINED
|
if (event.getStatus() == PlayerResourcePackStatusEvent.Status.DECLINED
|
||||||
&& event.getPackInfo() != null && event.getPackInfo().getShouldForce()
|
&& event.getPackInfo() != null && event.getPackInfo().required()
|
||||||
&& (!event.isOverwriteKick() || event.getPlayer()
|
&& (!event.isOverwriteKick() || event.player()
|
||||||
.getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_17) >= 0)
|
.protocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_17) >= 0)
|
||||||
) {
|
) {
|
||||||
event.getPlayer().disconnect(Component
|
event.player().disconnect(Component
|
||||||
.translatable("multiplayer.requiredTexturePrompt.disconnect"));
|
.translatable("multiplayer.requiredTexturePrompt.disconnect"));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -1088,7 +1075,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
}
|
}
|
||||||
|
|
||||||
return queued != null
|
return queued != null
|
||||||
&& queued.getOriginalOrigin() != ResourcePackInfo.Origin.DOWNSTREAM_SERVER;
|
&& queued.originalOrigin() != ResourcePackInfo.Origin.DOWNSTREAM_SERVER;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1147,7 +1134,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable IdentifiedKey getIdentifiedKey() {
|
public @Nullable IdentifiedKey identifiedKey() {
|
||||||
return playerKey;
|
return playerKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1155,7 +1142,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NonNull UUID uuid() {
|
public @NonNull UUID uuid() {
|
||||||
return ConnectedPlayer.this.getUniqueId();
|
return ConnectedPlayer.this.uuid();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1167,11 +1154,11 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
ConnectionRequestBuilderImpl(RegisteredServer toConnect,
|
ConnectionRequestBuilderImpl(RegisteredServer toConnect,
|
||||||
@Nullable VelocityServerConnection previousConnection) {
|
@Nullable VelocityServerConnection previousConnection) {
|
||||||
this.toConnect = Preconditions.checkNotNull(toConnect, "info");
|
this.toConnect = Preconditions.checkNotNull(toConnect, "info");
|
||||||
this.previousServer = previousConnection == null ? null : previousConnection.getServer();
|
this.previousServer = previousConnection == null ? null : previousConnection.server();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RegisteredServer getServer() {
|
public RegisteredServer server() {
|
||||||
return toConnect;
|
return toConnect;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1183,7 +1170,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
return Optional.of(ConnectionRequestBuilder.Status.CONNECTION_IN_PROGRESS);
|
return Optional.of(ConnectionRequestBuilder.Status.CONNECTION_IN_PROGRESS);
|
||||||
}
|
}
|
||||||
if (connectedServer != null
|
if (connectedServer != null
|
||||||
&& connectedServer.getServer().getServerInfo().equals(server.getServerInfo())) {
|
&& connectedServer.server().serverInfo().equals(server.serverInfo())) {
|
||||||
return Optional.of(ALREADY_CONNECTED);
|
return Optional.of(ALREADY_CONNECTED);
|
||||||
}
|
}
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
@ -1202,7 +1189,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
ServerPreConnectEvent event =
|
ServerPreConnectEvent event =
|
||||||
new ServerPreConnectEvent(ConnectedPlayer.this, toConnect, previousServer);
|
new ServerPreConnectEvent(ConnectedPlayer.this, toConnect, previousServer);
|
||||||
return server.getEventManager().fire(event).thenComposeAsync(newEvent -> {
|
return server.getEventManager().fire(event).thenComposeAsync(newEvent -> {
|
||||||
Optional<RegisteredServer> newDest = newEvent.getResult().getServer();
|
Optional<RegisteredServer> newDest = newEvent.result().getServer();
|
||||||
if (!newDest.isPresent()) {
|
if (!newDest.isPresent()) {
|
||||||
return completedFuture(
|
return completedFuture(
|
||||||
plainResult(ConnectionRequestBuilder.Status.CONNECTION_CANCELLED, toConnect));
|
plainResult(ConnectionRequestBuilder.Status.CONNECTION_CANCELLED, toConnect));
|
||||||
@ -1235,7 +1222,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
return this.internalConnect().whenCompleteAsync((status, throwable) -> {
|
return this.internalConnect().whenCompleteAsync((status, throwable) -> {
|
||||||
if (status != null && !status.isSuccessful()) {
|
if (status != null && !status.isSuccessful()) {
|
||||||
if (!status.isSafe()) {
|
if (!status.isSafe()) {
|
||||||
handleConnectionException(status.getAttemptedConnection(), throwable, false);
|
handleConnectionException(status.attemptedConnectedTo(), throwable, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, connection.eventLoop()).thenApply(x -> x);
|
}, connection.eventLoop()).thenApply(x -> x);
|
||||||
@ -1246,12 +1233,12 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
return internalConnect().whenCompleteAsync((status, throwable) -> {
|
return internalConnect().whenCompleteAsync((status, throwable) -> {
|
||||||
if (throwable != null) {
|
if (throwable != null) {
|
||||||
// TODO: The exception handling from this is not very good. Find a better way.
|
// TODO: The exception handling from this is not very good. Find a better way.
|
||||||
handleConnectionException(status != null ? status.getAttemptedConnection() : toConnect,
|
handleConnectionException(status != null ? status.attemptedConnectedTo() : toConnect,
|
||||||
throwable, true);
|
throwable, true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (status.getStatus()) {
|
switch (status.status()) {
|
||||||
case ALREADY_CONNECTED:
|
case ALREADY_CONNECTED:
|
||||||
sendMessage(Identity.nil(), ConnectionMessages.ALREADY_CONNECTED);
|
sendMessage(Identity.nil(), ConnectionMessages.ALREADY_CONNECTED);
|
||||||
break;
|
break;
|
||||||
@ -1262,9 +1249,9 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player,
|
|||||||
// Ignored; the plugin probably already handled this.
|
// Ignored; the plugin probably already handled this.
|
||||||
break;
|
break;
|
||||||
case SERVER_DISCONNECTED:
|
case SERVER_DISCONNECTED:
|
||||||
Component reason = status.getReasonComponent()
|
Component reason = status.reason()
|
||||||
.orElse(ConnectionMessages.INTERNAL_SERVER_CONNECTION_ERROR);
|
.orElse(ConnectionMessages.INTERNAL_SERVER_CONNECTION_ERROR);
|
||||||
handleConnectionException(toConnect, Disconnect.create(reason, getProtocolVersion()),
|
handleConnectionException(toConnect, Disconnect.create(reason, protocolVersion()),
|
||||||
status.isSafe());
|
status.isSafe());
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -215,12 +215,12 @@ public class HandshakeSessionHandler implements MinecraftSessionHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InetSocketAddress getRemoteAddress() {
|
public InetSocketAddress remoteAddress() {
|
||||||
return (InetSocketAddress) connection.getRemoteAddress();
|
return (InetSocketAddress) connection.getRemoteAddress();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<InetSocketAddress> getVirtualHost() {
|
public Optional<InetSocketAddress> virtualHost() {
|
||||||
return Optional.ofNullable(ping.getVhost());
|
return Optional.ofNullable(ping.getVhost());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -230,13 +230,13 @@ public class HandshakeSessionHandler implements MinecraftSessionHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ProtocolVersion getProtocolVersion() {
|
public ProtocolVersion protocolVersion() {
|
||||||
return ProtocolVersion.LEGACY;
|
return ProtocolVersion.LEGACY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "[legacy connection] " + this.getRemoteAddress().toString();
|
return "[legacy connection] " + this.remoteAddress().toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -65,11 +65,11 @@ public class InitialConnectSessionHandler implements MinecraftSessionHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
byte[] copy = ByteBufUtil.getBytes(packet.content());
|
byte[] copy = ByteBufUtil.getBytes(packet.content());
|
||||||
PluginMessageEvent event = new PluginMessageEvent(serverConn, serverConn.getPlayer(), id,
|
PluginMessageEvent event = new PluginMessageEvent(serverConn, serverConn.player(), id,
|
||||||
copy);
|
copy);
|
||||||
server.getEventManager().fire(event)
|
server.getEventManager().fire(event)
|
||||||
.thenAcceptAsync(pme -> {
|
.thenAcceptAsync(pme -> {
|
||||||
if (pme.getResult().isAllowed() && serverConn.isActive()) {
|
if (pme.result().allowed() && serverConn.isActive()) {
|
||||||
PluginMessage copied = new PluginMessage(packet.getChannel(),
|
PluginMessage copied = new PluginMessage(packet.getChannel(),
|
||||||
Unpooled.wrappedBuffer(copy));
|
Unpooled.wrappedBuffer(copy));
|
||||||
serverConn.ensureConnected().write(copied);
|
serverConn.ensureConnected().write(copied);
|
||||||
|
@ -54,12 +54,12 @@ public final class InitialInboundConnection implements VelocityInboundConnection
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InetSocketAddress getRemoteAddress() {
|
public InetSocketAddress remoteAddress() {
|
||||||
return (InetSocketAddress) connection.getRemoteAddress();
|
return (InetSocketAddress) connection.getRemoteAddress();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<InetSocketAddress> getVirtualHost() {
|
public Optional<InetSocketAddress> virtualHost() {
|
||||||
return Optional.of(InetSocketAddress.createUnresolved(cleanedAddress, handshake.getPort()));
|
return Optional.of(InetSocketAddress.createUnresolved(cleanedAddress, handshake.getPort()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ public final class InitialInboundConnection implements VelocityInboundConnection
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ProtocolVersion getProtocolVersion() {
|
public ProtocolVersion protocolVersion() {
|
||||||
return connection.getProtocolVersion();
|
return connection.getProtocolVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,7 +95,7 @@ public final class InitialInboundConnection implements VelocityInboundConnection
|
|||||||
logger.info("{} has disconnected: {}", this,
|
logger.info("{} has disconnected: {}", this,
|
||||||
LegacyComponentSerializer.legacySection().serialize(translated));
|
LegacyComponentSerializer.legacySection().serialize(translated));
|
||||||
}
|
}
|
||||||
connection.closeWith(Disconnect.create(translated, getProtocolVersion()));
|
connection.closeWith(Disconnect.create(translated, protocolVersion()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -106,6 +106,6 @@ public final class InitialInboundConnection implements VelocityInboundConnection
|
|||||||
public void disconnectQuietly(Component reason) {
|
public void disconnectQuietly(Component reason) {
|
||||||
Component translated = GlobalTranslator.render(reason, ClosestLocaleMatcher.INSTANCE
|
Component translated = GlobalTranslator.render(reason, ClosestLocaleMatcher.INSTANCE
|
||||||
.lookupClosest(Locale.getDefault()));
|
.lookupClosest(Locale.getDefault()));
|
||||||
connection.closeWith(Disconnect.create(translated, getProtocolVersion()));
|
connection.closeWith(Disconnect.create(translated, protocolVersion()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,7 +46,6 @@ import java.security.GeneralSecurityException;
|
|||||||
import java.security.KeyPair;
|
import java.security.KeyPair;
|
||||||
import java.security.MessageDigest;
|
import java.security.MessageDigest;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
@ -56,6 +55,7 @@ import org.apache.logging.log4j.Logger;
|
|||||||
import org.asynchttpclient.ListenableFuture;
|
import org.asynchttpclient.ListenableFuture;
|
||||||
import org.asynchttpclient.Response;
|
import org.asynchttpclient.Response;
|
||||||
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles authenticating the player to Mojang's servers.
|
* Handles authenticating the player to Mojang's servers.
|
||||||
@ -99,7 +99,7 @@ public class InitialLoginSessionHandler implements MinecraftSessionHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
boolean isKeyValid;
|
boolean isKeyValid;
|
||||||
if (playerKey.getKeyRevision() == IdentifiedKey.Revision.LINKED_V2
|
if (playerKey.revision() == IdentifiedKey.Revision.LINKED_V2
|
||||||
&& playerKey instanceof IdentifiedKeyImpl) {
|
&& playerKey instanceof IdentifiedKeyImpl) {
|
||||||
IdentifiedKeyImpl keyImpl = (IdentifiedKeyImpl) playerKey;
|
IdentifiedKeyImpl keyImpl = (IdentifiedKeyImpl) playerKey;
|
||||||
isKeyValid = keyImpl.internalAddHolder(packet.getHolderUuid());
|
isKeyValid = keyImpl.internalAddHolder(packet.getHolderUuid());
|
||||||
@ -127,11 +127,11 @@ public class InitialLoginSessionHandler implements MinecraftSessionHandler {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PreLoginComponentResult result = event.getResult();
|
PreLoginComponentResult result = event.result();
|
||||||
Optional<Component> disconnectReason = result.getReasonComponent();
|
@Nullable Component disconnectReason = result.explanation();
|
||||||
if (disconnectReason.isPresent()) {
|
if (disconnectReason != null) {
|
||||||
// The component is guaranteed to be provided if the connection was denied.
|
// The component is guaranteed to be provided if the connection was denied.
|
||||||
inbound.disconnect(disconnectReason.get());
|
inbound.disconnect(disconnectReason);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -185,8 +185,8 @@ public class InitialLoginSessionHandler implements MinecraftSessionHandler {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
KeyPair serverKeyPair = server.getServerKeyPair();
|
KeyPair serverKeyPair = server.getServerKeyPair();
|
||||||
if (inbound.getIdentifiedKey() != null) {
|
if (inbound.identifiedKey() != null) {
|
||||||
IdentifiedKey playerKey = inbound.getIdentifiedKey();
|
IdentifiedKey playerKey = inbound.identifiedKey();
|
||||||
if (!playerKey.verifyDataSignature(packet.getVerifyToken(), verify,
|
if (!playerKey.verifyDataSignature(packet.getVerifyToken(), verify,
|
||||||
Longs.toByteArray(packet.getSalt()))) {
|
Longs.toByteArray(packet.getSalt()))) {
|
||||||
throw new IllegalStateException("Invalid client public signature.");
|
throw new IllegalStateException("Invalid client public signature.");
|
||||||
@ -235,11 +235,11 @@ public class InitialLoginSessionHandler implements MinecraftSessionHandler {
|
|||||||
final GameProfile profile = GENERAL_GSON.fromJson(profileResponse.getResponseBody(),
|
final GameProfile profile = GENERAL_GSON.fromJson(profileResponse.getResponseBody(),
|
||||||
GameProfile.class);
|
GameProfile.class);
|
||||||
// Not so fast, now we verify the public key for 1.19.1+
|
// Not so fast, now we verify the public key for 1.19.1+
|
||||||
if (inbound.getIdentifiedKey() != null
|
if (inbound.identifiedKey() != null
|
||||||
&& inbound.getIdentifiedKey().getKeyRevision() == IdentifiedKey.Revision.LINKED_V2
|
&& inbound.identifiedKey().revision() == IdentifiedKey.Revision.LINKED_V2
|
||||||
&& inbound.getIdentifiedKey() instanceof IdentifiedKeyImpl) {
|
&& inbound.identifiedKey() instanceof IdentifiedKeyImpl) {
|
||||||
IdentifiedKeyImpl key = (IdentifiedKeyImpl) inbound.getIdentifiedKey();
|
IdentifiedKeyImpl key = (IdentifiedKeyImpl) inbound.identifiedKey();
|
||||||
if (!key.internalAddHolder(profile.getId())) {
|
if (!key.internalAddHolder(profile.uuid())) {
|
||||||
inbound.disconnect(
|
inbound.disconnect(
|
||||||
Component.translatable("multiplayer.disconnect.invalid_public_key"));
|
Component.translatable("multiplayer.disconnect.invalid_public_key"));
|
||||||
}
|
}
|
||||||
|
@ -61,13 +61,13 @@ public class LoginInboundConnection implements LoginPhaseConnection, KeyIdentifi
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InetSocketAddress getRemoteAddress() {
|
public InetSocketAddress remoteAddress() {
|
||||||
return delegate.getRemoteAddress();
|
return delegate.remoteAddress();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<InetSocketAddress> getVirtualHost() {
|
public Optional<InetSocketAddress> virtualHost() {
|
||||||
return delegate.getVirtualHost();
|
return delegate.virtualHost();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -76,8 +76,8 @@ public class LoginInboundConnection implements LoginPhaseConnection, KeyIdentifi
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ProtocolVersion getProtocolVersion() {
|
public ProtocolVersion protocolVersion() {
|
||||||
return delegate.getProtocolVersion();
|
return delegate.protocolVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -92,7 +92,7 @@ public class LoginInboundConnection implements LoginPhaseConnection, KeyIdentifi
|
|||||||
if (consumer == null) {
|
if (consumer == null) {
|
||||||
throw new NullPointerException("consumer");
|
throw new NullPointerException("consumer");
|
||||||
}
|
}
|
||||||
if (delegate.getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_13) < 0) {
|
if (delegate.protocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_13) < 0) {
|
||||||
throw new IllegalStateException("Login plugin messages can only be sent to clients running "
|
throw new IllegalStateException("Login plugin messages can only be sent to clients running "
|
||||||
+ "Minecraft 1.13 and above");
|
+ "Minecraft 1.13 and above");
|
||||||
}
|
}
|
||||||
@ -100,7 +100,7 @@ public class LoginInboundConnection implements LoginPhaseConnection, KeyIdentifi
|
|||||||
final int id = SEQUENCE_UPDATER.incrementAndGet(this);
|
final int id = SEQUENCE_UPDATER.incrementAndGet(this);
|
||||||
this.outstandingResponses.put(id, consumer);
|
this.outstandingResponses.put(id, consumer);
|
||||||
|
|
||||||
final LoginPluginMessage message = new LoginPluginMessage(id, identifier.getId(),
|
final LoginPluginMessage message = new LoginPluginMessage(id, identifier.id(),
|
||||||
Unpooled.wrappedBuffer(contents));
|
Unpooled.wrappedBuffer(contents));
|
||||||
if (!this.loginEventFired) {
|
if (!this.loginEventFired) {
|
||||||
this.loginMessagesToSend.add(message);
|
this.loginMessagesToSend.add(message);
|
||||||
@ -163,7 +163,7 @@ public class LoginInboundConnection implements LoginPhaseConnection, KeyIdentifi
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IdentifiedKey getIdentifiedKey() {
|
public IdentifiedKey identifiedKey() {
|
||||||
return playerKey;
|
return playerKey;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,7 @@ public enum LegacyForgeHandshakeBackendPhase implements BackendConnectionPhase {
|
|||||||
if (mc != null) {
|
if (mc != null) {
|
||||||
mc.setType(ConnectionTypes.LEGACY_FORGE);
|
mc.setType(ConnectionTypes.LEGACY_FORGE);
|
||||||
}
|
}
|
||||||
connection.getPlayer().sendLegacyForgeHandshakeResetPacket();
|
connection.player().sendLegacyForgeHandshakeResetPacket();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ public enum LegacyForgeHandshakeClientPhase implements ClientConnectionPhase {
|
|||||||
PluginMessage message,
|
PluginMessage message,
|
||||||
MinecraftConnection backendConn) {
|
MinecraftConnection backendConn) {
|
||||||
// Read the mod list if we haven't already.
|
// Read the mod list if we haven't already.
|
||||||
if (!player.getModInfo().isPresent()) {
|
if (!player.modInfo().isPresent()) {
|
||||||
List<ModInfo.Mod> mods = LegacyForgeUtil.readModList(message);
|
List<ModInfo.Mod> mods = LegacyForgeUtil.readModList(message);
|
||||||
if (!mods.isEmpty()) {
|
if (!mods.isEmpty()) {
|
||||||
player.setModInfo(new ModInfo("FML", mods));
|
player.setModInfo(new ModInfo("FML", mods));
|
||||||
|
@ -45,27 +45,27 @@ public final class VelocityResourcePackInfo implements ResourcePackInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getUrl() {
|
public String url() {
|
||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable Component getPrompt() {
|
public @Nullable Component prompt() {
|
||||||
return prompt;
|
return prompt;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean getShouldForce() {
|
public boolean required() {
|
||||||
return shouldForce;
|
return shouldForce;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable byte[] getHash() {
|
public @Nullable byte[] hash() {
|
||||||
return hash == null ? null : hash.clone(); // Thanks spotbugs, very helpful.
|
return hash == null ? null : hash.clone(); // Thanks spotbugs, very helpful.
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Origin getOrigin() {
|
public Origin origin() {
|
||||||
return origin;
|
return origin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,24 +74,24 @@ public final class VelocityResourcePackInfo implements ResourcePackInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Origin getOriginalOrigin() {
|
public Origin originalOrigin() {
|
||||||
return originalOrigin;
|
return originalOrigin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Builder asBuilder() {
|
public Builder asBuilder() {
|
||||||
return new BuilderImpl(url)
|
return new BuilderImpl(url)
|
||||||
.setShouldForce(shouldForce)
|
.required(shouldForce)
|
||||||
.setHash(hash)
|
.hash(hash)
|
||||||
.setPrompt(prompt);
|
.prompt(prompt);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Builder asBuilder(String newUrl) {
|
public Builder asBuilder(String newUrl) {
|
||||||
return new BuilderImpl(newUrl)
|
return new BuilderImpl(newUrl)
|
||||||
.setShouldForce(shouldForce)
|
.required(shouldForce)
|
||||||
.setHash(hash)
|
.hash(hash)
|
||||||
.setPrompt(prompt);
|
.prompt(prompt);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -110,13 +110,13 @@ public final class VelocityResourcePackInfo implements ResourcePackInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BuilderImpl setShouldForce(boolean shouldForce) {
|
public BuilderImpl required(boolean shouldForce) {
|
||||||
this.shouldForce = shouldForce;
|
this.shouldForce = shouldForce;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BuilderImpl setHash(@Nullable byte[] hash) {
|
public BuilderImpl hash(@Nullable byte[] hash) {
|
||||||
if (hash != null) {
|
if (hash != null) {
|
||||||
Preconditions.checkArgument(hash.length == 20, "Hash length is not 20");
|
Preconditions.checkArgument(hash.length == 20, "Hash length is not 20");
|
||||||
this.hash = hash.clone(); // Thanks spotbugs, very helpful.
|
this.hash = hash.clone(); // Thanks spotbugs, very helpful.
|
||||||
@ -127,7 +127,7 @@ public final class VelocityResourcePackInfo implements ResourcePackInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BuilderImpl setPrompt(@Nullable Component prompt) {
|
public BuilderImpl prompt(@Nullable Component prompt) {
|
||||||
this.prompt = prompt;
|
this.prompt = prompt;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
@ -92,17 +92,17 @@ public class ConnectionRequestResults {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Status getStatus() {
|
public Status status() {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<Component> getReasonComponent() {
|
public Optional<Component> reason() {
|
||||||
return Optional.ofNullable(component);
|
return Optional.ofNullable(component);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RegisteredServer getAttemptedConnection() {
|
public RegisteredServer attemptedConnectedTo() {
|
||||||
return attemptedConnection;
|
return attemptedConnection;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,7 +66,7 @@ public class ServerListPingHandler {
|
|||||||
|
|
||||||
private CompletableFuture<ServerPing> attemptPingPassthrough(VelocityInboundConnection connection,
|
private CompletableFuture<ServerPing> attemptPingPassthrough(VelocityInboundConnection connection,
|
||||||
PingPassthroughMode mode, List<String> servers, ProtocolVersion responseProtocolVersion) {
|
PingPassthroughMode mode, List<String> servers, ProtocolVersion responseProtocolVersion) {
|
||||||
ServerPing fallback = constructLocalPing(connection.getProtocolVersion());
|
ServerPing fallback = constructLocalPing(connection.protocolVersion());
|
||||||
List<CompletableFuture<ServerPing>> pings = new ArrayList<>();
|
List<CompletableFuture<ServerPing>> pings = new ArrayList<>();
|
||||||
for (String s : servers) {
|
for (String s : servers) {
|
||||||
Optional<RegisteredServer> rs = server.getServer(s);
|
Optional<RegisteredServer> rs = server.getServer(s);
|
||||||
@ -102,7 +102,7 @@ public class ServerListPingHandler {
|
|||||||
if (response == fallback) {
|
if (response == fallback) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Optional<ModInfo> modInfo = response.getModinfo();
|
Optional<ModInfo> modInfo = response.modInfo();
|
||||||
if (modInfo.isPresent()) {
|
if (modInfo.isPresent()) {
|
||||||
return fallback.asBuilder().mods(modInfo.get()).build();
|
return fallback.asBuilder().mods(modInfo.get()).build();
|
||||||
}
|
}
|
||||||
@ -117,16 +117,16 @@ public class ServerListPingHandler {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (response.getDescriptionComponent() == null) {
|
if (response.description() == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
return new ServerPing(
|
return new ServerPing(
|
||||||
fallback.getVersion(),
|
fallback.version(),
|
||||||
fallback.getPlayers().orElse(null),
|
fallback.players().orElse(null),
|
||||||
response.getDescriptionComponent(),
|
response.description(),
|
||||||
fallback.getFavicon().orElse(null),
|
fallback.favicon().orElse(null),
|
||||||
response.getModinfo().orElse(null)
|
response.modInfo().orElse(null)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return fallback;
|
return fallback;
|
||||||
@ -145,14 +145,14 @@ public class ServerListPingHandler {
|
|||||||
*/
|
*/
|
||||||
public CompletableFuture<ServerPing> getInitialPing(VelocityInboundConnection connection) {
|
public CompletableFuture<ServerPing> getInitialPing(VelocityInboundConnection connection) {
|
||||||
VelocityConfiguration configuration = server.getConfiguration();
|
VelocityConfiguration configuration = server.getConfiguration();
|
||||||
ProtocolVersion shownVersion = ProtocolVersion.isSupported(connection.getProtocolVersion())
|
ProtocolVersion shownVersion = ProtocolVersion.isSupported(connection.protocolVersion())
|
||||||
? connection.getProtocolVersion() : ProtocolVersion.MAXIMUM_VERSION;
|
? connection.protocolVersion() : ProtocolVersion.MAXIMUM_VERSION;
|
||||||
PingPassthroughMode passthroughMode = configuration.getPingPassthrough();
|
PingPassthroughMode passthroughMode = configuration.getPingPassthrough();
|
||||||
|
|
||||||
if (passthroughMode == PingPassthroughMode.DISABLED) {
|
if (passthroughMode == PingPassthroughMode.DISABLED) {
|
||||||
return CompletableFuture.completedFuture(constructLocalPing(shownVersion));
|
return CompletableFuture.completedFuture(constructLocalPing(shownVersion));
|
||||||
} else {
|
} else {
|
||||||
String virtualHostStr = connection.getVirtualHost().map(InetSocketAddress::getHostString)
|
String virtualHostStr = connection.virtualHost().map(InetSocketAddress::getHostString)
|
||||||
.map(str -> str.toLowerCase(Locale.ROOT))
|
.map(str -> str.toLowerCase(Locale.ROOT))
|
||||||
.orElse("");
|
.orElse("");
|
||||||
List<String> serversToTry = server.getConfiguration().getForcedHosts().getOrDefault(
|
List<String> serversToTry = server.getConfiguration().getForcedHosts().getOrDefault(
|
||||||
@ -172,7 +172,7 @@ public class ServerListPingHandler {
|
|||||||
public CompletableFuture<ServerPing> getPing(VelocityInboundConnection connection) {
|
public CompletableFuture<ServerPing> getPing(VelocityInboundConnection connection) {
|
||||||
return this.getInitialPing(connection)
|
return this.getInitialPing(connection)
|
||||||
.thenCompose(ping -> server.getEventManager().fire(new ProxyPingEvent(connection, ping)))
|
.thenCompose(ping -> server.getEventManager().fire(new ProxyPingEvent(connection, ping)))
|
||||||
.thenApply(ProxyPingEvent::getPing);
|
.thenApply(ProxyPingEvent::ping);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -187,7 +187,7 @@ public class ServerListPingHandler {
|
|||||||
return this.getInitialPing(connection)
|
return this.getInitialPing(connection)
|
||||||
.thenApply(ping -> {
|
.thenApply(ping -> {
|
||||||
StringBuilder json = new StringBuilder();
|
StringBuilder json = new StringBuilder();
|
||||||
VelocityServer.getPingGsonInstance(connection.getProtocolVersion())
|
VelocityServer.getPingGsonInstance(connection.protocolVersion())
|
||||||
.toJson(ping, json);
|
.toJson(ping, json);
|
||||||
return new StatusResponse(json);
|
return new StatusResponse(json);
|
||||||
});
|
});
|
||||||
|
@ -57,7 +57,7 @@ public final class VelocityConsole extends SimpleTerminalConsole implements Cons
|
|||||||
private final VelocityServer server;
|
private final VelocityServer server;
|
||||||
private PermissionChecker permissionChecker = PermissionChecker.always(TriState.TRUE);
|
private PermissionChecker permissionChecker = PermissionChecker.always(TriState.TRUE);
|
||||||
private final @NotNull Pointers pointers = ConsoleCommandSource.super.pointers().toBuilder()
|
private final @NotNull Pointers pointers = ConsoleCommandSource.super.pointers().toBuilder()
|
||||||
.withDynamic(PermissionChecker.POINTER, this::getPermissionChecker)
|
.withDynamic(PermissionChecker.POINTER, this::permissionChecker)
|
||||||
.withDynamic(Identity.LOCALE, () -> ClosestLocaleMatcher.INSTANCE
|
.withDynamic(Identity.LOCALE, () -> ClosestLocaleMatcher.INSTANCE
|
||||||
.lookupClosest(Locale.getDefault()))
|
.lookupClosest(Locale.getDefault()))
|
||||||
.withStatic(FacetPointers.TYPE, Type.CONSOLE)
|
.withStatic(FacetPointers.TYPE, Type.CONSOLE)
|
||||||
@ -74,7 +74,7 @@ public final class VelocityConsole extends SimpleTerminalConsole implements Cons
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PermissionChecker getPermissionChecker() {
|
public PermissionChecker permissionChecker() {
|
||||||
return this.permissionChecker;
|
return this.permissionChecker;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,7 +99,7 @@ public final class VelocityConsole extends SimpleTerminalConsole implements Cons
|
|||||||
"A plugin permission provider {} provided an invalid permission function"
|
"A plugin permission provider {} provided an invalid permission function"
|
||||||
+ " for the console. This is a bug in the plugin, not in Velocity. Falling"
|
+ " for the console. This is a bug in the plugin, not in Velocity. Falling"
|
||||||
+ " back to the default permission function.",
|
+ " back to the default permission function.",
|
||||||
event.getProvider().getClass().getName());
|
event.provider().getClass().getName());
|
||||||
this.permissionChecker = PermissionChecker.always(TriState.TRUE);
|
this.permissionChecker = PermissionChecker.always(TriState.TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -59,32 +59,32 @@ public class IdentifiedKeyImpl implements IdentifiedKey {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PublicKey getSignedPublicKey() {
|
public PublicKey publicKey() {
|
||||||
return publicKey;
|
return publicKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PublicKey getSigner() {
|
public PublicKey signer() {
|
||||||
return EncryptionUtils.getYggdrasilSessionKey();
|
return EncryptionUtils.getYggdrasilSessionKey();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Instant getExpiryTemporal() {
|
public Instant signatureExpiry() {
|
||||||
return expiryTemporal;
|
return expiryTemporal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte[] getSignature() {
|
public byte[] signature() {
|
||||||
return signature.clone();
|
return signature.clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable UUID getSignatureHolder() {
|
public @Nullable UUID signatureHolder() {
|
||||||
return holder;
|
return holder;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Revision getKeyRevision() {
|
public Revision revision() {
|
||||||
return revision;
|
return revision;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,9 +172,9 @@ public class IdentifiedKeyImpl implements IdentifiedKey {
|
|||||||
|
|
||||||
IdentifiedKey that = (IdentifiedKey) o;
|
IdentifiedKey that = (IdentifiedKey) o;
|
||||||
|
|
||||||
return Objects.equal(this.getSignedPublicKey(), that.getSignedPublicKey())
|
return Objects.equal(this.publicKey(), that.publicKey())
|
||||||
&& Objects.equal(this.getExpiryTemporal(), that.getExpiryTemporal())
|
&& Objects.equal(this.signatureExpiry(), that.signatureExpiry())
|
||||||
&& Arrays.equals(this.getSignature(), that.getSignature())
|
&& Arrays.equals(this.signature(), that.signature())
|
||||||
&& Objects.equal(this.getSigner(), that.getSigner());
|
&& Objects.equal(this.signer(), that.signer());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -63,22 +63,22 @@ public class SignedChatCommand implements KeySigned {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PublicKey getSigner() {
|
public PublicKey signer() {
|
||||||
return signer;
|
return signer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Instant getExpiryTemporal() {
|
public Instant signatureExpiry() {
|
||||||
return expiry;
|
return expiry;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable byte[] getSignature() {
|
public @Nullable byte[] signature() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte[] getSalt() {
|
public byte[] salt() {
|
||||||
return salt;
|
return salt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -494,7 +494,7 @@ public class VelocityEventManager implements EventManager {
|
|||||||
final E event, final HandlersCache handlersCache) {
|
final E event, final HandlersCache handlersCache) {
|
||||||
final HandlerRegistration registration = handlersCache.handlers[0];
|
final HandlerRegistration registration = handlersCache.handlers[0];
|
||||||
if (registration.asyncType == AsyncType.ALWAYS) {
|
if (registration.asyncType == AsyncType.ALWAYS) {
|
||||||
registration.plugin.getExecutorService().execute(
|
registration.plugin.executorService().execute(
|
||||||
() -> fire(future, event, 0, true, handlersCache.handlers));
|
() -> fire(future, event, 0, true, handlersCache.handlers));
|
||||||
} else {
|
} else {
|
||||||
fire(future, event, 0, false, handlersCache.handlers);
|
fire(future, event, 0, false, handlersCache.handlers);
|
||||||
@ -613,7 +613,7 @@ public class VelocityEventManager implements EventManager {
|
|||||||
if (currentThread == firedOnThread && next.asyncType != AsyncType.ALWAYS) {
|
if (currentThread == firedOnThread && next.asyncType != AsyncType.ALWAYS) {
|
||||||
fire(future, event, index + 1, currentlyAsync, registrations);
|
fire(future, event, index + 1, currentlyAsync, registrations);
|
||||||
} else {
|
} else {
|
||||||
next.plugin.getExecutorService().execute(() ->
|
next.plugin.executorService().execute(() ->
|
||||||
fire(future, event, index + 1, true, registrations));
|
fire(future, event, index + 1, true, registrations));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -641,7 +641,7 @@ public class VelocityEventManager implements EventManager {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
registration.plugin.getExecutorService().execute(continuationTask);
|
registration.plugin.executorService().execute(continuationTask);
|
||||||
}
|
}
|
||||||
// fire will continue in another thread once the async task is
|
// fire will continue in another thread once the async task is
|
||||||
// executed and the continuation is resumed
|
// executed and the continuation is resumed
|
||||||
@ -658,6 +658,6 @@ public class VelocityEventManager implements EventManager {
|
|||||||
private static void logHandlerException(
|
private static void logHandlerException(
|
||||||
final HandlerRegistration registration, final Throwable t) {
|
final HandlerRegistration registration, final Throwable t) {
|
||||||
logger.error("Couldn't pass {} to {}", registration.eventType.getSimpleName(),
|
logger.error("Couldn't pass {} to {}", registration.eventType.getSimpleName(),
|
||||||
registration.plugin.getDescription().getId(), t);
|
registration.plugin.description().id(), t);
|
||||||
}
|
}
|
||||||
}
|
}
|
Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden Mehr anzeigen
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren