Mirror von
https://github.com/PaperMC/Velocity.git
synchronisiert 2024-11-17 05:20:14 +01:00
Merge pull request #523 from Artuto/dev/1.1.0
Add support for retrieving the Player's client brand
Dieser Commit ist enthalten in:
Commit
1b32f56168
@ -218,4 +218,11 @@ public interface Player extends CommandSource, Identified, InboundConnection,
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
boolean sendPluginMessage(ChannelIdentifier identifier, byte[] data);
|
boolean sendPluginMessage(ChannelIdentifier identifier, byte[] data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the player's client brand.
|
||||||
|
*
|
||||||
|
* @return the player's client brand
|
||||||
|
*/
|
||||||
|
@Nullable String getClientBrand();
|
||||||
}
|
}
|
||||||
|
@ -230,6 +230,7 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
|
|||||||
player.getKnownChannels().removeAll(PluginMessageUtil.getChannels(packet));
|
player.getKnownChannels().removeAll(PluginMessageUtil.getChannels(packet));
|
||||||
backendConn.write(packet.retain());
|
backendConn.write(packet.retain());
|
||||||
} else if (PluginMessageUtil.isMcBrand(packet)) {
|
} else if (PluginMessageUtil.isMcBrand(packet)) {
|
||||||
|
player.setClientBrand(PluginMessageUtil.readBrandMessage(packet.content()));
|
||||||
backendConn.write(PluginMessageUtil
|
backendConn.write(PluginMessageUtil
|
||||||
.rewriteMinecraftBrand(packet, server.getVersion(), player.getProtocolVersion()));
|
.rewriteMinecraftBrand(packet, server.getVersion(), player.getProtocolVersion()));
|
||||||
} else if (BungeeCordMessageResponder.isBungeeCordMessage(packet)) {
|
} else if (BungeeCordMessageResponder.isBungeeCordMessage(packet)) {
|
||||||
|
@ -136,6 +136,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player {
|
|||||||
private final Queue<ResourcePackInfo> outstandingResourcePacks = new ArrayDeque<>();
|
private final Queue<ResourcePackInfo> outstandingResourcePacks = new ArrayDeque<>();
|
||||||
private @Nullable ResourcePackInfo pendingResourcePack;
|
private @Nullable ResourcePackInfo pendingResourcePack;
|
||||||
private @Nullable ResourcePackInfo appliedResourcePack;
|
private @Nullable ResourcePackInfo appliedResourcePack;
|
||||||
|
private @Nullable String clientBrand;
|
||||||
|
|
||||||
ConnectedPlayer(VelocityServer server, GameProfile profile, MinecraftConnection connection,
|
ConnectedPlayer(VelocityServer server, GameProfile profile, MinecraftConnection connection,
|
||||||
@Nullable InetSocketAddress virtualHost, boolean onlineMode) {
|
@Nullable InetSocketAddress virtualHost, boolean onlineMode) {
|
||||||
@ -753,6 +754,15 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getClientBrand() {
|
||||||
|
return clientBrand;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setClientBrand(String clientBrand) {
|
||||||
|
this.clientBrand = clientBrand;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void spoofChatInput(String input) {
|
public void spoofChatInput(String input) {
|
||||||
Preconditions.checkArgument(input.length() <= Chat.MAX_SERVERBOUND_MESSAGE_LENGTH,
|
Preconditions.checkArgument(input.length() <= Chat.MAX_SERVERBOUND_MESSAGE_LENGTH,
|
||||||
|
@ -139,11 +139,15 @@ public final class PluginMessageUtil {
|
|||||||
return new PluginMessage(message.getChannel(), rewrittenBuf);
|
return new PluginMessage(message.getChannel(), rewrittenBuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String readBrandMessage(ByteBuf content) {
|
/**
|
||||||
// Some clients (mostly poorly-implemented bots) do not send validly-formed brand messages.
|
* Some clients (mostly poorly-implemented bots) do not send validly-formed brand messages.
|
||||||
// In order to accommodate their broken behavior, we'll first try to read in the 1.8 format, and
|
* In order to accommodate their broken behavior, we'll first try to read in the 1.8 format, and
|
||||||
// if that fails, treat it as a 1.7-format message (which has no prefixed length). (The message
|
* if that fails, treat it as a 1.7-format message (which has no prefixed length). (The message
|
||||||
// Velocity sends will be in the correct format depending on the protocol.)
|
* Velocity sends will be in the correct format depending on the protocol.)
|
||||||
|
* @param content the brand packet
|
||||||
|
* @return the client brand
|
||||||
|
*/
|
||||||
|
public static String readBrandMessage(ByteBuf content) {
|
||||||
try {
|
try {
|
||||||
return ProtocolUtils.readString(content.slice());
|
return ProtocolUtils.readString(content.slice());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren