Fix Join Game packet and Login packet, add new codec for 1.19

This commit is contained in:
BoomEaro 2022-06-09 11:47:12 +03:00
parent ac8eda05ad
commit 272c37bb79
7 changed files with 2117 additions and 60 deletions

View File

@ -74,8 +74,8 @@ public final class PacketSnapshots {
joinGame.setReducedDebugInfo(true);
joinGame.setDebug(false);
joinGame.setViewDistance(0);
joinGame.setWorldName("minecraft:world");
joinGame.setWorldNames("minecraft:world");
joinGame.setWorldName("minecraft:overworld");
joinGame.setWorldNames("minecraft:overworld");
joinGame.setHashedSeed(0);
joinGame.setDimensionRegistry(server.getDimensionRegistry());

View File

@ -190,21 +190,6 @@ public class ByteMessage extends ByteBuf {
}
}
public void writeProperties(Property[] properties) {
writeVarInt(properties.length);
for (Property prop : properties) {
writeString(prop.getName());
writeString(prop.getValue());
if (prop.getSignature() != null) {
buf.writeBoolean(true);
writeString(prop.getSignature());
}
else {
buf.writeBoolean(false);
}
}
}
/* Delegated methods */
@Override

View File

@ -1,38 +0,0 @@
package ru.nanit.limbo.protocol;
public class Property {
private String name;
private String value;
private String signature;
public Property(String name, String value, String signature) {
this.name = name;
this.value = value;
this.signature = signature;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getSignature() {
return signature;
}
public void setSignature(String signature) {
this.signature = signature;
}
}

View File

@ -19,7 +19,6 @@ package ru.nanit.limbo.protocol.packets.login;
import ru.nanit.limbo.protocol.ByteMessage;
import ru.nanit.limbo.protocol.PacketOut;
import ru.nanit.limbo.protocol.Property;
import ru.nanit.limbo.protocol.registry.Version;
import java.util.UUID;
@ -46,7 +45,7 @@ public class PacketLoginSuccess implements PacketOut {
}
msg.writeString(username);
if (version.moreOrEqual(Version.V1_19)) {
msg.writeProperties(new Property[0]);
msg.writeVarInt(0);
}
}

View File

@ -17,11 +17,15 @@
package ru.nanit.limbo.protocol.packets.play;
import net.kyori.adventure.nbt.TagStringIO;
import ru.nanit.limbo.protocol.ByteMessage;
import ru.nanit.limbo.protocol.PacketOut;
import ru.nanit.limbo.protocol.registry.Version;
import ru.nanit.limbo.server.Logger;
import ru.nanit.limbo.world.dimension.DimensionRegistry;
import java.io.IOException;
public class PacketJoinGame implements PacketOut {
private int entityId;
@ -199,9 +203,8 @@ public class PacketJoinGame implements PacketOut {
msg.writeByte(gameMode);
msg.writeByte(previousGameMode);
msg.writeStringsArray(worldNames);
msg.writeCompoundTag(dimensionRegistry.getCodec_1_18_2());
msg.writeCompoundTag(dimensionRegistry.getDefaultDimension_1_18_2().getData());
//msg.writeString("minecraft:overworld");
msg.writeCompoundTag(dimensionRegistry.getCodec_1_19());
msg.writeString(worldName); // World type
msg.writeString(worldName);
msg.writeLong(hashedSeed);
msg.writeVarInt(maxPlayers);

View File

@ -36,6 +36,7 @@ public final class DimensionRegistry {
private CompoundBinaryTag codec_1_16;
private CompoundBinaryTag codec_1_18_2;
private CompoundBinaryTag codec_1_19;
private CompoundBinaryTag oldCodec;
public DimensionRegistry(LimboServer server) {
@ -50,6 +51,10 @@ public final class DimensionRegistry {
return codec_1_18_2;
}
public CompoundBinaryTag getCodec_1_19() {
return codec_1_19;
}
public CompoundBinaryTag getOldCodec() {
return oldCodec;
}
@ -65,6 +70,8 @@ public final class DimensionRegistry {
public void load(String def) throws IOException {
codec_1_16 = readCodecFile("/dimension/codec_1_16.snbt");
codec_1_18_2 = readCodecFile("/dimension/codec_1_18_2.snbt");
codec_1_18_2 = readCodecFile("/dimension/codec_1_18_2.snbt");
codec_1_19 = readCodecFile("/dimension/codec_1_19.snbt");
// On 1.16-1.16.1 different codec format
oldCodec = readCodecFile("/dimension/codec_old.snbt");

File diff suppressed because it is too large Load Diff