From c0711407e96353e14bfa41f17db4e45c43f8ebb9 Mon Sep 17 00:00:00 2001 From: 12xx12 <44411062+12xx12@users.noreply.github.com> Date: Sat, 10 Oct 2020 21:31:44 +0200 Subject: Adding more customize options to mob spawners and improving the way to look for surrounding entities (#4955) * added nearly any customize option * fixed unnecessary diff added comments * removed unnecessary const qualifier * fixed build * changed to ForEachEntityInBox * added docs * updated lua api description * checkstyle * added changes suggested by @peterbell10 And now the player may break the server by setting ridiculous ranges * updated docs changed cast to static cast * fixed clang * fixed clang on WSSAnvil.cpp Co-authored-by: 12xx12 <12xx12100@gmail.com> --- src/WorldStorage/WSSAnvil.cpp | 48 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) (limited to 'src/WorldStorage/WSSAnvil.cpp') diff --git a/src/WorldStorage/WSSAnvil.cpp b/src/WorldStorage/WSSAnvil.cpp index f822f9375..03e60bb26 100755 --- a/src/WorldStorage/WSSAnvil.cpp +++ b/src/WorldStorage/WSSAnvil.cpp @@ -1349,13 +1349,55 @@ OwnedBlockEntity cWSSAnvil::LoadMobSpawnerFromNBT(const cParsedNBT & a_NBT, int } } + // Load spawn count: + int CurrentLine = a_NBT.FindChildByName(a_TagIdx, "SpawnCount"); + if ((CurrentLine >= 0) && (a_NBT.GetType(CurrentLine) == TAG_Short)) + { + MobSpawner->SetSpawnCount(a_NBT.GetShort(CurrentLine)); + } + + // Load spawn range: + CurrentLine = a_NBT.FindChildByName(a_TagIdx, "SpawnRange"); + if ((CurrentLine >= 0) && (a_NBT.GetType(CurrentLine) == TAG_Short)) + { + MobSpawner->SetSpawnRange(a_NBT.GetShort(CurrentLine)); + } + // Load delay: - int Delay = a_NBT.FindChildByName(a_TagIdx, "Delay"); - if ((Delay >= 0) && (a_NBT.GetType(Delay) == TAG_Short)) + CurrentLine = a_NBT.FindChildByName(a_TagIdx, "Delay"); + if ((CurrentLine >= 0) && (a_NBT.GetType(CurrentLine) == TAG_Short)) { - MobSpawner->SetSpawnDelay(a_NBT.GetShort(Delay)); + MobSpawner->SetSpawnDelay(a_NBT.GetShort(CurrentLine)); } + // Load delay range: + CurrentLine = a_NBT.FindChildByName(a_TagIdx, "MinSpawnDelay"); + if ((CurrentLine >= 0) && (a_NBT.GetType(CurrentLine) == TAG_Short)) + { + MobSpawner->SetMinSpawnDelay(a_NBT.GetShort(CurrentLine)); + } + + CurrentLine = a_NBT.FindChildByName(a_TagIdx, "MaxSpawnDelay"); + if ((CurrentLine >= 0) && (a_NBT.GetType(CurrentLine) == TAG_Short)) + { + MobSpawner->SetMaxSpawnDelay(a_NBT.GetShort(CurrentLine)); + } + + // Load MaxNearbyEntities: + CurrentLine = a_NBT.FindChildByName(a_TagIdx, "MaxNearbyEntities"); + if ((CurrentLine >= 0) && (a_NBT.GetType(CurrentLine) == TAG_Short)) + { + MobSpawner->SetMaxNearbyEntities(a_NBT.GetShort(CurrentLine)); + } + + // Load RequiredPlayerRange: + CurrentLine = a_NBT.FindChildByName(a_TagIdx, "RequiredPlayerRange"); + if ((CurrentLine >= 0) && (a_NBT.GetType(CurrentLine) == TAG_Short)) + { + MobSpawner->SetRequiredPlayerRange(a_NBT.GetShort(CurrentLine)); + } + + return MobSpawner; } -- cgit v1.2.3