4jcraft/Minecraft.World/Entities/Mobs/LavaSlime.cpp
2026-03-21 16:29:02 -05:00

105 lines
3.1 KiB
C++

#include "../../Platform/stdafx.h"
#include "../../Headers/net.minecraft.world.level.h"
#include "../../Headers/net.minecraft.world.h"
#include "../../Headers/net.minecraft.world.entity.ai.attributes.h"
#include "../../Headers/net.minecraft.world.entity.monster.h"
#include "../../Headers/net.minecraft.world.item.h"
#include "../../../Minecraft.Client/Textures/Textures.h"
#include "LavaSlime.h"
#include "../../Util/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();
registerAttributes();
fireImmune = true;
}
void LavaSlime::registerAttributes() {
Slime::registerAttributes();
getAttribute(SharedMonsterAttributes::MOVEMENT_SPEED)->setBaseValue(0.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; }
std::shared_ptr<Slime> LavaSlime::createChild() {
return std::shared_ptr<LavaSlime>(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;
hasImpulse = true;
}
void LavaSlime::causeFallDamage(float distance) {}
bool LavaSlime::isDealsDamage() { return true; }
int LavaSlime::getAttackDamage() { return Slime::getAttackDamage() + 2; }
int LavaSlime::getHurtSound() {
return getSize() > 1 ? eSoundType_MOB_SLIME_BIG
: eSoundType_MOB_SLIME_SMALL;
}
int LavaSlime::getDeathSound() {
return getSize() > 1 ? eSoundType_MOB_SLIME_BIG
: eSoundType_MOB_SLIME_SMALL;
}
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; }