Terrain support for 1.19

This commit is contained in:
BruceChen 2022-08-28 22:27:21 +08:00
parent 9e4184a98d
commit bc5298bf5f
3 changed files with 72 additions and 34 deletions

View file

@ -22,6 +22,13 @@ namespace MinecraftClient.Mapping
/// </summary>
public readonly bool piglinSafe = false;
/// <summary>
/// Possibly the light level(s) at which monsters can spawn.
/// </summary>
public readonly int monsterSpawnMinLightLevel = 0;
public readonly int monsterSpawnMaxLightLevel = 7;
public readonly int monsterSpawnBlockLightLimit = 0;
/// <summary>
/// When false, compasses spin randomly. When true, nether portals can spawn zombified piglins.
/// </summary>
@ -132,6 +139,25 @@ namespace MinecraftClient.Mapping
if (nbt.ContainsKey("piglin_safe"))
this.piglinSafe = 1 == (byte)nbt["piglin_safe"];
if (nbt.ContainsKey("monster_spawn_light_level"))
{
try
{
var monsterSpawnLightLevelObj = nbt["monster_spawn_light_level"];
if (monsterSpawnLightLevelObj.GetType() == typeof(int))
this.monsterSpawnMinLightLevel = this.monsterSpawnMaxLightLevel = (int)monsterSpawnLightLevelObj;
else
{
var inclusive = (Dictionary<string, object>)(((Dictionary<string, object>)monsterSpawnLightLevelObj)["value"]);
this.monsterSpawnMinLightLevel = (int)inclusive["min_inclusive"];
this.monsterSpawnMaxLightLevel = (int)inclusive["max_inclusive"];
}
}
catch (KeyNotFoundException) { }
}
if (nbt.ContainsKey("monster_spawn_block_light_limit"))
this.monsterSpawnBlockLightLimit = (int)nbt["monster_spawn_block_light_limit"];
if (nbt.ContainsKey("natural"))
this.natural = 1 == (byte)nbt["natural"];
if (nbt.ContainsKey("ambient_light"))