Fixed bug in SetDimension method of World class, where it would crash if joining a paper server. Added error handling.

This commit is contained in:
vinicius 2024-12-05 02:12:39 +00:00
parent 27e66433cd
commit d0c9695a79
2 changed files with 29 additions and 6 deletions

View file

@ -19,7 +19,7 @@ namespace MinecraftClient.Mapping
/// <summary> /// <summary>
/// The dimension info of the world /// The dimension info of the world
/// </summary> /// </summary>
private static Dimension curDimension = new(); private static Dimension curDimension= new();
private static readonly Dictionary<string, Dimension> dimensionList = new(); private static readonly Dictionary<string, Dimension> dimensionList = new();
@ -87,10 +87,32 @@ namespace MinecraftClient.Mapping
/// </summary> /// </summary>
/// <param name="name"> The name of the dimension type</param> /// <param name="name"> The name of the dimension type</param>
/// <param name="nbt">The dimension type (NBT Tag Compound)</param> /// <param name="nbt">The dimension type (NBT Tag Compound)</param>
public static void SetDimension(string name) public static void SetDimension(string name)
{ {
curDimension = dimensionList[name]; // Should not fail // Try to get the dimension using the name as is
} if (dimensionList.TryGetValue(name, out Dimension dimension))
{
curDimension = dimension;
return; // Dimension found
}
// If not found, check if name lacks 'minecraft:' prefix and try again
if (!name.StartsWith("minecraft:"))
{
string prefixedName = "minecraft:" + name;
if (dimensionList.TryGetValue(prefixedName, out dimension))
{
curDimension = dimension;
return; // Dimension found with prefixed name
}
}
// If still not found, dimension does not exist
throw new KeyNotFoundException($"Dimension '{name}' not found in dimensions dictionary.");
}
/// <summary> /// <summary>

View file

@ -660,7 +660,8 @@ namespace MinecraftClient.Protocol.Handlers
{ {
case >= MC_1_16_2_Version and <= MC_1_18_2_Version: case >= MC_1_16_2_Version and <= MC_1_18_2_Version:
World.StoreOneDimension(dimensionName, dimensionType!); World.StoreOneDimension(dimensionName, dimensionType!);
World.SetDimension(dimensionName); // World.SetDimension(dimensionName);
World.SetDimension(dimensionName);
break; break;
default: default:
World.SetDimension(dimensionTypeName!); World.SetDimension(dimensionTypeName!);