Mirror von
https://github.com/PaperMC/Velocity.git
synchronisiert 2024-11-17 05:20:14 +01:00
Initial adjustments for better support of Bedrock
Dieser Commit ist enthalten in:
Ursprung
e093c91a26
Commit
3772bc1e0b
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
+ "}";
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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<GameProfile.Property> properties);
|
||||
void setGameProfileProperties(List<JavaPlayerIdentity.Property> 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.
|
||||
|
@ -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 {
|
||||
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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,
|
@ -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<Property> properties) {
|
||||
public JavaPlayerIdentity(UUID id, String name, List<Property> 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<Property> properties) {
|
||||
public JavaPlayerIdentity(String undashedId, String name, List<Property> 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<Property> properties) {
|
||||
private JavaPlayerIdentity(UUID id, String undashedId, String name, List<Property> 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<Property> properties) {
|
||||
return new GameProfile(this.id, this.undashedId, this.name, ImmutableList.copyOf(properties));
|
||||
public JavaPlayerIdentity withProperties(List<Property> 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<Property> properties) {
|
||||
return new GameProfile(this.id, this.undashedId, this.name,
|
||||
public JavaPlayerIdentity addProperties(Iterable<Property> properties) {
|
||||
return new JavaPlayerIdentity(this.id, this.undashedId, this.name,
|
||||
ImmutableList.<Property>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.<Property>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 {
|
||||
|
@ -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 {
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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");
|
||||
|
@ -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<Property> 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();
|
||||
}
|
||||
|
||||
|
@ -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<Void> teardownFuture = new CompletableFuture<>();
|
||||
private @MonotonicNonNull List<String> 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<GameProfile.Property> properties) {
|
||||
this.profile = profile.withProperties(properties);
|
||||
public void setGameProfileProperties(List<JavaPlayerIdentity.Property> 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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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()) {
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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<GameProfile.Property> properties) {
|
||||
public static void writeProperties(ByteBuf buf, List<JavaPlayerIdentity.Property> 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<GameProfile.Property> readProperties(ByteBuf buf) {
|
||||
List<GameProfile.Property> properties = new ArrayList<>();
|
||||
public static List<JavaPlayerIdentity.Property> readProperties(ByteBuf buf) {
|
||||
List<JavaPlayerIdentity.Property> 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;
|
||||
}
|
||||
|
@ -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<GameProfile.Property> properties = ImmutableList.of();
|
||||
private List<JavaPlayerIdentity.Property> 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<GameProfile.Property> getProperties() {
|
||||
public List<JavaPlayerIdentity.Property> getProperties() {
|
||||
return properties;
|
||||
}
|
||||
|
||||
public Item setProperties(List<GameProfile.Property> properties) {
|
||||
public Item setProperties(List<JavaPlayerIdentity.Property> properties) {
|
||||
this.properties = properties;
|
||||
return this;
|
||||
}
|
||||
|
@ -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<GameProfile>,
|
||||
JsonDeserializer<GameProfile> {
|
||||
public final class JavaPlayerIdentitySerializer implements JsonSerializer<JavaPlayerIdentity>,
|
||||
JsonDeserializer<JavaPlayerIdentity> {
|
||||
|
||||
public static final GameProfileSerializer INSTANCE = new GameProfileSerializer();
|
||||
public static final JavaPlayerIdentitySerializer INSTANCE = new JavaPlayerIdentitySerializer();
|
||||
private static final Type propertyList = new TypeToken<List<Property>>() {}.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()));
|
@ -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<GameProfile.Property> properties = item.getProperties();
|
||||
List<JavaPlayerIdentity.Property> 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())
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren