mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-04-27 01:34:01 +00:00
111 lines
3.2 KiB
C++
111 lines
3.2 KiB
C++
#include "LavaSlime.h"
|
|
|
|
#include <memory>
|
|
#include <vector>
|
|
|
|
#include "java/Random.h"
|
|
#include "minecraft/core/particles/ParticleTypes.h"
|
|
#include "minecraft/sounds/SoundTypes.h"
|
|
#include "minecraft/world/Difficulty.h"
|
|
#include "minecraft/world/entity/ai/attributes/AttributeInstance.h"
|
|
#include "minecraft/world/entity/monster/SharedMonsterAttributes.h"
|
|
#include "minecraft/world/entity/monster/Slime.h"
|
|
#include "minecraft/world/item/Item.h"
|
|
#include "minecraft/world/level/Level.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::make_shared<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; }
|