From b691c43c44ff180d10e7d4a9afc83b98551ff586 Mon Sep 17 00:00:00 2001 From: daoge_cmd <3523206925@qq.com> Date: Sun, 1 Mar 2026 12:16:08 +0800 Subject: Initial commit --- Minecraft.World/LavaSlime.cpp | 144 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 Minecraft.World/LavaSlime.cpp (limited to 'Minecraft.World/LavaSlime.cpp') diff --git a/Minecraft.World/LavaSlime.cpp b/Minecraft.World/LavaSlime.cpp new file mode 100644 index 00000000..3ab32d90 --- /dev/null +++ b/Minecraft.World/LavaSlime.cpp @@ -0,0 +1,144 @@ +#include "stdafx.h" +#include "net.minecraft.world.level.h" +#include "net.minecraft.world.h" +#include "net.minecraft.world.item.h" +#include "..\Minecraft.Client\Textures.h" +#include "LavaSlime.h" +#include "SoundTypes.h" + + + +LavaSlime::LavaSlime(Level *level) : Slime(level) +{ + // 4J Stu - This function call had to be moved here from the Entity ctor to ensure that + // the derived version of the function is called + // 4J Stu - The Slime ctor has already called this, and as we don't override it here don't need to call it + //this->defineSynchedData(); + + // 4J Stu - This function call had to be moved here from the Entity ctor to ensure that the derived version of the function is called + health = getMaxHealth(); + + this->textureIdx = TN_MOB_LAVA; // 4J was "/mob/lava.png"; + fireImmune = true; + walkingSpeed = .2f; +} + +bool LavaSlime::canSpawn() +{ + return level->difficulty > Difficulty::PEACEFUL && level->isUnobstructed(bb) && level->getCubes(shared_from_this(), bb)->empty() && !level->containsAnyLiquid(bb); +} + +int LavaSlime::getArmorValue() +{ + return getSize() * 3; +} + +int LavaSlime::getLightColor(float a) +{ + return 15 << 20 | 15 << 4; +} + +float LavaSlime::getBrightness(float a) +{ + return 1.0f; +} + +ePARTICLE_TYPE LavaSlime::getParticleName() +{ + return eParticleType_flame; +} + +shared_ptr LavaSlime::createChild() +{ + return shared_ptr( new LavaSlime(level) ); +} + +int LavaSlime::getDeathLoot() +{ + // 4J-PB - brought forward the magma cream drops + return Item::magmaCream_Id; +} + +void LavaSlime::dropDeathLoot(bool wasKilledByPlayer, int playerBonusLevel) +{ + int loot = getDeathLoot(); + if (loot > 0 && getSize() > 1) + { + int count = random->nextInt(4) - 2; + if (playerBonusLevel > 0) + { + count += random->nextInt(playerBonusLevel + 1); + } + for (int i = 0; i < count; i++) + { + spawnAtLocation(loot, 1); + } + } +} + +bool LavaSlime::isOnFire() +{ + return false; +} + + +int LavaSlime::getJumpDelay() +{ + return Slime::getJumpDelay() * 4; +} + +void LavaSlime::decreaseSquish() +{ + targetSquish = targetSquish * 0.90f; +} + +void LavaSlime::jumpFromGround() +{ + yd = 0.42f + getSize() * .1f; + this->hasImpulse = true; +} + +void LavaSlime::causeFallDamage(float distance) +{ +} + +bool LavaSlime::isDealsDamage() +{ + return true; +} + +int LavaSlime::getAttackDamage() +{ + return Slime::getAttackDamage() + 2; +} + +int LavaSlime::getHurtSound() +{ + return eSoundType_MOB_SLIME; +} + +int LavaSlime::getDeathSound() +{ + return eSoundType_MOB_SLIME; +} + +int LavaSlime::getSquishSound() +{ + if (getSize() > 1) + { + return eSoundType_MOB_MAGMACUBE_BIG; + } + return eSoundType_MOB_MAGMACUBE_SMALL; +} + +bool LavaSlime::isInLava() +{ + // hack that makes the lava slimes move freely on the bottom of the lava + // oceans + return false; +} + +bool LavaSlime::doPlayLandSound() +{ + return true; +} \ No newline at end of file -- cgit v1.2.3