3
0
Mirror von https://github.com/PaperMC/Velocity.git synchronisiert 2024-11-17 05:20:14 +01:00

Preserve client settings packets

Dieser Commit ist enthalten in:
Andrew Steinborn 2018-07-29 17:44:16 -04:00
Ursprung b79e7df039
Commit e672f8d7cd
4 geänderte Dateien mit 118 neuen und 8 gelöschten Zeilen

Datei anzeigen

@ -4,11 +4,8 @@ import com.velocitypowered.proxy.VelocityServer;
import com.velocitypowered.proxy.connection.backend.ServerConnection;
import com.velocitypowered.proxy.data.ServerInfo;
import com.velocitypowered.proxy.protocol.MinecraftPacket;
import com.velocitypowered.proxy.protocol.packets.Chat;
import com.velocitypowered.proxy.protocol.packets.JoinGame;
import com.velocitypowered.proxy.protocol.packets.KeepAlive;
import com.velocitypowered.proxy.protocol.packets.*;
import com.velocitypowered.proxy.connection.MinecraftSessionHandler;
import com.velocitypowered.proxy.protocol.packets.Respawn;
import io.netty.buffer.ByteBuf;
import io.netty.channel.EventLoop;
import org.apache.logging.log4j.LogManager;
@ -58,6 +55,11 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
return;
}
if (packet instanceof ClientSettings) {
player.setClientSettings((ClientSettings) packet);
// forward it on
}
if (packet instanceof Chat) {
Chat chat = (Chat) packet;
if (chat.getMessage().equals("/connect")) {
@ -106,6 +108,10 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
player.getConnection().flush();
currentDimension = joinGame.getDimension();
}
if (player.getClientSettings() != null) {
player.getConnectedServer().getChannel().write(player.getClientSettings());
}
}
public void setCurrentDimension(int currentDimension) {

Datei anzeigen

@ -5,6 +5,7 @@ import com.velocitypowered.proxy.data.GameProfile;
import com.velocitypowered.proxy.protocol.packets.Chat;
import com.velocitypowered.proxy.connection.MinecraftConnection;
import com.velocitypowered.proxy.connection.backend.ServerConnection;
import com.velocitypowered.proxy.protocol.packets.ClientSettings;
import com.velocitypowered.proxy.util.ThrowableUtils;
import com.velocitypowered.proxy.data.ServerInfo;
import com.velocitypowered.proxy.protocol.packets.Disconnect;
@ -28,6 +29,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation {
private final GameProfile profile;
private final MinecraftConnection connection;
private ServerConnection connectedServer;
private ClientSettings clientSettings;
public ConnectedPlayer(GameProfile profile, MinecraftConnection connection) {
this.profile = profile;
@ -58,6 +60,14 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation {
return connectedServer;
}
public ClientSettings getClientSettings() {
return clientSettings;
}
public void setClientSettings(ClientSettings clientSettings) {
this.clientSettings = clientSettings;
}
public void handleConnectionException(ServerInfo info, Throwable throwable) {
String error = ThrowableUtils.briefDescription(throwable);
String userMessage;

Datei anzeigen

@ -39,6 +39,9 @@ public enum StateRegistry {
SERVERBOUND.register(KeepAlive.class, KeepAlive::new,
map(0x0C, MINECRAFT_1_12),
map(0x0B, MINECRAFT_1_12_1));
SERVERBOUND.register(ClientSettings.class, ClientSettings::new,
map(0x05, MINECRAFT_1_12),
map(0x04, MINECRAFT_1_12_1));
CLIENTBOUND.register(Chat.class, Chat::new,
map(0x0F, MINECRAFT_1_12));
@ -107,10 +110,6 @@ public enum StateRegistry {
for (final PacketMapping mapping : mappings) {
ProtocolVersion version = this.versions.get(mapping.protocolVersion);
if (version == null) {
version = new ProtocolVersion(mapping.protocolVersion);
this.versions.put(mapping.protocolVersion, version);
}
version.packetIdToSupplier.put(mapping.id, packetSupplier);
version.packetClassToId.put(clazz, mapping.id);

Datei anzeigen

@ -0,0 +1,95 @@
package com.velocitypowered.proxy.protocol.packets;
import com.velocitypowered.proxy.protocol.MinecraftPacket;
import com.velocitypowered.proxy.protocol.ProtocolConstants;
import com.velocitypowered.proxy.protocol.ProtocolUtils;
import io.netty.buffer.ByteBuf;
public class ClientSettings implements MinecraftPacket {
private String locale;
private byte viewDistance;
private int chatMode;
private boolean chatColors;
private short skinParts;
private int mainHand;
public String getLocale() {
return locale;
}
public void setLocale(String locale) {
this.locale = locale;
}
public byte getViewDistance() {
return viewDistance;
}
public void setViewDistance(byte viewDistance) {
this.viewDistance = viewDistance;
}
public int getChatMode() {
return chatMode;
}
public void setChatMode(int chatMode) {
this.chatMode = chatMode;
}
public boolean isChatColors() {
return chatColors;
}
public void setChatColors(boolean chatColors) {
this.chatColors = chatColors;
}
public short getSkinParts() {
return skinParts;
}
public void setSkinParts(short skinParts) {
this.skinParts = skinParts;
}
public int getMainHand() {
return mainHand;
}
public void setMainHand(int mainHand) {
this.mainHand = mainHand;
}
@Override
public String toString() {
return "ClientSettings{" +
"locale='" + locale + '\'' +
", viewDistance=" + viewDistance +
", chatMode=" + chatMode +
", chatColors=" + chatColors +
", skinParts=" + skinParts +
", mainHand=" + mainHand +
'}';
}
@Override
public void decode(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion) {
this.locale = ProtocolUtils.readString(buf, 16);
this.viewDistance = buf.readByte();
this.chatMode = ProtocolUtils.readVarInt(buf);
this.chatColors = buf.readBoolean();
this.skinParts = buf.readUnsignedByte();
this.mainHand = ProtocolUtils.readVarInt(buf);
}
@Override
public void encode(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion) {
ProtocolUtils.writeString(buf, locale);
buf.writeByte(viewDistance);
ProtocolUtils.writeVarInt(buf, chatMode);
buf.writeBoolean(chatColors);
buf.writeByte(skinParts);
ProtocolUtils.writeVarInt(buf, mainHand);
}
}