diff --git a/MinecraftClient/Mapping/World.cs b/MinecraftClient/Mapping/World.cs
index 63ecb0c4..eea24e59 100644
--- a/MinecraftClient/Mapping/World.cs
+++ b/MinecraftClient/Mapping/World.cs
@@ -21,9 +21,9 @@ namespace MinecraftClient.Mapping
///
/// The dimension info of the world
///
- private static Dimension curDimension = new Dimension();
+ private static Dimension curDimension = new();
- private static Dictionary? dimensionList = null;
+ private static Dictionary dimensionList = new();
///
/// Chunk data parsing progress
@@ -61,16 +61,29 @@ namespace MinecraftClient.Mapping
/// Registry Codec nbt data
public static void StoreDimensionList(Dictionary registryCodec)
{
- dimensionList = new();
var dimensionListNbt = (object[])(((Dictionary)registryCodec["minecraft:dimension_type"])["value"]);
foreach (Dictionary dimensionNbt in dimensionListNbt)
{
string dimensionName = (string)dimensionNbt["name"];
Dictionary element = (Dictionary)dimensionNbt["element"];
+ if (dimensionList.ContainsKey(dimensionName))
+ dimensionList.Remove(dimensionName);
dimensionList.Add(dimensionName, new Dimension(dimensionName, element));
}
}
+ ///
+ /// Store one dimension - 1.16.2 to 1.18.2
+ ///
+ /// Dimension name
+ /// Dimension Type nbt data
+ public static void StoreDimension(string dimensionName, Dictionary dimensionType)
+ {
+ if (dimensionList.ContainsKey(dimensionName))
+ dimensionList.Remove(dimensionName);
+ dimensionList.Add(dimensionName, new Dimension(dimensionName, dimensionType));
+ }
+
///
/// Set current dimension - 1.16 and above
@@ -79,7 +92,7 @@ namespace MinecraftClient.Mapping
/// The dimension type (NBT Tag Compound)
public static void SetDimension(string name)
{
- curDimension = dimensionList![name]; // Should not fail
+ curDimension = dimensionList[name]; // Should not fail
}
diff --git a/MinecraftClient/Protocol/Handlers/Protocol18.cs b/MinecraftClient/Protocol/Handlers/Protocol18.cs
index d05cf455..f60b62f4 100644
--- a/MinecraftClient/Protocol/Handlers/Protocol18.cs
+++ b/MinecraftClient/Protocol/Handlers/Protocol18.cs
@@ -371,7 +371,8 @@ namespace MinecraftClient.Protocol.Handlers
for (int i = 0; i < worldCount; i++)
dataTypes.ReadNextString(packetData); // Dimension Names (World Names) - 1.16 and above
var registryCodec = dataTypes.ReadNextNbt(packetData); // Registry Codec (Dimension Codec) - 1.16 and above
- World.StoreDimensionList(registryCodec);
+ if (handler.GetTerrainEnabled())
+ World.StoreDimensionList(registryCodec);
}
// Current dimension
@@ -380,12 +381,13 @@ namespace MinecraftClient.Protocol.Handlers
// String identifier: 1.16 and 1.16.1
// varInt: [1.9.1 to 1.15.2]
// byte: below 1.9.1
+ Dictionary? dimensionType = null;
if (protocolVersion >= MC_1_16_Version)
{
if (protocolVersion >= MC_1_19_Version)
dataTypes.ReadNextString(packetData); // Dimension Type: Identifier
else if (protocolVersion >= MC_1_16_2_Version)
- dataTypes.ReadNextNbt(packetData); // Dimension Type: NBT Tag Compound
+ dimensionType = dataTypes.ReadNextNbt(packetData); // Dimension Type: NBT Tag Compound
else
dataTypes.ReadNextString(packetData);
this.currentDimension = 0;
@@ -401,7 +403,12 @@ namespace MinecraftClient.Protocol.Handlers
if (protocolVersion >= MC_1_16_Version)
{
string dimensionName = dataTypes.ReadNextString(packetData); // Dimension Name (World Name) - 1.16 and above
- World.SetDimension(dimensionName);
+ if (handler.GetTerrainEnabled())
+ {
+ if (protocolVersion >= MC_1_16_2_Version && protocolVersion < MC_1_19_Version)
+ World.StoreDimension(dimensionName, dimensionType!);
+ World.SetDimension(dimensionName);
+ }
}
if (protocolVersion >= MC_1_15_Version)
@@ -594,12 +601,13 @@ namespace MinecraftClient.Protocol.Handlers
}
break;
case PacketTypesIn.Respawn:
+ Dictionary? dimensionTypeRespawn = null;
if (protocolVersion >= MC_1_16_Version)
{
if (protocolVersion >= MC_1_19_Version)
dataTypes.ReadNextString(packetData); // Dimension Type: Identifier
else if (protocolVersion >= MC_1_16_2_Version)
- dataTypes.ReadNextNbt(packetData); // Dimension Type: NBT Tag Compound
+ dimensionTypeRespawn = dataTypes.ReadNextNbt(packetData); // Dimension Type: NBT Tag Compound
else
dataTypes.ReadNextString(packetData);
this.currentDimension = 0;
@@ -612,7 +620,12 @@ namespace MinecraftClient.Protocol.Handlers
if (protocolVersion >= MC_1_16_Version)
{
string dimensionName = dataTypes.ReadNextString(packetData); // Dimension Name (World Name) - 1.16 and above
- World.SetDimension(dimensionName);
+ if (handler.GetTerrainEnabled())
+ {
+ if (protocolVersion >= MC_1_16_2_Version && protocolVersion < MC_1_19_Version)
+ World.StoreDimension(dimensionName, dimensionTypeRespawn!);
+ World.SetDimension(dimensionName);
+ }
}
if (protocolVersion < MC_1_14_Version)