Changes 1.16-pre6

This commit is contained in:
Five (Xer) 2020-06-16 17:56:56 +02:00
parent 6577b08bdd
commit a1ab29186b
No known key found for this signature in database
GPG Key ID: A3F306B10E6330E7
4 changed files with 34 additions and 13 deletions

View File

@ -35,7 +35,7 @@ public enum ProtocolVersion {
MINECRAFT_1_15(573, "1.15"), MINECRAFT_1_15(573, "1.15"),
MINECRAFT_1_15_1(575, "1.15.1"), MINECRAFT_1_15_1(575, "1.15.1"),
MINECRAFT_1_15_2(578, "1.15.2"), MINECRAFT_1_15_2(578, "1.15.2"),
MINECRAFT_1_16(729, "1.16"); MINECRAFT_1_16(730, "1.16");
private final int protocol; private final int protocol;
private final String name; private final String name;

View File

@ -339,13 +339,13 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
player.getMinecraftConnection().delayedWrite( player.getMinecraftConnection().delayedWrite(
new Respawn(tempDim, joinGame.getPartialHashedSeed(), joinGame.getDifficulty(), new Respawn(tempDim, joinGame.getPartialHashedSeed(), joinGame.getDifficulty(),
joinGame.getGamemode(), joinGame.getLevelType(), joinGame.getGamemode(), joinGame.getLevelType(),
false, joinGame.getDimensionInfo())); false, joinGame.getDimensionInfo(), joinGame.getPreviousGamemode()));
} }
player.getMinecraftConnection().delayedWrite( player.getMinecraftConnection().delayedWrite(
new Respawn(joinGame.getDimension(), joinGame.getPartialHashedSeed(), new Respawn(joinGame.getDimension(), joinGame.getPartialHashedSeed(),
joinGame.getDifficulty(), joinGame.getGamemode(), joinGame.getLevelType(), joinGame.getDifficulty(), joinGame.getGamemode(), joinGame.getLevelType(),
false, joinGame.getDimensionInfo())); false, joinGame.getDimensionInfo(), joinGame.getPreviousGamemode()));
destination.setActiveDimensionRegistry(joinGame.getDimensionRegistry()); // 1.16 destination.setActiveDimensionRegistry(joinGame.getDimensionRegistry()); // 1.16
} }

View File

@ -24,6 +24,7 @@ public class JoinGame implements MinecraftPacket {
private boolean showRespawnScreen; private boolean showRespawnScreen;
private DimensionRegistry dimensionRegistry; // 1.16+ private DimensionRegistry dimensionRegistry; // 1.16+
private DimensionInfo dimensionInfo; // 1.16+ private DimensionInfo dimensionInfo; // 1.16+
private short previousGamemode; // 1.16+
public int getEntityId() { public int getEntityId() {
return entityId; return entityId;
@ -69,10 +70,7 @@ public class JoinGame implements MinecraftPacket {
this.maxPlayers = maxPlayers; this.maxPlayers = maxPlayers;
} }
public String getLevelType() { public @Nullable String getLevelType() {
if (levelType == null) {
throw new IllegalStateException("No level type specified.");
}
return levelType; return levelType;
} }
@ -112,6 +110,14 @@ public class JoinGame implements MinecraftPacket {
this.dimensionRegistry = dimensionRegistry; this.dimensionRegistry = dimensionRegistry;
} }
public short getPreviousGamemode() {
return previousGamemode;
}
public void setPreviousGamemode(short previousGamemode) {
this.previousGamemode = previousGamemode;
}
@Override @Override
public String toString() { public String toString() {
return "JoinGame{" return "JoinGame{"
@ -126,16 +132,18 @@ public class JoinGame implements MinecraftPacket {
+ ", reducedDebugInfo=" + reducedDebugInfo + ", reducedDebugInfo=" + reducedDebugInfo
+ ", dimensionRegistry='" + dimensionRegistry.toString() + '\'' + ", dimensionRegistry='" + dimensionRegistry.toString() + '\''
+ ", dimensionInfo='" + dimensionInfo.toString() + '\'' + ", dimensionInfo='" + dimensionInfo.toString() + '\''
+ ", previousGamemode=" + previousGamemode
+ '}'; + '}';
} }
@Override @Override
public void decode(ByteBuf buf, ProtocolUtils.Direction direction, ProtocolVersion version) { public void decode(ByteBuf buf, ProtocolUtils.Direction direction, ProtocolVersion version) {
this.entityId = buf.readInt(); this.entityId = buf.readInt();
this.gamemode = buf.readUnsignedByte(); this.gamemode = buf.readByte();
String dimensionIdentifier = null; String dimensionIdentifier = null;
String levelName = null; String levelName = null;
if (version.compareTo(ProtocolVersion.MINECRAFT_1_16) >= 0) { if (version.compareTo(ProtocolVersion.MINECRAFT_1_16) >= 0) {
this.previousGamemode = buf.readByte();
ImmutableSet<String> levelNames = ImmutableSet.copyOf(ProtocolUtils.readStringArray(buf)); ImmutableSet<String> levelNames = ImmutableSet.copyOf(ProtocolUtils.readStringArray(buf));
ImmutableSet<DimensionData> readData = DimensionRegistry.fromGameData(ProtocolUtils.readCompoundTag(buf)); ImmutableSet<DimensionData> readData = DimensionRegistry.fromGameData(ProtocolUtils.readCompoundTag(buf));
this.dimensionRegistry = new DimensionRegistry(readData, levelNames); this.dimensionRegistry = new DimensionRegistry(readData, levelNames);
@ -155,8 +163,6 @@ public class JoinGame implements MinecraftPacket {
this.maxPlayers = buf.readUnsignedByte(); this.maxPlayers = buf.readUnsignedByte();
if (version.compareTo(ProtocolVersion.MINECRAFT_1_16) < 0) { if (version.compareTo(ProtocolVersion.MINECRAFT_1_16) < 0) {
this.levelType = ProtocolUtils.readString(buf, 16); this.levelType = ProtocolUtils.readString(buf, 16);
} else {
this.levelType = "default"; // I didn't have the courage to rework this yet.
} }
if (version.compareTo(ProtocolVersion.MINECRAFT_1_14) >= 0) { if (version.compareTo(ProtocolVersion.MINECRAFT_1_14) >= 0) {
this.viewDistance = ProtocolUtils.readVarInt(buf); this.viewDistance = ProtocolUtils.readVarInt(buf);
@ -177,6 +183,7 @@ public class JoinGame implements MinecraftPacket {
buf.writeInt(entityId); buf.writeInt(entityId);
buf.writeByte(gamemode); buf.writeByte(gamemode);
if (version.compareTo(ProtocolVersion.MINECRAFT_1_16) >= 0) { if (version.compareTo(ProtocolVersion.MINECRAFT_1_16) >= 0) {
buf.writeByte(previousGamemode);
ProtocolUtils.writeStringArray(buf, dimensionRegistry.getLevelNames().toArray( ProtocolUtils.writeStringArray(buf, dimensionRegistry.getLevelNames().toArray(
new String[dimensionRegistry.getLevelNames().size()])); new String[dimensionRegistry.getLevelNames().size()]));
ProtocolUtils.writeCompoundTag(buf, dimensionRegistry.encodeRegistry()); ProtocolUtils.writeCompoundTag(buf, dimensionRegistry.encodeRegistry());

View File

@ -15,13 +15,15 @@ public class Respawn implements MinecraftPacket {
private short gamemode; private short gamemode;
private String levelType = ""; private String levelType = "";
private boolean shouldKeepPlayerData; // 1.16+ private boolean shouldKeepPlayerData; // 1.16+
private DimensionInfo dimensionInfo; private DimensionInfo dimensionInfo; // 1.16+
private short previousGamemode; // 1.16+
public Respawn() { public Respawn() {
} }
public Respawn(int dimension, long partialHashedSeed, short difficulty, short gamemode, public Respawn(int dimension, long partialHashedSeed, short difficulty, short gamemode,
String levelType, boolean shouldKeepPlayerData, DimensionInfo dimensionInfo) { String levelType, boolean shouldKeepPlayerData, DimensionInfo dimensionInfo,
short previousGamemode) {
this.dimension = dimension; this.dimension = dimension;
this.partialHashedSeed = partialHashedSeed; this.partialHashedSeed = partialHashedSeed;
this.difficulty = difficulty; this.difficulty = difficulty;
@ -29,6 +31,7 @@ public class Respawn implements MinecraftPacket {
this.levelType = levelType; this.levelType = levelType;
this.shouldKeepPlayerData = shouldKeepPlayerData; this.shouldKeepPlayerData = shouldKeepPlayerData;
this.dimensionInfo = dimensionInfo; this.dimensionInfo = dimensionInfo;
this.previousGamemode = previousGamemode;
} }
public int getDimension() { public int getDimension() {
@ -79,6 +82,14 @@ public class Respawn implements MinecraftPacket {
this.shouldKeepPlayerData = shouldKeepPlayerData; this.shouldKeepPlayerData = shouldKeepPlayerData;
} }
public short getPreviousGamemode() {
return previousGamemode;
}
public void setPreviousGamemode(short previousGamemode) {
this.previousGamemode = previousGamemode;
}
@Override @Override
public String toString() { public String toString() {
return "Respawn{" return "Respawn{"
@ -89,6 +100,7 @@ public class Respawn implements MinecraftPacket {
+ ", levelType='" + levelType + '\'' + ", levelType='" + levelType + '\''
+ ", shouldKeepPlayerData=" + shouldKeepPlayerData + ", shouldKeepPlayerData=" + shouldKeepPlayerData
+ ", dimensionRegistryName='" + dimensionInfo.toString() + '\'' + ", dimensionRegistryName='" + dimensionInfo.toString() + '\''
+ ", previousGamemode=" + previousGamemode
+ '}'; + '}';
} }
@ -108,8 +120,9 @@ public class Respawn implements MinecraftPacket {
if (version.compareTo(ProtocolVersion.MINECRAFT_1_15) >= 0) { if (version.compareTo(ProtocolVersion.MINECRAFT_1_15) >= 0) {
this.partialHashedSeed = buf.readLong(); this.partialHashedSeed = buf.readLong();
} }
this.gamemode = buf.readUnsignedByte(); this.gamemode = buf.readByte();
if (version.compareTo(ProtocolVersion.MINECRAFT_1_16) >= 0) { if (version.compareTo(ProtocolVersion.MINECRAFT_1_16) >= 0) {
this.previousGamemode = buf.readByte();
boolean isDebug = buf.readBoolean(); boolean isDebug = buf.readBoolean();
boolean isFlat = buf.readBoolean(); boolean isFlat = buf.readBoolean();
this.dimensionInfo = new DimensionInfo(dimensionIdentifier, levelName, isFlat, isDebug); this.dimensionInfo = new DimensionInfo(dimensionIdentifier, levelName, isFlat, isDebug);
@ -135,6 +148,7 @@ public class Respawn implements MinecraftPacket {
} }
buf.writeByte(gamemode); buf.writeByte(gamemode);
if (version.compareTo(ProtocolVersion.MINECRAFT_1_16) >= 0) { if (version.compareTo(ProtocolVersion.MINECRAFT_1_16) >= 0) {
buf.writeByte(previousGamemode);
buf.writeBoolean(dimensionInfo.isDebugType()); buf.writeBoolean(dimensionInfo.isDebugType());
buf.writeBoolean(dimensionInfo.isFlat()); buf.writeBoolean(dimensionInfo.isFlat());
buf.writeBoolean(shouldKeepPlayerData); buf.writeBoolean(shouldKeepPlayerData);