feat: TU19 (Dec 2014) Features & Content (#155)

* try to resolve merge conflict

* feat: TU19 (Dec 2014) Features & Content (#32)

* December 2014 files

* Working release build

* Fix compilation issues

* Add sound to Windows64Media

* Add DLC content and force Tutorial DLC

* Revert "Add DLC content and force Tutorial DLC"

This reverts commit 97a4399472.

* Disable broken light packing

* Disable breakpoint during DLC texture map load

Allows DLC loading but the DLC textures are still broken

* Fix post build not working

* ...

* fix vs2022 build

* fix cmake build

---------

Co-authored-by: Loki <lokirautio@gmail.com>
This commit is contained in:
daoge
2026-03-03 03:04:10 +08:00
committed by GitHub
parent 84c31a2331
commit b3feddfef3
2069 changed files with 264842 additions and 139522 deletions

View File

@@ -2,11 +2,14 @@
#include "net.minecraft.world.h"
#include "net.minecraft.world.level.h"
#include "net.minecraft.world.item.h"
#include "net.minecraft.world.entity.ai.attributes.h"
#include "net.minecraft.world.entity.item.h"
#include "net.minecraft.world.entity.player.h"
#include "net.minecraft.world.effect.h"
#include "net.minecraft.world.entity.h"
#include "net.minecraft.world.entity.monster.h"
#include "com.mojang.nbt.h"
#include "BasicTypeContainers.h"
#include "Spider.h"
#include "..\Minecraft.Client\Textures.h"
#include "SoundTypes.h"
@@ -18,13 +21,10 @@ Spider::Spider(Level *level) : Monster( 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
this->defineSynchedData();
registerAttributes();
setHealth(getMaxHealth());
// 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_SPIDER; // 4J was L"/mob/spider.png";
this->setSize(1.4f, 0.9f);
runSpeed = 0.8f;
}
void Spider::defineSynchedData()
@@ -46,19 +46,12 @@ void Spider::tick()
}
}
int Spider::getMaxHealth()
void Spider::registerAttributes()
{
return 16;
}
Monster::registerAttributes();
double Spider::getRideHeight()
{
return bbHeight * 0.75 - 0.5f;
}
bool Spider::makeStepSound()
{
return false;
getAttribute(SharedMonsterAttributes::MAX_HEALTH)->setBaseValue(16);
getAttribute(SharedMonsterAttributes::MOVEMENT_SPEED)->setBaseValue(0.8f);
}
shared_ptr<Entity> Spider::findAttackTarget()
@@ -96,12 +89,17 @@ int Spider::getDeathSound()
return eSoundType_MOB_SPIDER_DEATH;
}
void Spider::playStepSound(int xt, int yt, int zt, int t)
{
playSound(eSoundType_MOB_SPIDER_STEP, 0.15f, 1);
}
void Spider::checkHurtTarget(shared_ptr<Entity> target, float d)
{
float br = getBrightness(1);
if (br > 0.5f && random->nextInt(100) == 0)
{
this->attackTarget = nullptr;
attackTarget = nullptr;
return;
}
@@ -139,25 +137,20 @@ void Spider::dropDeathLoot(bool wasKilledByPlayer, int playerBonusLevel)
}
/**
* The the spiders act as if they're always on a ladder, which enables them
* to climb walls.
*/
* The the spiders act as if they're always on a ladder, which enables them
* to climb walls.
*/
bool Spider::onLadder()
{
return isClimbing();
}
void Spider::makeStuckInWeb()
{
// do nothing - spiders don't get stuck in web
}
float Spider::getModelScale()
{
return 1.0f;
}
MobType Spider::getMobType()
{
return ARTHROPOD;
@@ -189,4 +182,71 @@ void Spider::setClimbing(bool value)
flags &= ~0x1;
}
entityData->set(DATA_FLAGS_ID, flags);
}
MobGroupData *Spider::finalizeMobSpawn(MobGroupData *groupData, int extraData /*= 0*/) // 4J Added extraData param
{
groupData = Monster::finalizeMobSpawn(groupData);
#ifndef _CONTENT_PACKAGE
// 4J-JEV: Added for spider-jockey spawn-egg.
if ( (level->random->nextInt(100) == 0) || (extraData != 0) )
#else
if (level->random->nextInt(100) == 0)
#endif
{
shared_ptr<Skeleton> skeleton = shared_ptr<Skeleton>( new Skeleton(level) );
skeleton->moveTo(x, y, z, yRot, 0);
skeleton->finalizeMobSpawn(NULL);
level->addEntity(skeleton);
skeleton->ride(shared_from_this());
}
if (groupData == NULL)
{
groupData = new SpiderEffectsGroupData();
if (level->difficulty > Difficulty::NORMAL && level->random->nextFloat() < SPIDER_SPECIAL_EFFECT_CHANCE * level->getDifficulty(x, y, z))
{
((SpiderEffectsGroupData *) groupData)->setRandomEffect(level->random);
}
}
if ( dynamic_cast<SpiderEffectsGroupData *>( groupData ) != NULL)
{
int effect = ((SpiderEffectsGroupData *) groupData)->effectId;
if (effect > 0 && MobEffect::effects[effect] != NULL)
{
addEffect(new MobEffectInstance(effect, Integer::MAX_VALUE));
}
}
return groupData;
}
const float Spider::SPIDER_SPECIAL_EFFECT_CHANCE = .1f;
Spider::SpiderEffectsGroupData::SpiderEffectsGroupData()
{
effectId = 0;
}
void Spider::SpiderEffectsGroupData::setRandomEffect(Random *random)
{
int selection = random->nextInt(5);
if (selection <= 1)
{
effectId = MobEffect::movementSpeed->id;
}
else if (selection <= 2)
{
effectId = MobEffect::damageBoost->id;
}
else if (selection <= 3)
{
effectId = MobEffect::regeneration->id;
}
else if (selection <= 4)
{
effectId = MobEffect::invisibility->id;
}
}