diff --git a/api/src/main/java/com/velocitypowered/api/event/player/GameProfileRequestEvent.java b/api/src/main/java/com/velocitypowered/api/event/player/GameProfileRequestEvent.java index 96ad98cfc..3230e026c 100644 --- a/api/src/main/java/com/velocitypowered/api/event/player/GameProfileRequestEvent.java +++ b/api/src/main/java/com/velocitypowered/api/event/player/GameProfileRequestEvent.java @@ -9,7 +9,7 @@ package com.velocitypowered.api.event.player; import com.velocitypowered.api.event.Event; import com.velocitypowered.api.proxy.connection.InboundConnection; -import com.velocitypowered.api.util.GameProfile; +import com.velocitypowered.api.proxy.player.java.JavaPlayerIdentity; import org.checkerframework.checker.nullness.qual.Nullable; /** @@ -22,7 +22,7 @@ public interface GameProfileRequestEvent extends Event { String username(); - GameProfile initialProfile(); + JavaPlayerIdentity initialProfile(); boolean isOnlineMode(); @@ -31,14 +31,14 @@ public interface GameProfileRequestEvent extends Event { * be currently specified, the one generated by the proxy (for offline mode) or retrieved from the * Mojang session servers (for online mode) will be returned instead. * - * @return the user's {@link GameProfile} + * @return the user's {@link JavaPlayerIdentity} */ - GameProfile gameProfile(); + JavaPlayerIdentity gameProfile(); /** * Sets the game profile to use for this connection. * - * @param gameProfile the profile for this connection, {@code null} uses the original profile + * @param javaPlayerIdentity the profile for this connection, {@code null} uses the original profile */ - void setGameProfile(@Nullable GameProfile gameProfile); + void setGameProfile(@Nullable JavaPlayerIdentity javaPlayerIdentity); } diff --git a/api/src/main/java/com/velocitypowered/api/event/player/GameProfileRequestEventImpl.java b/api/src/main/java/com/velocitypowered/api/event/player/GameProfileRequestEventImpl.java index 35a7b323b..04a069268 100644 --- a/api/src/main/java/com/velocitypowered/api/event/player/GameProfileRequestEventImpl.java +++ b/api/src/main/java/com/velocitypowered/api/event/player/GameProfileRequestEventImpl.java @@ -9,7 +9,7 @@ package com.velocitypowered.api.event.player; import com.google.common.base.Preconditions; import com.velocitypowered.api.proxy.connection.InboundConnection; -import com.velocitypowered.api.util.GameProfile; +import com.velocitypowered.api.proxy.player.java.JavaPlayerIdentity; import org.checkerframework.checker.nullness.qual.Nullable; /** @@ -20,17 +20,17 @@ public final class GameProfileRequestEventImpl implements GameProfileRequestEven private final String username; private final InboundConnection connection; - private final GameProfile originalProfile; + private final JavaPlayerIdentity originalProfile; private final boolean onlineMode; - private @Nullable GameProfile gameProfile; + private @Nullable JavaPlayerIdentity javaPlayerIdentity; /** * Creates a new instance. * @param connection the connection connecting to the proxy - * @param originalProfile the original {@link GameProfile} for the user + * @param originalProfile the original {@link JavaPlayerIdentity} for the user * @param onlineMode whether or not the user connected in online or offline mode */ - public GameProfileRequestEventImpl(InboundConnection connection, GameProfile originalProfile, + public GameProfileRequestEventImpl(InboundConnection connection, JavaPlayerIdentity originalProfile, boolean onlineMode) { this.connection = Preconditions.checkNotNull(connection, "connection"); this.originalProfile = Preconditions.checkNotNull(originalProfile, "originalProfile"); @@ -49,7 +49,7 @@ public final class GameProfileRequestEventImpl implements GameProfileRequestEven } @Override - public GameProfile initialProfile() { + public JavaPlayerIdentity initialProfile() { return originalProfile; } @@ -63,28 +63,28 @@ public final class GameProfileRequestEventImpl implements GameProfileRequestEven * be currently specified, the one generated by the proxy (for offline mode) or retrieved from the * Mojang session servers (for online mode) will be returned instead. * - * @return the user's {@link GameProfile} + * @return the user's {@link JavaPlayerIdentity} */ @Override - public GameProfile gameProfile() { - return gameProfile == null ? originalProfile : gameProfile; + public JavaPlayerIdentity gameProfile() { + return javaPlayerIdentity == null ? originalProfile : javaPlayerIdentity; } /** * Sets the game profile to use for this connection. * - * @param gameProfile the profile for this connection, {@code null} uses the original profile + * @param javaPlayerIdentity the profile for this connection, {@code null} uses the original profile */ @Override - public void setGameProfile(@Nullable GameProfile gameProfile) { - this.gameProfile = gameProfile; + public void setGameProfile(@Nullable JavaPlayerIdentity javaPlayerIdentity) { + this.javaPlayerIdentity = javaPlayerIdentity; } @Override public String toString() { return "GameProfileRequestEvent{" + "username=" + username - + ", gameProfile=" + gameProfile + + ", gameProfile=" + javaPlayerIdentity + "}"; } diff --git a/api/src/main/java/com/velocitypowered/api/event/player/PlayerClientSettingsChangedEvent.java b/api/src/main/java/com/velocitypowered/api/event/player/PlayerClientSettingsChangedEvent.java index d9eb94da0..6a6d26667 100644 --- a/api/src/main/java/com/velocitypowered/api/event/player/PlayerClientSettingsChangedEvent.java +++ b/api/src/main/java/com/velocitypowered/api/event/player/PlayerClientSettingsChangedEvent.java @@ -9,11 +9,11 @@ package com.velocitypowered.api.event.player; import com.velocitypowered.api.event.Event; import com.velocitypowered.api.proxy.connection.Player; -import com.velocitypowered.api.proxy.player.ClientSettings; +import com.velocitypowered.api.proxy.player.java.JavaClientSettings; public interface PlayerClientSettingsChangedEvent extends Event { Player player(); - ClientSettings settings(); + JavaClientSettings settings(); } diff --git a/api/src/main/java/com/velocitypowered/api/event/player/PlayerClientSettingsChangedEventImpl.java b/api/src/main/java/com/velocitypowered/api/event/player/PlayerClientSettingsChangedEventImpl.java index d16df9fc4..3edfc2497 100644 --- a/api/src/main/java/com/velocitypowered/api/event/player/PlayerClientSettingsChangedEventImpl.java +++ b/api/src/main/java/com/velocitypowered/api/event/player/PlayerClientSettingsChangedEventImpl.java @@ -10,17 +10,17 @@ package com.velocitypowered.api.event.player; import com.google.common.base.MoreObjects; import com.google.common.base.Preconditions; import com.velocitypowered.api.proxy.connection.Player; -import com.velocitypowered.api.proxy.player.ClientSettings; +import com.velocitypowered.api.proxy.player.java.JavaClientSettings; public final class PlayerClientSettingsChangedEventImpl implements PlayerClientSettingsChangedEvent { private final Player player; - private final ClientSettings clientSettings; + private final JavaClientSettings javaClientSettings; - public PlayerClientSettingsChangedEventImpl(Player player, ClientSettings clientSettings) { + public PlayerClientSettingsChangedEventImpl(Player player, JavaClientSettings javaClientSettings) { this.player = Preconditions.checkNotNull(player, "player"); - this.clientSettings = Preconditions.checkNotNull(clientSettings, "playerSettings"); + this.javaClientSettings = Preconditions.checkNotNull(javaClientSettings, "playerSettings"); } @Override @@ -29,15 +29,15 @@ public final class PlayerClientSettingsChangedEventImpl implements } @Override - public ClientSettings settings() { - return clientSettings; + public JavaClientSettings settings() { + return javaClientSettings; } @Override public String toString() { return MoreObjects.toStringHelper(this) .add("player", player) - .add("playerSettings", clientSettings) + .add("playerSettings", javaClientSettings) .toString(); } } diff --git a/api/src/main/java/com/velocitypowered/api/proxy/connection/Player.java b/api/src/main/java/com/velocitypowered/api/proxy/connection/Player.java index 17806c5ad..04f2c8a05 100644 --- a/api/src/main/java/com/velocitypowered/api/proxy/connection/Player.java +++ b/api/src/main/java/com/velocitypowered/api/proxy/connection/Player.java @@ -12,23 +12,26 @@ import com.velocitypowered.api.event.player.PlayerResourcePackStatusEvent; import com.velocitypowered.api.proxy.messages.ChannelMessageSink; import com.velocitypowered.api.proxy.messages.ChannelMessageSource; import com.velocitypowered.api.proxy.messages.PluginChannelId; -import com.velocitypowered.api.proxy.player.ClientSettings; import com.velocitypowered.api.proxy.player.ConnectionRequestBuilder; +import com.velocitypowered.api.proxy.player.PlatformActions; +import com.velocitypowered.api.proxy.player.PlayerIdentity; import com.velocitypowered.api.proxy.player.TabList; +import com.velocitypowered.api.proxy.player.java.JavaClientSettings; +import com.velocitypowered.api.proxy.player.java.JavaPlayerIdentity; import com.velocitypowered.api.proxy.server.RegisteredServer; -import com.velocitypowered.api.util.GameProfile; import com.velocitypowered.api.util.ModInfo; import java.util.List; import java.util.UUID; import net.kyori.adventure.identity.Identified; import net.kyori.adventure.text.Component; +import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; /** * Represents a player who is connected to the proxy. */ public interface Player extends CommandSource, Identified, InboundConnection, - ChannelMessageSource, ChannelMessageSink { + ChannelMessageSource, ChannelMessageSink, PlatformActions { /** * Returns the player's current username. @@ -57,7 +60,7 @@ public interface Player extends CommandSource, Identified, InboundConnection, * * @return the settings */ - ClientSettings clientSettings(); + JavaClientSettings clientSettings(); /** * Returns the player's mod info if they have a modded client. @@ -93,12 +96,14 @@ public interface Player extends CommandSource, Identified, InboundConnection, * * @param properties the properties */ - void setGameProfileProperties(List properties); + void setGameProfileProperties(List properties); /** - * Returns the player's game profile. + * Returns the player's identity, which depends on what version of Minecraft they are currently + * playing. */ - GameProfile gameProfile(); + @Override + @NonNull PlayerIdentity identity(); /** * Returns the player's tab list. diff --git a/api/src/main/java/com/velocitypowered/api/proxy/player/PlatformActions.java b/api/src/main/java/com/velocitypowered/api/proxy/player/PlatformActions.java new file mode 100644 index 000000000..230e9e6c2 --- /dev/null +++ b/api/src/main/java/com/velocitypowered/api/proxy/player/PlatformActions.java @@ -0,0 +1,17 @@ +/* + * Copyright (C) 2018 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.proxy.player; + +/** + * Provides certain actions that may be implemented across platforms (or not at all). Similar to + * Adventure's {@link net.kyori.adventure.audience.Audience}, methods that are not implemented for + * a platform will silently fail. + */ +public interface PlatformActions { + +} diff --git a/api/src/main/java/com/velocitypowered/api/proxy/player/PlayerIdentity.java b/api/src/main/java/com/velocitypowered/api/proxy/player/PlayerIdentity.java new file mode 100644 index 000000000..f0a57e738 --- /dev/null +++ b/api/src/main/java/com/velocitypowered/api/proxy/player/PlayerIdentity.java @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2018 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.proxy.player; + +import net.kyori.adventure.identity.Identified; +import net.kyori.adventure.identity.Identity; +import org.checkerframework.checker.nullness.qual.NonNull; + +/** + * Indicates an identity for a given player. This is a marker interface. + */ +public interface PlayerIdentity extends Identified, Identity { + + /** + * Returns a "friendly name" to identity the player as. + * + * @return a friendly name to use for the player + */ + String name(); + + @Override + default @NonNull Identity identity() { + return this; + } +} diff --git a/api/src/main/java/com/velocitypowered/api/proxy/player/TabList.java b/api/src/main/java/com/velocitypowered/api/proxy/player/TabList.java index 2486a70a9..d080d0585 100644 --- a/api/src/main/java/com/velocitypowered/api/proxy/player/TabList.java +++ b/api/src/main/java/com/velocitypowered/api/proxy/player/TabList.java @@ -8,7 +8,7 @@ package com.velocitypowered.api.proxy.player; import com.velocitypowered.api.proxy.connection.Player; -import com.velocitypowered.api.util.GameProfile; +import com.velocitypowered.api.proxy.player.java.JavaPlayerIdentity; import java.util.Collection; import java.util.UUID; import net.kyori.adventure.text.Component; @@ -40,7 +40,7 @@ public interface TabList { void addEntry(TabListEntry entry); /** - * Removes the {@link TabListEntry} from the tab list with the {@link GameProfile} identified with + * Removes the {@link TabListEntry} from the tab list with the {@link JavaPlayerIdentity} identified with * the specified {@link UUID}. * * @param uuid of the entry @@ -74,6 +74,6 @@ public interface TabList { * @return entry */ @Deprecated - TabListEntry buildEntry(GameProfile profile, @Nullable Component displayName, int latency, + TabListEntry buildEntry(JavaPlayerIdentity profile, @Nullable Component displayName, int latency, int gameMode); } diff --git a/api/src/main/java/com/velocitypowered/api/proxy/player/TabListEntry.java b/api/src/main/java/com/velocitypowered/api/proxy/player/TabListEntry.java index 0a6e643a7..19f6a60f8 100644 --- a/api/src/main/java/com/velocitypowered/api/proxy/player/TabListEntry.java +++ b/api/src/main/java/com/velocitypowered/api/proxy/player/TabListEntry.java @@ -7,7 +7,7 @@ package com.velocitypowered.api.proxy.player; -import com.velocitypowered.api.util.GameProfile; +import com.velocitypowered.api.proxy.player.java.JavaPlayerIdentity; import net.kyori.adventure.text.Component; import org.checkerframework.checker.nullness.qual.Nullable; @@ -24,18 +24,18 @@ public interface TabListEntry { TabList parent(); /** - * Returns the {@link GameProfile} of the entry, which uniquely identifies the entry with the + * Returns the {@link JavaPlayerIdentity} of the entry, which uniquely identifies the entry with the * containing {@link java.util.UUID}, as well as deciding what is shown as the player head in the * tab list. * - * @return {@link GameProfile} of the entry + * @return {@link JavaPlayerIdentity} of the entry */ - GameProfile gameProfile(); + JavaPlayerIdentity gameProfile(); /** * Returns an optional text {@link Component}, which if present is the text * displayed for {@code this} entry in the {@link TabList}, otherwise - * {@link GameProfile#name()} is shown. + * {@link JavaPlayerIdentity#name()} is shown. * * @return text {@link Component} of name displayed in the tab list */ @@ -43,7 +43,7 @@ public interface TabListEntry { /** * Sets the text {@link Component} to be displayed for {@code this} {@link TabListEntry}. If - * {@code null}, {@link GameProfile#name()} will be shown. + * {@code null}, {@link JavaPlayerIdentity#name()} will be shown. * * @param displayName to show in the {@link TabList} for {@code this} entry * @return {@code this}, for chaining @@ -118,7 +118,7 @@ public interface TabListEntry { class Builder { private @Nullable TabList tabList; - private @Nullable GameProfile profile; + private @Nullable JavaPlayerIdentity profile; private @Nullable Component displayName; private int latency = 0; private int gameMode = 0; @@ -139,13 +139,13 @@ public interface TabListEntry { } /** - * Sets the {@link GameProfile} of the {@link TabListEntry}. + * Sets the {@link JavaPlayerIdentity} of the {@link TabListEntry}. * * @param profile to set * @return {@code this}, for chaining * @see TabListEntry#gameProfile() */ - public Builder profile(GameProfile profile) { + public Builder profile(JavaPlayerIdentity profile) { this.profile = profile; return this; } diff --git a/api/src/main/java/com/velocitypowered/api/proxy/player/ClientSettings.java b/api/src/main/java/com/velocitypowered/api/proxy/player/java/JavaClientSettings.java similarity index 85% rename from api/src/main/java/com/velocitypowered/api/proxy/player/ClientSettings.java rename to api/src/main/java/com/velocitypowered/api/proxy/player/java/JavaClientSettings.java index 723bf6df3..6cd85cbb7 100644 --- a/api/src/main/java/com/velocitypowered/api/proxy/player/ClientSettings.java +++ b/api/src/main/java/com/velocitypowered/api/proxy/player/java/JavaClientSettings.java @@ -5,21 +5,21 @@ * reference the LICENSE file in the api top-level directory. */ -package com.velocitypowered.api.proxy.player; +package com.velocitypowered.api.proxy.player.java; import java.util.Locale; /** * Represents the client settings for the player. */ -public interface ClientSettings { +public interface JavaClientSettings { /** * Returns the locale of the Minecraft client. * * @return the client locale */ - Locale getLocale(); + Locale locale(); /** * Returns the client's view distance. This does not guarantee the client will see this many @@ -27,14 +27,14 @@ public interface ClientSettings { * * @return the client view distance */ - byte getViewDistance(); + byte viewDistance(); /** * Returns the chat setting for the client. * * @return the chat setting */ - ChatMode getChatMode(); + ChatMode chatMode(); /** * Returns whether or not the client has chat colors disabled. @@ -48,14 +48,14 @@ public interface ClientSettings { * * @return the skin parts for the client */ - SkinParts getSkinParts(); + SkinParts skinParts(); /** * Returns the primary hand of the client. * * @return the primary hand of the client */ - MainHand getMainHand(); + MainHand mainHand(); enum ChatMode { SHOWN, diff --git a/api/src/main/java/com/velocitypowered/api/util/GameProfile.java b/api/src/main/java/com/velocitypowered/api/proxy/player/java/JavaPlayerIdentity.java similarity index 74% rename from api/src/main/java/com/velocitypowered/api/util/GameProfile.java rename to api/src/main/java/com/velocitypowered/api/proxy/player/java/JavaPlayerIdentity.java index c71563860..9c9c19d92 100644 --- a/api/src/main/java/com/velocitypowered/api/util/GameProfile.java +++ b/api/src/main/java/com/velocitypowered/api/proxy/player/java/JavaPlayerIdentity.java @@ -5,10 +5,12 @@ * reference the LICENSE file in the api top-level directory. */ -package com.velocitypowered.api.util; +package com.velocitypowered.api.proxy.player.java; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; +import com.velocitypowered.api.proxy.player.PlayerIdentity; +import com.velocitypowered.api.util.UuidUtils; import java.util.List; import java.util.UUID; import net.kyori.adventure.identity.Identified; @@ -17,9 +19,9 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.jetbrains.annotations.NotNull; /** - * Represents a Mojang game profile. This class is immutable. + * Represents a {@code Minecraft: Java Edition} player identity. */ -public final class GameProfile implements Identified, Identity { +public final class JavaPlayerIdentity implements Identified, PlayerIdentity { private final UUID id; private final String undashedId; @@ -32,7 +34,7 @@ public final class GameProfile implements Identified, Identity { * @param name the profile's username * @param properties properties for the profile */ - public GameProfile(UUID id, String name, List properties) { + public JavaPlayerIdentity(UUID id, String name, List properties) { this(Preconditions.checkNotNull(id, "id"), UuidUtils.toUndashed(id), Preconditions.checkNotNull(name, "name"), ImmutableList.copyOf(properties)); } @@ -43,12 +45,12 @@ public final class GameProfile implements Identified, Identity { * @param name the profile's username * @param properties properties for the profile */ - public GameProfile(String undashedId, String name, List properties) { + public JavaPlayerIdentity(String undashedId, String name, List properties) { this(UuidUtils.fromUndashed(Preconditions.checkNotNull(undashedId, "undashedId")), undashedId, Preconditions.checkNotNull(name, "name"), ImmutableList.copyOf(properties)); } - private GameProfile(UUID id, String undashedId, String name, List properties) { + private JavaPlayerIdentity(UUID id, String undashedId, String name, List properties) { this.id = id; this.undashedId = undashedId; this.name = name; @@ -94,8 +96,8 @@ public final class GameProfile implements Identified, Identity { * @param id the new unique id * @return the new {@code GameProfile} */ - public GameProfile withUuid(UUID id) { - return new GameProfile(Preconditions.checkNotNull(id, "id"), UuidUtils.toUndashed(id), + public JavaPlayerIdentity withUuid(UUID id) { + return new JavaPlayerIdentity(Preconditions.checkNotNull(id, "id"), UuidUtils.toUndashed(id), this.name, this.properties); } @@ -105,10 +107,10 @@ public final class GameProfile implements Identified, Identity { * @param undashedId the new undashed id * @return the new {@code GameProfile} */ - public GameProfile withUndashedId(String undashedId) { - return new GameProfile( - UuidUtils.fromUndashed(Preconditions.checkNotNull(undashedId, "undashedId")), undashedId, - this.name, this.properties); + public JavaPlayerIdentity withUndashedId(String undashedId) { + return new JavaPlayerIdentity( + UuidUtils.fromUndashed(Preconditions.checkNotNull(undashedId, "undashedId")), + undashedId, this.name, this.properties); } /** @@ -117,8 +119,9 @@ public final class GameProfile implements Identified, Identity { * @param name the new name * @return the new {@code GameProfile} */ - public GameProfile withName(String name) { - return new GameProfile(this.id, this.undashedId, Preconditions.checkNotNull(name, "name"), + public JavaPlayerIdentity withName(String name) { + return new JavaPlayerIdentity(this.id, this.undashedId, + Preconditions.checkNotNull(name, "name"), this.properties); } @@ -128,8 +131,9 @@ public final class GameProfile implements Identified, Identity { * @param properties the new properties * @return the new {@code GameProfile} */ - public GameProfile withProperties(List properties) { - return new GameProfile(this.id, this.undashedId, this.name, ImmutableList.copyOf(properties)); + public JavaPlayerIdentity withProperties(List properties) { + return new JavaPlayerIdentity(this.id, this.undashedId, this.name, + ImmutableList.copyOf(properties)); } /** @@ -139,8 +143,8 @@ public final class GameProfile implements Identified, Identity { * @param properties the properties to add * @return the new {@code GameProfile} */ - public GameProfile addProperties(Iterable properties) { - return new GameProfile(this.id, this.undashedId, this.name, + public JavaPlayerIdentity addProperties(Iterable properties) { + return new JavaPlayerIdentity(this.id, this.undashedId, this.name, ImmutableList.builder().addAll(this.properties).addAll(properties).build()); } @@ -151,8 +155,8 @@ public final class GameProfile implements Identified, Identity { * @param property the property to add * @return the new {@code GameProfile} */ - public GameProfile addProperty(Property property) { - return new GameProfile(this.id, this.undashedId, this.name, + public JavaPlayerIdentity addProperty(Property property) { + return new JavaPlayerIdentity(this.id, this.undashedId, this.name, ImmutableList.builder().addAll(this.properties).add(property).build()); } @@ -162,9 +166,9 @@ public final class GameProfile implements Identified, Identity { * @param username the username to use * @return the new offline-mode game profile */ - public static GameProfile forOfflinePlayer(String username) { + public static JavaPlayerIdentity forOfflinePlayer(String username) { Preconditions.checkNotNull(username, "username"); - return new GameProfile(UuidUtils.generateOfflinePlayerUuid(username), username, + return new JavaPlayerIdentity(UuidUtils.generateOfflinePlayerUuid(username), username, ImmutableList.of()); } @@ -183,7 +187,8 @@ public final class GameProfile implements Identified, Identity { } /** - * Represents a Mojang profile property. Just like {@link GameProfile}, this class is immutable. + * Represents a Mojang profile property. Just like {@link JavaPlayerIdentity}, this class is + * immutable. */ public static final class Property { diff --git a/api/src/main/java/com/velocitypowered/api/proxy/player/SkinParts.java b/api/src/main/java/com/velocitypowered/api/proxy/player/java/SkinParts.java similarity index 94% rename from api/src/main/java/com/velocitypowered/api/proxy/player/SkinParts.java rename to api/src/main/java/com/velocitypowered/api/proxy/player/java/SkinParts.java index e897dd0f2..030704c8b 100644 --- a/api/src/main/java/com/velocitypowered/api/proxy/player/SkinParts.java +++ b/api/src/main/java/com/velocitypowered/api/proxy/player/java/SkinParts.java @@ -5,7 +5,7 @@ * reference the LICENSE file in the api top-level directory. */ -package com.velocitypowered.api.proxy.player; +package com.velocitypowered.api.proxy.player.java; public final class SkinParts { diff --git a/proxy/src/main/java/com/velocitypowered/proxy/VelocityServer.java b/proxy/src/main/java/com/velocitypowered/proxy/VelocityServer.java index fc22b7a22..2c324f606 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/VelocityServer.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/VelocityServer.java @@ -32,10 +32,10 @@ import com.velocitypowered.api.plugin.PluginContainer; import com.velocitypowered.api.plugin.PluginManager; import com.velocitypowered.api.proxy.ProxyServer; import com.velocitypowered.api.proxy.connection.Player; +import com.velocitypowered.api.proxy.player.java.JavaPlayerIdentity; import com.velocitypowered.api.proxy.server.RegisteredServer; import com.velocitypowered.api.proxy.server.ServerInfo; import com.velocitypowered.api.util.Favicon; -import com.velocitypowered.api.util.GameProfile; import com.velocitypowered.api.util.ProxyVersion; import com.velocitypowered.proxy.command.VelocityCommandManager; import com.velocitypowered.proxy.command.builtin.GlistCommand; @@ -49,7 +49,7 @@ import com.velocitypowered.proxy.event.VelocityEventManager; import com.velocitypowered.proxy.network.ConnectionManager; import com.velocitypowered.proxy.network.ProtocolUtils; import com.velocitypowered.proxy.network.serialization.FaviconSerializer; -import com.velocitypowered.proxy.network.serialization.GameProfileSerializer; +import com.velocitypowered.proxy.network.serialization.JavaPlayerIdentitySerializer; import com.velocitypowered.proxy.plugin.VelocityPluginManager; import com.velocitypowered.proxy.scheduler.VelocityScheduler; import com.velocitypowered.proxy.server.ServerMap; @@ -111,7 +111,7 @@ public class VelocityServer implements ProxyServer, ForwardingAudience { private static final Logger logger = LogManager.getLogger(VelocityServer.class); public static final Gson GENERAL_GSON = new GsonBuilder() .registerTypeHierarchyAdapter(Favicon.class, FaviconSerializer.INSTANCE) - .registerTypeHierarchyAdapter(GameProfile.class, GameProfileSerializer.INSTANCE) + .registerTypeHierarchyAdapter(JavaPlayerIdentity.class, JavaPlayerIdentitySerializer.INSTANCE) .create(); private static final Gson PRE_1_16_PING_SERIALIZER = ProtocolUtils .getJsonChatSerializer(ProtocolVersion.MINECRAFT_1_15_2) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/ConnectionType.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/ConnectionType.java index 4820ce688..b6f8c55b5 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/ConnectionType.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/ConnectionType.java @@ -17,7 +17,7 @@ package com.velocitypowered.proxy.connection; -import com.velocitypowered.api.util.GameProfile; +import com.velocitypowered.api.proxy.player.java.JavaPlayerIdentity; import com.velocitypowered.proxy.config.PlayerInfoForwarding; import com.velocitypowered.proxy.connection.backend.BackendConnectionPhase; import com.velocitypowered.proxy.connection.client.ClientConnectionPhase; @@ -42,13 +42,13 @@ public interface ConnectionType { BackendConnectionPhase getInitialBackendPhase(); /** - * Adds properties to the {@link GameProfile} if required. If any properties - * are added, the returned {@link GameProfile} will be a copy. + * Adds properties to the {@link JavaPlayerIdentity} if required. If any properties + * are added, the returned {@link JavaPlayerIdentity} will be a copy. * - * @param original The original {@link GameProfile} + * @param original The original {@link JavaPlayerIdentity} * @param forwardingType The Velocity {@link PlayerInfoForwarding} - * @return The {@link GameProfile} with the properties added in. + * @return The {@link JavaPlayerIdentity} with the properties added in. */ - GameProfile addGameProfileTokensIfRequired(GameProfile original, + JavaPlayerIdentity addGameProfileTokensIfRequired(JavaPlayerIdentity original, PlayerInfoForwarding forwardingType); } diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/backend/LoginSessionHandler.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/backend/LoginSessionHandler.java index f2cfda23e..cfcfab130 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/backend/LoginSessionHandler.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/backend/LoginSessionHandler.java @@ -17,7 +17,8 @@ package com.velocitypowered.proxy.connection.backend; -import com.velocitypowered.api.util.GameProfile; +import com.velocitypowered.api.proxy.player.PlayerIdentity; +import com.velocitypowered.api.proxy.player.java.JavaPlayerIdentity; import com.velocitypowered.proxy.VelocityServer; import com.velocitypowered.proxy.config.PlayerInfoForwarding; import com.velocitypowered.proxy.config.VelocityConfiguration; @@ -41,6 +42,7 @@ import java.net.InetSocketAddress; import java.net.SocketAddress; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; +import java.util.List; import java.util.concurrent.CompletableFuture; import javax.crypto.Mac; import javax.crypto.SecretKey; @@ -78,7 +80,7 @@ public class LoginSessionHandler implements MinecraftSessionHandler { .getChannel().equals(VelocityConstants.VELOCITY_IP_FORWARDING_CHANNEL)) { ByteBuf forwardingData = createForwardingData(configuration.getForwardingSecret(), cleanRemoteAddress(serverConn.player().remoteAddress()), - serverConn.player().gameProfile()); + serverConn.player().identity()); ServerboundLoginPluginResponsePacket response = new ServerboundLoginPluginResponsePacket( packet.getId(), true, forwardingData); mc.write(response); @@ -164,14 +166,18 @@ public class LoginSessionHandler implements MinecraftSessionHandler { } private static ByteBuf createForwardingData(byte[] hmacSecret, String address, - GameProfile profile) { + PlayerIdentity profile) { ByteBuf forwarded = Unpooled.buffer(2048); try { ProtocolUtils.writeVarInt(forwarded, VelocityConstants.FORWARDING_VERSION); ProtocolUtils.writeString(forwarded, address); ProtocolUtils.writeUuid(forwarded, profile.uuid()); ProtocolUtils.writeString(forwarded, profile.name()); - ProtocolUtils.writeProperties(forwarded, profile.properties()); + if (profile instanceof JavaPlayerIdentity) { + ProtocolUtils.writeProperties(forwarded, ((JavaPlayerIdentity) profile).properties()); + } else { + ProtocolUtils.writeProperties(forwarded, List.of()); + } SecretKey key = new SecretKeySpec(hmacSecret, "HmacSHA256"); Mac mac = Mac.getInstance("HmacSHA256"); diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/backend/VelocityServerConnection.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/backend/VelocityServerConnection.java index 5053cb19e..57b5826f2 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/backend/VelocityServerConnection.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/backend/VelocityServerConnection.java @@ -28,8 +28,10 @@ import com.velocitypowered.api.network.ProtocolVersion; import com.velocitypowered.api.proxy.connection.ServerConnection; import com.velocitypowered.api.proxy.messages.PluginChannelId; import com.velocitypowered.api.proxy.player.ConnectionRequestBuilder; +import com.velocitypowered.api.proxy.player.java.JavaPlayerIdentity; +import com.velocitypowered.api.proxy.player.java.JavaPlayerIdentity.Property; import com.velocitypowered.api.proxy.server.ServerInfo; -import com.velocitypowered.api.util.GameProfile.Property; +import com.velocitypowered.api.util.UuidUtils; import com.velocitypowered.proxy.VelocityServer; import com.velocitypowered.proxy.config.PlayerInfoForwarding; import com.velocitypowered.proxy.connection.ConnectionTypes; @@ -131,15 +133,18 @@ public class VelocityServerConnection implements MinecraftConnectionAssociation, if (!(playerRemoteAddress instanceof InetSocketAddress)) { return playerConnectedHostname(); } + + List properties = proxyPlayer.identity() instanceof JavaPlayerIdentity + ? ((JavaPlayerIdentity) proxyPlayer.identity()).properties() + : List.of(); StringBuilder data = new StringBuilder() .append(playerConnectedHostname()) .append('\0') .append(((InetSocketAddress) proxyPlayer.remoteAddress()).getHostString()) .append('\0') - .append(proxyPlayer.gameProfile().undashedId()) + .append(UuidUtils.toUndashed(proxyPlayer.id())) .append('\0'); - GENERAL_GSON - .toJson(propertiesTransform.apply(proxyPlayer.gameProfile().properties()), data); + GENERAL_GSON.toJson(propertiesTransform.apply(properties), data); return data.toString(); } @@ -234,7 +239,7 @@ public class VelocityServerConnection implements MinecraftConnectionAssociation, @Override public String toString() { - return "[server connection] " + proxyPlayer.gameProfile().name() + " -> " + return "[server connection] " + proxyPlayer.identity().name() + " -> " + registeredServer.serverInfo().name(); } diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ConnectedPlayer.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ConnectedPlayer.java index 048d55c1f..ef160168c 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ConnectedPlayer.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ConnectedPlayer.java @@ -44,10 +44,11 @@ import com.velocitypowered.api.permission.Tristate; import com.velocitypowered.api.proxy.connection.Player; import com.velocitypowered.api.proxy.connection.ServerConnection; import com.velocitypowered.api.proxy.messages.PluginChannelId; -import com.velocitypowered.api.proxy.player.ClientSettings; import com.velocitypowered.api.proxy.player.ConnectionRequestBuilder; +import com.velocitypowered.api.proxy.player.PlayerIdentity; +import com.velocitypowered.api.proxy.player.java.JavaClientSettings; +import com.velocitypowered.api.proxy.player.java.JavaPlayerIdentity; import com.velocitypowered.api.proxy.server.RegisteredServer; -import com.velocitypowered.api.util.GameProfile; import com.velocitypowered.api.util.ModInfo; import com.velocitypowered.proxy.VelocityServer; import com.velocitypowered.proxy.connection.MinecraftConnection; @@ -102,6 +103,7 @@ import org.apache.logging.log4j.Logger; import org.checkerframework.checker.nullness.qual.MonotonicNonNull; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; +import org.jetbrains.annotations.NotNull; public class ConnectedPlayer implements MinecraftConnectionAssociation, Player { @@ -112,20 +114,19 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player { private static final Logger logger = LogManager.getLogger(ConnectedPlayer.class); - private final Identity identity = new IdentityImpl(); /** * The actual Minecraft connection. This is actually a wrapper object around the Netty channel. */ private final MinecraftConnection connection; private final @Nullable InetSocketAddress virtualHost; - private GameProfile profile; + private PlayerIdentity identity; private PermissionFunction permissionFunction; private int tryIndex = 0; private long ping = -1; private final boolean onlineMode; private @Nullable VelocityServerConnection connectedServer; private @Nullable VelocityServerConnection connectionInFlight; - private @Nullable ClientSettings settings; + private @Nullable JavaClientSettings settings; private @Nullable ModInfo modInfo; private Component playerListHeader = Component.empty(); private Component playerListFooter = Component.empty(); @@ -136,10 +137,10 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player { private final CompletableFuture teardownFuture = new CompletableFuture<>(); private @MonotonicNonNull List serversToTry = null; - ConnectedPlayer(VelocityServer server, GameProfile profile, MinecraftConnection connection, + ConnectedPlayer(VelocityServer server, PlayerIdentity identity, MinecraftConnection connection, @Nullable InetSocketAddress virtualHost, boolean onlineMode) { this.server = server; - this.profile = profile; + this.identity = identity; this.connection = connection; this.virtualHost = virtualHost; this.permissionFunction = PermissionFunction.ALWAYS_UNDEFINED; @@ -154,19 +155,14 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player { } } - @Override - public @NonNull Identity identity() { - return this.identity; - } - @Override public String username() { - return profile.name(); + return identity.name(); } @Override public UUID id() { - return profile.uuid(); + return identity.uuid(); } @Override @@ -187,8 +183,8 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player { } @Override - public GameProfile gameProfile() { - return profile; + public @NotNull PlayerIdentity identity() { + return identity; } public MinecraftConnection getConnection() { @@ -210,12 +206,12 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player { } @Override - public ClientSettings clientSettings() { - return settings == null ? ClientSettingsWrapper.DEFAULT : this.settings; + public JavaClientSettings clientSettings() { + return settings == null ? JavaClientSettingsWrapper.DEFAULT : this.settings; } void setPlayerSettings(ServerboundClientSettingsPacket settings) { - ClientSettingsWrapper cs = new ClientSettingsWrapper(settings); + JavaClientSettingsWrapper cs = new JavaClientSettingsWrapper(settings); this.settings = cs; server.eventManager().fireAndForget(new PlayerClientSettingsChangedEventImpl(this, cs)); } @@ -255,7 +251,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player { } public Component translateMessage(Component message) { - Locale locale = this.settings == null ? Locale.getDefault() : this.settings.getLocale(); + Locale locale = this.settings == null ? Locale.getDefault() : this.settings.locale(); return GlobalTranslator.render(message, locale); } @@ -377,8 +373,10 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player { } @Override - public void setGameProfileProperties(List properties) { - this.profile = profile.withProperties(properties); + public void setGameProfileProperties(List properties) { + if (this.identity instanceof JavaPlayerIdentity) { + this.identity = ((JavaPlayerIdentity) identity).withProperties(properties); + } } @Override @@ -729,7 +727,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player { @Override public String toString() { - return "[connected player] " + profile.name() + " (" + remoteAddress() + ")"; + return "[connected player] " + identity.name() + " (" + remoteAddress() + ")"; } @Override @@ -840,13 +838,6 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player { return minecraftOrFmlMessage || knownChannels.contains(message.getChannel()); } - private class IdentityImpl implements Identity { - @Override - public @NonNull UUID uuid() { - return ConnectedPlayer.this.id(); - } - } - private class ConnectionRequestBuilderImpl implements ConnectionRequestBuilder { private final RegisteredServer toConnect; diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientSettingsWrapper.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/client/JavaClientSettingsWrapper.java similarity index 78% rename from proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientSettingsWrapper.java rename to proxy/src/main/java/com/velocitypowered/proxy/connection/client/JavaClientSettingsWrapper.java index 773ad2b70..d5c64d708 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientSettingsWrapper.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/client/JavaClientSettingsWrapper.java @@ -17,28 +17,28 @@ package com.velocitypowered.proxy.connection.client; -import com.velocitypowered.api.proxy.player.ClientSettings; -import com.velocitypowered.api.proxy.player.SkinParts; +import com.velocitypowered.api.proxy.player.java.JavaClientSettings; +import com.velocitypowered.api.proxy.player.java.SkinParts; import com.velocitypowered.proxy.network.packet.serverbound.ServerboundClientSettingsPacket; import java.util.Locale; import org.checkerframework.checker.nullness.qual.Nullable; -public class ClientSettingsWrapper implements ClientSettings { +public class JavaClientSettingsWrapper implements JavaClientSettings { - static final ClientSettings DEFAULT = new ClientSettingsWrapper( + static final JavaClientSettings DEFAULT = new JavaClientSettingsWrapper( new ServerboundClientSettingsPacket("en_US", (byte) 10, 0, true, (short) 127, 1)); private final ServerboundClientSettingsPacket settings; private final SkinParts parts; private @Nullable Locale locale; - ClientSettingsWrapper(ServerboundClientSettingsPacket settings) { + JavaClientSettingsWrapper(ServerboundClientSettingsPacket settings) { this.settings = settings; this.parts = new SkinParts((byte) settings.getSkinParts()); } @Override - public Locale getLocale() { + public Locale locale() { if (locale == null) { locale = Locale.forLanguageTag(settings.getLocale().replaceAll("_", "-")); } @@ -46,12 +46,12 @@ public class ClientSettingsWrapper implements ClientSettings { } @Override - public byte getViewDistance() { + public byte viewDistance() { return settings.getViewDistance(); } @Override - public ChatMode getChatMode() { + public ChatMode chatMode() { int chat = settings.getChatVisibility(); if (chat < 0 || chat > 2) { return ChatMode.SHOWN; @@ -65,12 +65,12 @@ public class ClientSettingsWrapper implements ClientSettings { } @Override - public SkinParts getSkinParts() { + public SkinParts skinParts() { return parts; } @Override - public MainHand getMainHand() { + public MainHand mainHand() { return settings.getMainHand() == 1 ? MainHand.RIGHT : MainHand.LEFT; } diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/client/LoginSessionHandler.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/client/LoginSessionHandler.java index 943a9e853..ab6d14de6 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/client/LoginSessionHandler.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/client/LoginSessionHandler.java @@ -38,8 +38,8 @@ import com.velocitypowered.api.event.player.PostLoginEventImpl; import com.velocitypowered.api.event.player.PreLoginEvent; import com.velocitypowered.api.event.player.PreLoginEventImpl; import com.velocitypowered.api.permission.PermissionFunction; +import com.velocitypowered.api.proxy.player.java.JavaPlayerIdentity; import com.velocitypowered.api.proxy.server.RegisteredServer; -import com.velocitypowered.api.util.GameProfile; import com.velocitypowered.api.util.UuidUtils; import com.velocitypowered.proxy.VelocityServer; import com.velocitypowered.proxy.config.PlayerInfoForwarding; @@ -151,7 +151,7 @@ public class LoginSessionHandler implements MinecraftSessionHandler { if (profileResponse.getStatusCode() == 200) { // All went well, initialize the session. initializePlayer(GENERAL_GSON.fromJson(profileResponse.getResponseBody(), - GameProfile.class), true); + JavaPlayerIdentity.class), true); } else if (profileResponse.getStatusCode() == 204) { // Apparently an offline-mode user logged onto this online-mode proxy. inbound.disconnect(Component.translatable("velocity.error.online-mode-only", @@ -206,7 +206,7 @@ public class LoginSessionHandler implements MinecraftSessionHandler { this.verify = Arrays.copyOf(request.getVerifyToken(), 4); mcConnection.write(request); } else { - initializePlayer(GameProfile.forOfflinePlayer(login.getUsername()), false); + initializePlayer(JavaPlayerIdentity.forOfflinePlayer(login.getUsername()), false); } }, mcConnection.eventLoop()) .exceptionally((ex) -> { @@ -225,13 +225,13 @@ public class LoginSessionHandler implements MinecraftSessionHandler { return request; } - private void initializePlayer(GameProfile profile, boolean onlineMode) { + private void initializePlayer(JavaPlayerIdentity profile, boolean onlineMode) { // Some connection types may need to alter the game profile. profile = mcConnection.getType().addGameProfileTokensIfRequired(profile, server.configuration().getPlayerInfoForwardingMode()); GameProfileRequestEvent profileRequestEvent = new GameProfileRequestEventImpl(inbound, profile, onlineMode); - final GameProfile finalProfile = profile; + final JavaPlayerIdentity finalProfile = profile; server.eventManager().fire(profileRequestEvent).thenComposeAsync(profileEvent -> { if (mcConnection.isClosed()) { diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/forge/legacy/LegacyForgeConnectionType.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/forge/legacy/LegacyForgeConnectionType.java index 5e063b285..bd9d614d9 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/forge/legacy/LegacyForgeConnectionType.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/forge/legacy/LegacyForgeConnectionType.java @@ -17,7 +17,7 @@ package com.velocitypowered.proxy.connection.forge.legacy; -import com.velocitypowered.api.util.GameProfile; +import com.velocitypowered.api.proxy.player.java.JavaPlayerIdentity; import com.velocitypowered.proxy.config.PlayerInfoForwarding; import com.velocitypowered.proxy.connection.ConnectionTypes; import com.velocitypowered.proxy.connection.util.ConnectionTypeImpl; @@ -27,8 +27,8 @@ import com.velocitypowered.proxy.connection.util.ConnectionTypeImpl; */ public class LegacyForgeConnectionType extends ConnectionTypeImpl { - private static final GameProfile.Property IS_FORGE_CLIENT_PROPERTY = - new GameProfile.Property("forgeClient", "true", ""); + private static final JavaPlayerIdentity.Property IS_FORGE_CLIENT_PROPERTY = + new JavaPlayerIdentity.Property("forgeClient", "true", ""); public LegacyForgeConnectionType() { super(LegacyForgeHandshakeClientPhase.NOT_STARTED, @@ -36,7 +36,7 @@ public class LegacyForgeConnectionType extends ConnectionTypeImpl { } @Override - public GameProfile addGameProfileTokensIfRequired(GameProfile original, + public JavaPlayerIdentity addGameProfileTokensIfRequired(JavaPlayerIdentity original, PlayerInfoForwarding forwardingType) { // We can't forward the FML token to the server when we are running in legacy forwarding mode, // since both use the "hostname" field in the handshake. We add a special property to the diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/util/ConnectionTypeImpl.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/util/ConnectionTypeImpl.java index 38735283b..7cbe3e667 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/util/ConnectionTypeImpl.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/util/ConnectionTypeImpl.java @@ -17,7 +17,7 @@ package com.velocitypowered.proxy.connection.util; -import com.velocitypowered.api.util.GameProfile; +import com.velocitypowered.api.proxy.player.java.JavaPlayerIdentity; import com.velocitypowered.proxy.config.PlayerInfoForwarding; import com.velocitypowered.proxy.connection.ConnectionType; import com.velocitypowered.proxy.connection.backend.BackendConnectionPhase; @@ -48,7 +48,7 @@ public class ConnectionTypeImpl implements ConnectionType { } @Override - public GameProfile addGameProfileTokensIfRequired(GameProfile original, + public JavaPlayerIdentity addGameProfileTokensIfRequired(JavaPlayerIdentity original, PlayerInfoForwarding forwardingType) { return original; } diff --git a/proxy/src/main/java/com/velocitypowered/proxy/network/ProtocolUtils.java b/proxy/src/main/java/com/velocitypowered/proxy/network/ProtocolUtils.java index e584aa6f4..b4c2ecaca 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/network/ProtocolUtils.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/network/ProtocolUtils.java @@ -21,7 +21,7 @@ import static com.google.common.base.Preconditions.checkArgument; import static com.velocitypowered.proxy.network.NettyPreconditions.checkFrame; import com.velocitypowered.api.network.ProtocolVersion; -import com.velocitypowered.api.util.GameProfile; +import com.velocitypowered.api.proxy.player.java.JavaPlayerIdentity; import com.velocitypowered.proxy.network.pipeline.MinecraftDecoder; import com.velocitypowered.proxy.network.serialization.VelocityLegacyHoverEventSerializer; import com.velocitypowered.proxy.util.except.QuietDecoderException; @@ -385,13 +385,13 @@ public enum ProtocolUtils { } /** - * Writes a list of {@link com.velocitypowered.api.util.GameProfile.Property} to the buffer. + * Writes a list of {@link JavaPlayerIdentity.Property} to the buffer. * @param buf the buffer to write to * @param properties the properties to serialize */ - public static void writeProperties(ByteBuf buf, List properties) { + public static void writeProperties(ByteBuf buf, List properties) { writeVarInt(buf, properties.size()); - for (GameProfile.Property property : properties) { + for (JavaPlayerIdentity.Property property : properties) { writeString(buf, property.name()); writeString(buf, property.value()); String signature = property.signature(); @@ -405,12 +405,12 @@ public enum ProtocolUtils { } /** - * Reads a list of {@link com.velocitypowered.api.util.GameProfile.Property} from the buffer. + * Reads a list of {@link JavaPlayerIdentity.Property} from the buffer. * @param buf the buffer to read from * @return the read properties */ - public static List readProperties(ByteBuf buf) { - List properties = new ArrayList<>(); + public static List readProperties(ByteBuf buf) { + List properties = new ArrayList<>(); int size = readVarInt(buf); for (int i = 0; i < size; i++) { String name = readString(buf); @@ -420,7 +420,7 @@ public enum ProtocolUtils { if (hasSignature) { signature = readString(buf); } - properties.add(new GameProfile.Property(name, value, signature)); + properties.add(new JavaPlayerIdentity.Property(name, value, signature)); } return properties; } diff --git a/proxy/src/main/java/com/velocitypowered/proxy/network/packet/clientbound/ClientboundPlayerListItemPacket.java b/proxy/src/main/java/com/velocitypowered/proxy/network/packet/clientbound/ClientboundPlayerListItemPacket.java index 0c3a5fcf5..1b1f7666c 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/network/packet/clientbound/ClientboundPlayerListItemPacket.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/network/packet/clientbound/ClientboundPlayerListItemPacket.java @@ -22,7 +22,7 @@ import com.google.common.base.VerifyException; import com.google.common.collect.ImmutableList; import com.velocitypowered.api.network.ProtocolVersion; import com.velocitypowered.api.proxy.player.TabListEntry; -import com.velocitypowered.api.util.GameProfile; +import com.velocitypowered.api.proxy.player.java.JavaPlayerIdentity; import com.velocitypowered.proxy.network.ProtocolUtils; import com.velocitypowered.proxy.network.packet.Packet; import com.velocitypowered.proxy.network.packet.PacketHandler; @@ -193,7 +193,7 @@ public class ClientboundPlayerListItemPacket implements Packet { private final @Nullable UUID uuid; private String name = ""; - private List properties = ImmutableList.of(); + private List properties = ImmutableList.of(); private int gameMode; private int latency; private @Nullable Component displayName; @@ -228,11 +228,11 @@ public class ClientboundPlayerListItemPacket implements Packet { return this; } - public List getProperties() { + public List getProperties() { return properties; } - public Item setProperties(List properties) { + public Item setProperties(List properties) { this.properties = properties; return this; } diff --git a/proxy/src/main/java/com/velocitypowered/proxy/network/serialization/GameProfileSerializer.java b/proxy/src/main/java/com/velocitypowered/proxy/network/serialization/JavaPlayerIdentitySerializer.java similarity index 70% rename from proxy/src/main/java/com/velocitypowered/proxy/network/serialization/GameProfileSerializer.java rename to proxy/src/main/java/com/velocitypowered/proxy/network/serialization/JavaPlayerIdentitySerializer.java index bc0a35550..9e388bd14 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/network/serialization/GameProfileSerializer.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/network/serialization/JavaPlayerIdentitySerializer.java @@ -25,31 +25,31 @@ import com.google.gson.JsonPrimitive; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; import com.google.gson.reflect.TypeToken; -import com.velocitypowered.api.util.GameProfile; -import com.velocitypowered.api.util.GameProfile.Property; +import com.velocitypowered.api.proxy.player.java.JavaPlayerIdentity; +import com.velocitypowered.api.proxy.player.java.JavaPlayerIdentity.Property; import java.lang.reflect.Type; import java.util.List; -public final class GameProfileSerializer implements JsonSerializer, - JsonDeserializer { +public final class JavaPlayerIdentitySerializer implements JsonSerializer, + JsonDeserializer { - public static final GameProfileSerializer INSTANCE = new GameProfileSerializer(); + public static final JavaPlayerIdentitySerializer INSTANCE = new JavaPlayerIdentitySerializer(); private static final Type propertyList = new TypeToken>() {}.getType(); - private GameProfileSerializer() { + private JavaPlayerIdentitySerializer() { } @Override - public GameProfile deserialize(JsonElement json, Type typeOfT, + public JavaPlayerIdentity deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) { JsonObject obj = json.getAsJsonObject(); - return new GameProfile(obj.get("id").getAsString(), obj.get("name").getAsString(), + return new JavaPlayerIdentity(obj.get("id").getAsString(), obj.get("name").getAsString(), context.deserialize(obj.get("properties"), propertyList)); } @Override - public JsonElement serialize(GameProfile src, Type typeOfSrc, JsonSerializationContext context) { + public JsonElement serialize(JavaPlayerIdentity src, Type typeOfSrc, JsonSerializationContext context) { JsonObject obj = new JsonObject(); obj.add("id", new JsonPrimitive(src.undashedId())); obj.add("name", new JsonPrimitive(src.name())); diff --git a/proxy/src/main/java/com/velocitypowered/proxy/tablist/VelocityTabList.java b/proxy/src/main/java/com/velocitypowered/proxy/tablist/VelocityTabList.java index d2a47e3cf..725cfeaa4 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/tablist/VelocityTabList.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/tablist/VelocityTabList.java @@ -20,7 +20,7 @@ package com.velocitypowered.proxy.tablist; import com.google.common.base.Preconditions; import com.velocitypowered.api.proxy.player.TabList; import com.velocitypowered.api.proxy.player.TabListEntry; -import com.velocitypowered.api.util.GameProfile; +import com.velocitypowered.api.proxy.player.java.JavaPlayerIdentity; import com.velocitypowered.proxy.connection.MinecraftConnection; import com.velocitypowered.proxy.connection.client.ConnectedPlayer; import com.velocitypowered.proxy.network.ProtocolUtils; @@ -130,7 +130,7 @@ public class VelocityTabList implements TabList { } @Override - public TabListEntry buildEntry(GameProfile profile, + public TabListEntry buildEntry(JavaPlayerIdentity profile, net.kyori.adventure.text.@Nullable Component displayName, int latency, int gameMode) { return new VelocityTabListEntry(this, profile, displayName, latency, gameMode); } @@ -158,13 +158,13 @@ public class VelocityTabList implements TabList { case ClientboundPlayerListItemPacket.ADD_PLAYER: { // ensure that name and properties are available String name = item.getName(); - List properties = item.getProperties(); + List properties = item.getProperties(); if (name == null || properties == null) { throw new IllegalStateException("Got null game profile for ADD_PLAYER"); } entries.put(uuid, (VelocityTabListEntry) TabListEntry.builder() .tabList(this) - .profile(new GameProfile(uuid, name, properties)) + .profile(new JavaPlayerIdentity(uuid, name, properties)) .displayName(item.getDisplayName()) .latency(item.getLatency()) .gameMode(item.getGameMode()) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/tablist/VelocityTabListEntry.java b/proxy/src/main/java/com/velocitypowered/proxy/tablist/VelocityTabListEntry.java index da74f3b20..bcd12870d 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/tablist/VelocityTabListEntry.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/tablist/VelocityTabListEntry.java @@ -19,7 +19,7 @@ package com.velocitypowered.proxy.tablist; import com.velocitypowered.api.proxy.player.TabList; import com.velocitypowered.api.proxy.player.TabListEntry; -import com.velocitypowered.api.util.GameProfile; +import com.velocitypowered.api.proxy.player.java.JavaPlayerIdentity; import com.velocitypowered.proxy.network.packet.clientbound.ClientboundPlayerListItemPacket; import net.kyori.adventure.text.Component; import org.checkerframework.checker.nullness.qual.Nullable; @@ -27,12 +27,12 @@ import org.checkerframework.checker.nullness.qual.Nullable; public class VelocityTabListEntry implements TabListEntry { private final VelocityTabList tabList; - private final GameProfile profile; + private final JavaPlayerIdentity profile; private @Nullable Component displayName; private int latency; private int gameMode; - VelocityTabListEntry(VelocityTabList tabList, GameProfile profile, + VelocityTabListEntry(VelocityTabList tabList, JavaPlayerIdentity profile, @Nullable Component displayName, int latency, int gameMode) { this.tabList = tabList; this.profile = profile; @@ -47,7 +47,7 @@ public class VelocityTabListEntry implements TabListEntry { } @Override - public GameProfile gameProfile() { + public JavaPlayerIdentity gameProfile() { return profile; } diff --git a/proxy/src/main/java/com/velocitypowered/proxy/tablist/VelocityTabListEntryLegacy.java b/proxy/src/main/java/com/velocitypowered/proxy/tablist/VelocityTabListEntryLegacy.java index b81614fd7..b62c55dc9 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/tablist/VelocityTabListEntryLegacy.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/tablist/VelocityTabListEntryLegacy.java @@ -18,13 +18,13 @@ package com.velocitypowered.proxy.tablist; import com.velocitypowered.api.proxy.player.TabListEntry; -import com.velocitypowered.api.util.GameProfile; +import com.velocitypowered.api.proxy.player.java.JavaPlayerIdentity; import net.kyori.adventure.text.Component; import org.checkerframework.checker.nullness.qual.Nullable; public class VelocityTabListEntryLegacy extends VelocityTabListEntry { - VelocityTabListEntryLegacy(VelocityTabListLegacy tabList, GameProfile profile, + VelocityTabListEntryLegacy(VelocityTabListLegacy tabList, JavaPlayerIdentity profile, @Nullable Component displayName, int latency, int gameMode) { super(tabList, profile, displayName, latency, gameMode); } diff --git a/proxy/src/main/java/com/velocitypowered/proxy/tablist/VelocityTabListLegacy.java b/proxy/src/main/java/com/velocitypowered/proxy/tablist/VelocityTabListLegacy.java index 4bd396de3..d48681ad7 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/tablist/VelocityTabListLegacy.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/tablist/VelocityTabListLegacy.java @@ -19,7 +19,7 @@ package com.velocitypowered.proxy.tablist; import com.google.common.collect.ImmutableList; import com.velocitypowered.api.proxy.player.TabListEntry; -import com.velocitypowered.api.util.GameProfile; +import com.velocitypowered.api.proxy.player.java.JavaPlayerIdentity; import com.velocitypowered.proxy.connection.client.ConnectedPlayer; import com.velocitypowered.proxy.network.packet.clientbound.ClientboundPlayerListItemPacket; import com.velocitypowered.proxy.network.packet.clientbound.ClientboundPlayerListItemPacket.Item; @@ -89,7 +89,7 @@ public class VelocityTabListLegacy extends VelocityTabList { nameMapping.put(item.getName(), uuid); entries.put(uuid, (VelocityTabListEntry) TabListEntry.builder() .tabList(this) - .profile(new GameProfile(uuid, item.getName(), ImmutableList.of())) + .profile(new JavaPlayerIdentity(uuid, item.getName(), ImmutableList.of())) .latency(item.getLatency()) .build()); } @@ -127,7 +127,7 @@ public class VelocityTabListLegacy extends VelocityTabList { } @Override - public TabListEntry buildEntry(GameProfile profile, @Nullable Component displayName, int latency, + public TabListEntry buildEntry(JavaPlayerIdentity profile, @Nullable Component displayName, int latency, int gameMode) { return new VelocityTabListEntryLegacy(this, profile, displayName, latency, gameMode); }