From ba5312c198a7bb31b26fba57a966f16f07de1c90 Mon Sep 17 00:00:00 2001 From: 12xx12 <44411062+12xx12@users.noreply.github.com> Date: Thu, 17 Sep 2020 20:06:41 +0200 Subject: [PATCH] Fixed snow golems and added documentation to damage type and added damage type for damage from environment to mobs (#4877) * made snow golems not crashing the server anymore * changed damage type to environment * updated damage in API dopcumentation and changed enderman damage type * removed incidental d in the code Co-authored-by: 12xx12 <12xx12100@gmail.com> --- Server/Plugins/APIDump/APIDesc.lua | 160 +++++++++++++++++++++++++++++ src/Defines.h | 1 + src/Items/ItemPumpkin.h | 2 +- src/Mobs/Enderman.cpp | 4 +- src/Mobs/SnowGolem.cpp | 2 +- 5 files changed, 165 insertions(+), 4 deletions(-) diff --git a/Server/Plugins/APIDump/APIDesc.lua b/Server/Plugins/APIDump/APIDesc.lua index aa8a0baab..4a61fb55c 100644 --- a/Server/Plugins/APIDump/APIDesc.lua +++ b/Server/Plugins/APIDump/APIDesc.lua @@ -14330,6 +14330,166 @@ end { Notes = "Unknown click action" }, + dtAdmin = + { + Notes = "Damage applied by an admin command" + }, + dtArrow = + { + Notes = "Damage received by being attacked by a projectile, possibly from a mob" + }, + dtArrowAttack = + { + Notes = "Damage received by being attacked by a projectile, possibly from a mob" + }, + dtAttack = + { + Notes = "Damage recieved by being attacked by a mob" + }, + dtBurning = + { + Notes = "Damage from being on fire" + }, + dtCacti = + { + Notes = "Damage from contact with a cactus block" + }, + dtCactus = + { + Notes = "Damage from contact with a cactus block" + }, + dtCactusContact = + { + Notes = "Damage from contact with a cactus block" + }, + dtCactuses = + { + Notes = "Damage from contact with a cactus block" + }, + dtDrown = + { + Notes = "Damage received by drowning in water / lava" + }, + dtDrowning = + { + Notes = "Damage received by drowning in water / lava" + }, + dtEnderPearl = + { + Notes = "Damage received by throwing an ender pearl and being teleported by it" + }, + dtEntityAttack = + { + Notes = "Damage recieved by being attacked by a mob" + }, + dtEnvironment = + { + Notes = "Damage dealt to mobs from environment: enderman in rain, snow golem in desert" + }, + dtExplosion = + { + Notes = "Damage applied by an explosion" + }, + dtFall = + { + Notes = "Damage from falling down. Dealt when hitting the ground" + }, + dtFalling = + { + Notes = "Damage from falling down. Dealt when hitting the ground" + }, + dtFireContact = + { + Notes = "Damage received by standing inside a fire block" + }, + dtHunger = + { + Notes = "Damage received from hunger" + }, + dtInFire = + { + Notes = "Damage received by standing inside a fire block" + }, + dtInVoid = + { + Notes = "Damage received by falling into the Void (Y < 0)" + }, + dtLava = + { + Notes = "Damage received by a contact with a lava block" + }, + dtLavaContact = + { + Notes = "Damage received by a contact with a lava block" + }, + dtLightning = + { + Notes = "Damage from being hit by a lightning strike" + }, + dtMob = + { + Notes = "Damage received by being attacked by a mob" + }, + dtMobAttack = + { + Notes = "Damage received by being attacked by a mob" + }, + dtOnFire = + { + Notes = "Damage from being on fire" + }, + dtPawnAttack = + { + Notes = "Damage received by being attacked by a mob" + }, + dtPlugin = + { + Notes = "Damage applied by an admin command" + }, + dtPoison = + { + Notes = "Damage applied by the poison effect" + }, + dtPoisoning = + { + Notes = "Damage applied by the poison effect" + }, + dtPotionOfHarming = + { + Notes = "Damage applied by the potion of harming" + }, + dtProjectile = + { + Notes = "Damage received by being attacked by a projectile, possibly from a mob" + }, + dtRangedAttack = + { + Notes = "Damage received by being attacked by a projectile, possibly from a mob" + }, + dtStarvation = + { + Notes = "Damage received from hunger" + }, + dtStarving = + { + Notes = "Damage received from hunger" + }, + dtSuffocating = + { + Notes = "Damage from suffocating inside a block" + }, + dtSuffocation = + { + Notes = "Damage from suffocating inside a block" + }, + dtWither = + { + Notes = "Damage from the wither effect" + }, + dtWithering = + { + Notes = "Damage from the wither effect" + }, E_BLOCK_ACACIA_DOOR = { Notes = "The blocktype for acacia door" diff --git a/src/Defines.h b/src/Defines.h index 42978e740..a9714c52f 100644 --- a/src/Defines.h +++ b/src/Defines.h @@ -273,6 +273,7 @@ enum eDamageType dtEnderPearl, // Thrown an ender pearl, teleported by it dtAdmin, // Damage applied by an admin command dtExplosion, // Damage applied by an explosion + dtEnvironment, // Damage dealt to mobs from environment: enderman in rain, snow golem in desert // Some common synonyms: dtPawnAttack = dtAttack, diff --git a/src/Items/ItemPumpkin.h b/src/Items/ItemPumpkin.h index 33810b51f..897cba279 100644 --- a/src/Items/ItemPumpkin.h +++ b/src/Items/ItemPumpkin.h @@ -82,7 +82,7 @@ public: bool TrySpawnSnowGolem(cWorld & a_World, cPlayer & a_Player, const Vector3i a_PumpkinPos) { ASSERT(a_PumpkinPos.y > 1); - ASSERT(a_World.GetBlock(a_PumpkinPos.addedY(-1)) == E_BLOCK_SNOW); + ASSERT(a_World.GetBlock(a_PumpkinPos.addedY(-1)) == E_BLOCK_SNOW_BLOCK); // Need one more snow block 2 blocks below the pumpkin: if (a_World.GetBlock(a_PumpkinPos.addedY(-2)) != E_BLOCK_SNOW_BLOCK) diff --git a/src/Mobs/Enderman.cpp b/src/Mobs/Enderman.cpp index aa7c00bdd..3b8cd77e5 100644 --- a/src/Mobs/Enderman.cpp +++ b/src/Mobs/Enderman.cpp @@ -159,14 +159,14 @@ void cEnderman::Tick(std::chrono::milliseconds a_Dt, cChunk & a_Chunk) return; } - // Take damage when wet, drowning damage seems to be most appropriate + // Take damage when wet if ( cChunkDef::IsValidHeight(POSY_TOINT) && (GetWorld()->IsWeatherWetAtXYZ(GetPosition().Floor()) || IsInWater()) ) { EventLosePlayer(); - TakeDamage(dtDrowning, nullptr, 1, 0); + TakeDamage(dtEnvironment, nullptr, 1, 0); // TODO teleport to a safe location } } diff --git a/src/Mobs/SnowGolem.cpp b/src/Mobs/SnowGolem.cpp index 2e6d5ea09..93c29cafb 100644 --- a/src/Mobs/SnowGolem.cpp +++ b/src/Mobs/SnowGolem.cpp @@ -38,7 +38,7 @@ void cSnowGolem::Tick(std::chrono::milliseconds a_Dt, cChunk & a_Chunk) } if (IsBiomeNoDownfall(m_World->GetBiomeAt(POSX_TOINT, POSZ_TOINT))) { - TakeDamage(*this); + TakeDamage(dtEnvironment, nullptr, GetRawDamageAgainst(*this), GetKnockbackAmountAgainst(*this)); } else {