support for other login packet ids (1.13-pre3-1.13-pre8)

This commit is contained in:
Bixilon 2020-08-03 18:11:33 +02:00
parent 5cef35471f
commit 5aa94801ea
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
3 changed files with 47 additions and 25 deletions

View File

@ -14,16 +14,19 @@
package de.bixilon.minosoft.game.datatypes.objectLoader.versions;
import com.google.common.collect.HashBiMap;
import de.bixilon.minosoft.protocol.protocol.ConnectionState;
import de.bixilon.minosoft.protocol.protocol.Packets;
import java.util.HashMap;
public class Version {
final String versionName;
final int protocolVersion;
final HashBiMap<Packets.Serverbound, Integer> serverboundPacketMapping;
final HashBiMap<Packets.Clientbound, Integer> clientboundPacketMapping;
final HashMap<ConnectionState, HashBiMap<Packets.Serverbound, Integer>> serverboundPacketMapping;
final HashMap<ConnectionState, HashBiMap<Packets.Clientbound, Integer>> clientboundPacketMapping;
VersionMapping mapping;
public Version(String versionName, int protocolVersion, HashBiMap<Packets.Serverbound, Integer> serverboundPacketMapping, HashBiMap<Packets.Clientbound, Integer> clientboundPacketMapping) {
public Version(String versionName, int protocolVersion, HashMap<ConnectionState, HashBiMap<Packets.Serverbound, Integer>> serverboundPacketMapping, HashMap<ConnectionState, HashBiMap<Packets.Clientbound, Integer>> clientboundPacketMapping) {
this.versionName = versionName;
this.protocolVersion = protocolVersion;
this.serverboundPacketMapping = serverboundPacketMapping;
@ -38,23 +41,25 @@ public class Version {
return protocolVersion;
}
public Packets.Clientbound getPacketByCommand(int command) { // state must be play!
return clientboundPacketMapping.inverse().get(command);
public Packets.Clientbound getPacketByCommand(ConnectionState state, int command) {
if (clientboundPacketMapping.containsKey(state) && clientboundPacketMapping.get(state).containsValue(command)) {
return clientboundPacketMapping.get(state).inverse().get(command);
}
return null;
}
public int getCommandByPacket(Packets.Serverbound packet) {
return serverboundPacketMapping.get(packet);
public Integer getCommandByPacket(Packets.Serverbound packet) {
if (serverboundPacketMapping.containsKey(packet.getState()) && serverboundPacketMapping.get(packet.getState()).containsKey(packet)) {
return serverboundPacketMapping.get(packet.getState()).get(packet);
}
return null;
}
public int getCommandByPacket(Packets.Clientbound packet) {
return clientboundPacketMapping.get(packet);
}
public HashBiMap<Packets.Clientbound, Integer> getClientboundPacketMapping() {
public HashMap<ConnectionState, HashBiMap<Packets.Clientbound, Integer>> getClientboundPacketMapping() {
return clientboundPacketMapping;
}
public HashBiMap<Packets.Serverbound, Integer> getServerboundPacketMapping() {
public HashMap<ConnectionState, HashBiMap<Packets.Serverbound, Integer>> getServerboundPacketMapping() {
return serverboundPacketMapping;
}

View File

@ -19,6 +19,7 @@ import com.google.gson.JsonObject;
import de.bixilon.minosoft.Config;
import de.bixilon.minosoft.game.datatypes.Mappings;
import de.bixilon.minosoft.logging.Log;
import de.bixilon.minosoft.protocol.protocol.ConnectionState;
import de.bixilon.minosoft.protocol.protocol.Packets;
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition;
import de.bixilon.minosoft.util.Util;
@ -60,8 +61,8 @@ public class Versions {
return;
}
HashBiMap<Packets.Serverbound, Integer> serverboundPacketMapping;
HashBiMap<Packets.Clientbound, Integer> clientboundPacketMapping;
HashMap<ConnectionState, HashBiMap<Packets.Serverbound, Integer>> serverboundPacketMapping;
HashMap<ConnectionState, HashBiMap<Packets.Clientbound, Integer>> clientboundPacketMapping;
if (versionJson.get("mapping").isJsonPrimitive()) {
// inherits or copies mapping from an other version
if (!versionMap.containsKey(protocolId)) {
@ -72,16 +73,24 @@ public class Versions {
clientboundPacketMapping = parent.getClientboundPacketMapping();
} else {
JsonObject mappingJson = versionJson.getAsJsonObject("mapping");
serverboundPacketMapping = HashBiMap.create();
serverboundPacketMapping = new HashMap<>();
for (JsonElement packetElement : mappingJson.getAsJsonArray("serverbound")) {
String packetName = packetElement.getAsString();
serverboundPacketMapping.put(Packets.Serverbound.valueOf(packetName), serverboundPacketMapping.size());
Packets.Serverbound packet = Packets.Serverbound.valueOf(packetName);
if (!serverboundPacketMapping.containsKey(packet.getState())) {
serverboundPacketMapping.put(packet.getState(), HashBiMap.create());
}
serverboundPacketMapping.get(packet.getState()).put(packet, serverboundPacketMapping.get(packet.getState()).size());
}
clientboundPacketMapping = HashBiMap.create();
clientboundPacketMapping = new HashMap<>();
for (JsonElement packetElement : mappingJson.getAsJsonArray("clientbound")) {
String packetName = packetElement.getAsString();
clientboundPacketMapping.put(Packets.Clientbound.valueOf(packetName), clientboundPacketMapping.size());
Packets.Clientbound packet = Packets.Clientbound.valueOf(packetName);
if (!clientboundPacketMapping.containsKey(packet.getState())) {
clientboundPacketMapping.put(packet.getState(), HashBiMap.create());
}
clientboundPacketMapping.get(packet.getState()).put(packet, clientboundPacketMapping.get(packet.getState()).size());
}
}
Version version = new Version(versionName, protocolId, serverboundPacketMapping, clientboundPacketMapping);

View File

@ -257,17 +257,25 @@ public class Connection {
}
public int getPacketCommand(Packets.Serverbound packet) {
if (packet.getState() == ConnectionState.PLAY) {
return version.getCommandByPacket(packet);
Integer command = null;
if (getReason() != ConnectionReason.GET_VERSION) {
command = version.getCommandByPacket(packet);
}
return Protocol.getPacketCommand(packet);
if (command == null) {
return Protocol.getPacketCommand(packet);
}
return command;
}
public Packets.Clientbound getPacketByCommand(ConnectionState state, int command) {
if (state == ConnectionState.PLAY) {
return version.getPacketByCommand(command);
Packets.Clientbound packet = null;
if (getReason() != ConnectionReason.GET_VERSION) {
packet = version.getPacketByCommand(state, command);
}
return Protocol.getPacketByCommand(state, command);
if (packet == null) {
return Protocol.getPacketByCommand(state, command);
}
return packet;
}
public VelocityHandler getVelocityHandler() {