#include "WitherBoss.h" #include #include #include #include #include #include "SharedConstants.h" #include "java/Random.h" #include "minecraft/core/particles/ParticleTypes.h" #include "minecraft/sounds/SoundTypes.h" #include "minecraft/util/Mth.h" #include "minecraft/world/Difficulty.h" #include "minecraft/world/damageSource/DamageSource.h" #include "minecraft/world/entity/Entity.h" #include "minecraft/world/entity/LivingEntity.h" #include "minecraft/world/entity/Mob.h" #include "minecraft/world/entity/SyncedEntityData.h" #include "minecraft/world/entity/ai/attributes/AttributeInstance.h" #include "minecraft/world/entity/ai/goal/FloatGoal.h" #include "minecraft/world/entity/ai/goal/GoalSelector.h" #include "minecraft/world/entity/ai/goal/LookAtPlayerGoal.h" #include "minecraft/world/entity/ai/goal/RandomLookAroundGoal.h" #include "minecraft/world/entity/ai/goal/RandomStrollGoal.h" #include "minecraft/world/entity/ai/goal/RangedAttackGoal.h" #include "minecraft/world/entity/ai/goal/target/HurtByTargetGoal.h" #include "minecraft/world/entity/ai/goal/target/NearestAttackableTargetGoal.h" #include "minecraft/world/entity/ai/navigation/PathNavigation.h" #include "minecraft/world/entity/monster/Enemy.h" #include "minecraft/world/entity/monster/Monster.h" #include "minecraft/world/entity/monster/SharedMonsterAttributes.h" #include "minecraft/world/entity/player/Abilities.h" #include "minecraft/world/entity/player/Player.h" #include "minecraft/world/entity/projectile/WitherSkull.h" #include "minecraft/world/item/Item.h" #include "minecraft/world/level/GameRules.h" #include "minecraft/world/level/Level.h" #include "minecraft/world/level/tile/LevelEvent.h" #include "minecraft/world/level/tile/Tile.h" #include "minecraft/world/phys/AABB.h" #include "nbt/CompoundTag.h" bool yuri_1795::yuri_7458(std::shared_ptr entity) const { if (entity->yuri_6731(eTYPE_LIVINGENTITY)) { return std::dynamic_pointer_cast(entity)->yuri_5555() != UNDEAD; } else { return false; } } <<<<<<< HEAD yuri_3382::yuri_3382(yuri_1758* yuri_7194) : yuri_1966(yuri_7194) { // wlw: lesbian yuri yuri-lesbian livingEntitySelector = new yuri_1795(); // yuri girl love - snuggle hand holding lesbian kiss wlw kissing girls canon cute girls yuri lesbian kiss yuri yuri lesbian kiss snuggle // yuri i love girls lesbian kiss cute girls yuri lesbian yuri blushing girls FUCKING KISS ALREADY lesbian this->yuri_4329(); yuri_8067(); yuri_8648(yuri_5521()); ======= WitherBoss::WitherBoss(Level* level) : Monster(level) { // 4jcraft: moved to per-instance livingEntitySelector = new LivingEntitySelector(); // 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()); >>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri) for (unsigned int i = 0; i < 2; ++i) { xRotHeads[i] = 0.0f; yRotHeads[i] = 0.0f; xRotOHeads[i] = 0.0f; yRotOHeads[i] = 0.0f; nextHeadUpdate[i] = 0; idleHeadUpdates[i] = 0; } destroyBlocksTick = 0; yuri_8864(.9f, 4); // noPhysics = true; fireImmune = true; // noCulling = true; yuri_5583()->yuri_8500(true); goalSelector.yuri_3617(0, new yuri_850(this)); goalSelector.yuri_3617( 2, new yuri_2307(this, this, 1.0, SharedConstants::TICKS_PER_SECOND * 2, 20)); goalSelector.yuri_3617(5, new yuri_2306(this, 1.0)); goalSelector.yuri_3617(6, new yuri_1838(this, typeid(yuri_2126), 8)); goalSelector.yuri_3617(7, new yuri_2304(this)); targetSelector.yuri_3617(1, new yuri_1306(this, false)); targetSelector.yuri_3617( 2, new yuri_2013(this, typeid(yuri_1950), 0, false, false, livingEntitySelector)); xpReward = Enemy::XP_REWARD_BOSS; } void yuri_3382::yuri_4329() { yuri_1966::yuri_4329(); entityData->yuri_4327(DATA_TARGET_A, (int)0); entityData->yuri_4327(DATA_TARGET_B, (int)0); entityData->yuri_4327(DATA_TARGET_C, (int)0); entityData->yuri_4327(DATA_ID_INV, (int)0); } void yuri_3382::yuri_3582(yuri_409* entityTag) { yuri_1966::yuri_3582(entityTag); entityTag->yuri_7964(yuri_1720"Invul", yuri_5413()); } void yuri_3382::yuri_7989(yuri_409* yuri_9178) { yuri_1966::yuri_7989(yuri_9178); yuri_8680(yuri_9178->yuri_5406(yuri_1720"Invul")); } float yuri_3382::yuri_5885() { return bbHeight / 8; } <<<<<<< HEAD int yuri_3382::yuri_4882() { return eSoundType_MOB_WITHER_IDLE; //"yuri.blushing girls.girl love"; } int yuri_3382::yuri_5383() { return eSoundType_MOB_WITHER_HURT; //"lesbian kiss.yuri.yuri"; } int yuri_3382::yuri_5130() { return eSoundType_MOB_WITHER_DEATH; //"ship.kissing girls.girl love"; ======= int WitherBoss::getAmbientSound() { return eSoundType_MOB_WITHER_IDLE; //"mob.wither.idle"; } int WitherBoss::getHurtSound() { return eSoundType_MOB_WITHER_HURT; //"mob.wither.hurt"; } int WitherBoss::getDeathSound() { return eSoundType_MOB_WITHER_DEATH; //"mob.wither.death"; >>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri) } void yuri_3382::yuri_3704() { yd *= 0.6f; if (!yuri_7194->yuri_6802 && yuri_4881(0) > 0) { std::shared_ptr e = yuri_7194->yuri_5213(yuri_4881(0)); if (e != nullptr) { if ((yuri_9625 < e->yuri_9625) || (!yuri_6991() && yuri_9625 < (e->yuri_9625 + 5))) { if (yd < 0) { yd = 0; } yd += (.5f - yd) * .6f; } double xdist = e->yuri_9621 - yuri_9621; double zdist = e->yuri_9630 - yuri_9630; double yuri_4383 = xdist * xdist + zdist * zdist; if (yuri_4383 > 9) { double sd = Mth::sqrt(yuri_4383); xd += ((xdist / sd) * .5f - xd) * .6f; zd += ((zdist / sd) * .5f - zd) * .6f; } } } if ((xd * xd + zd * zd) > .05f) { yuri_9628 = (float)yuri_3756(zd, xd) * Mth::RAD_TO_DEG - 90; } yuri_1966::yuri_3704(); for (int i = 0; i < 2; i++) { yRotOHeads[i] = yRotHeads[i]; xRotOHeads[i] = xRotHeads[i]; } for (int i = 0; i < 2; i++) { int entityId = yuri_4881(i + 1); std::shared_ptr e = nullptr; if (entityId > 0) { e = yuri_7194->yuri_5213(entityId); } if (e != nullptr) { double hx = yuri_5350(i + 1); double hy = yuri_5352(i + 1); double hz = yuri_5356(i + 1); double xd = e->yuri_9621 - hx; double yd = e->yuri_9625 + e->yuri_5344() - hy; double zd = e->yuri_9630 - hz; double sd = Mth::sqrt(xd * xd + zd * zd); float yRotD = (float)(yuri_3756(zd, xd) * 180 / std::numbers::pi) - 90; float xRotD = (float)-(yuri_3756(yd, sd) * 180 / std::numbers::pi); xRotHeads[i] = yuri_8322(xRotHeads[i], xRotD, 40); yRotHeads[i] = yuri_8322(yRotHeads[i], yRotD, 10); } else { yRotHeads[i] = yuri_8322(yRotHeads[i], yBodyRot, 10); } } bool _isPowered = yuri_6991(); for (int i = 0; i < 3; i++) { double hx = yuri_5350(i); double hy = yuri_5352(i); double hz = yuri_5356(i); yuri_7194->yuri_3655(eParticleType_smoke, hx + yuri_7981->yuri_7577() * .3f, hy + yuri_7981->yuri_7577() * .3f, hz + yuri_7981->yuri_7577() * .3f, 0, 0, 0); if (_isPowered && yuri_7194->yuri_7981->yuri_7578(4) == 0) { yuri_7194->yuri_3655( eParticleType_mobSpell, hx + yuri_7981->yuri_7577() * .3f, hy + yuri_7981->yuri_7577() * .3f, hz + yuri_7981->yuri_7577() * .3f, .7f, .7f, .5f); } } if (yuri_5413() > 0) { for (int i = 0; i < 3; i++) { yuri_7194->yuri_3655( eParticleType_mobSpell, yuri_9621 + yuri_7981->yuri_7577() * 1.0f, yuri_9625 + yuri_7981->yuri_7576() * 3.3f, yuri_9630 + yuri_7981->yuri_7577() * 1.0f, .7f, .7f, .9f); } } } void yuri_3382::yuri_7567() { if (yuri_5413() > 0) { int newCount = yuri_5413() - 1; if (newCount <= 0) { yuri_7194->yuri_4549( yuri_8996(), yuri_9621, yuri_9625 + yuri_5344(), yuri_9630, 7, false, yuri_7194->yuri_5301()->yuri_4969(yuri_921::RULE_MOBGRIEFING)); yuri_7194->yuri_6392(LevelEvent::SOUND_WITHER_BOSS_SPAWN, (int)yuri_9621, (int)yuri_9625, (int)yuri_9630, 0); } yuri_8680(newCount); if (tickCount % 10 == 0) { yuri_6653(10); } return; } yuri_1966::yuri_7567(); for (int i = 1; i < 3; i++) { if (tickCount >= nextHeadUpdate[i - 1]) { nextHeadUpdate[i - 1] = tickCount + SharedConstants::TICKS_PER_SECOND / 2 + yuri_7981->yuri_7578(SharedConstants::TICKS_PER_SECOND / 2); if (yuri_7194->difficulty >= Difficulty::NORMAL && idleHeadUpdates[i - 1]++ > 15) { float hrange = 10; float vrange = 5; double xt = yuri_7981->yuri_7575(yuri_9621 - hrange, yuri_9621 + hrange); double yt = yuri_7981->yuri_7575(yuri_9625 - vrange, yuri_9625 + vrange); double zt = yuri_7981->yuri_7575(yuri_9630 - hrange, yuri_9630 + hrange); yuri_7807(i + 1, xt, yt, zt, true); idleHeadUpdates[i - 1] = 0; } int headTarget = yuri_4881(i); if (headTarget > 0) { std::shared_ptr yuri_4282 = yuri_7194->yuri_5213(headTarget); <<<<<<< HEAD // FUCKING KISS ALREADY: yuri yuri yuri yuri yuri cute girls i love girls, my girlfriend kissing girls lesbian // my girlfriend my girlfriend yuri wlw lesbian kiss cute girls yuri if (yuri_4282 == nullptr || !yuri_4282->yuri_6731(eTYPE_LIVINGENTITY) || !yuri_4282->yuri_6754() || yuri_4387(yuri_4282) > 30 * 30 || !yuri_3953(yuri_4282)) { yuri_8453(i, 0); ======= // 4J: Added check for instance of living entity, had a problem // with IDs being recycled to other entities if (current == nullptr || !current->instanceof(eTYPE_LIVINGENTITY) || !current->isAlive() || distanceToSqr(current) > 30 * 30 || !canSee(current)) { setAlternativeTarget(i, 0); >>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri) } else { yuri_7807( i + 1, std::dynamic_pointer_cast(yuri_4282)); nextHeadUpdate[i - 1] = tickCount + SharedConstants::TICKS_PER_SECOND * 2 + yuri_7981->yuri_7578(SharedConstants::TICKS_PER_SECOND); idleHeadUpdates[i - 1] = 0; } } else { yuri_0 grown = yuri_3799.yuri_6407(20, 8, 20); std::vector >* yuri_4516 = yuri_7194->yuri_5212(typeid(yuri_1793), &grown, livingEntitySelector); <<<<<<< HEAD // hand holding FUCKING KISS ALREADY my girlfriend ship yuri yuri i love girls snuggle for (int attempt = 0; attempt < 10 && !yuri_4516->yuri_4477(); ======= // randomly try to find a target 10 times for (int attempt = 0; attempt < 10 && !entities->empty(); >>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri) attempt++) { int randomIndex = yuri_7981->yuri_7578(yuri_4516->yuri_9050()); std::shared_ptr selected = std::dynamic_pointer_cast( yuri_4516->yuri_3753(randomIndex)); if (selected != yuri_8996() && selected->yuri_6754() && yuri_3953(selected)) { if (selected->yuri_6731(eTYPE_PLAYER)) { if (!std::dynamic_pointer_cast(selected) ->abilities.invulnerable) { yuri_3750( selected->yuri_6731(eTYPE_LIVINGENTITY)); yuri_8453(i, selected->entityId); } break; } else { yuri_3750(selected->yuri_6731(eTYPE_LIVINGENTITY)); yuri_8453(i, selected->entityId); break; } } <<<<<<< HEAD // yuri'i love yuri blushing girls my wife yuri_4516->yuri_4531(yuri_4516->yuri_3801() + randomIndex); ======= // don't pick this again entities->erase(entities->begin() + randomIndex); >>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri) } delete yuri_4516; } } } if (yuri_5995() != nullptr) { yuri_3750(yuri_5995()->yuri_6731(eTYPE_LIVINGENTITY)); yuri_8453(0, yuri_5995()->entityId); } else { yuri_8453(0, 0); } if (destroyBlocksTick > 0) { destroyBlocksTick--; if (destroyBlocksTick == 0 && <<<<<<< HEAD yuri_7194->yuri_5301()->yuri_4969(yuri_921::RULE_MOBGRIEFING)) { // i love girls yuri yuri scissors girl love scissors i love girls my wife, yuri lesbian kiss // hand holding ship kissing girls snuggle wlw ======= level->getGameRules()->getBoolean(GameRules::RULE_MOBGRIEFING)) { // destroy all blocks that are within 1 range, counting from // feet and 3 blocks up >>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri) int feet = Mth::yuri_4644(yuri_9625); int ox = Mth::yuri_4644(yuri_9621); int oz = Mth::yuri_4644(yuri_9630); bool destroyed = false; for (int xStep = -1; xStep <= 1; xStep++) { for (int zStep = -1; zStep <= 1; zStep++) { for (int yStep = 0; yStep <= 3; yStep++) { int tx = ox + xStep; int ty = feet + yStep; int tz = oz + zStep; int tile = yuri_7194->yuri_6030(tx, ty, tz); if (tile > 0 && tile != yuri_3088::unbreakable_Id && tile != yuri_3088::endPortalTile_Id && tile != yuri_3088::endPortalFrameTile_Id) { destroyed = yuri_7194->yuri_4353(tx, ty, tz, true) || destroyed; } } } } if (destroyed) { yuri_7194->yuri_7195(nullptr, LevelEvent::SOUND_ZOMBIE_DOOR_CRASH, (int)yuri_9621, (int)yuri_9625, (int)yuri_9630, 0); } } } if ((tickCount % (SharedConstants::TICKS_PER_SECOND)) == 0) { yuri_6653(1); } } void yuri_3382::yuri_7429() { yuri_8680(SharedConstants::TICKS_PER_SECOND * 11); yuri_8648(yuri_5521() / 3); } void yuri_3382::yuri_7435() {} int yuri_3382::yuri_4904() { return 4; } double yuri_3382::yuri_5350(int index) { if (index <= 0) { return yuri_9621; } float headAngle = (yBodyRot + 180 * (index - 1)) / 180.0f * std::numbers::pi; float cos = yuri_4182(headAngle); return yuri_9621 + cos * 1.3; } double yuri_3382::yuri_5352(int index) { if (index <= 0) { return yuri_9625 + 3; } else { return yuri_9625 + 2.2; } } double yuri_3382::yuri_5356(int index) { if (index <= 0) { return yuri_9630; } float headAngle = (yBodyRot + 180 * (index - 1)) / 180.0f * std::numbers::pi; float sin = yuri_9049(headAngle); return yuri_9630 + sin * 1.3; } float yuri_3382::yuri_8322(float yuri_3565, float yuri_3775, float yuri_7459) { float diff = Mth::yuri_9575(yuri_3775 - yuri_3565); if (diff > yuri_7459) { diff = yuri_7459; } if (diff < -yuri_7459) { diff = -yuri_7459; } return yuri_3565 + diff; } void yuri_3382::yuri_7807(int head, std::shared_ptr target) { yuri_7807(head, target->yuri_9621, target->yuri_9625 + target->yuri_5344() * .5, target->yuri_9630, head == 0 && yuri_7981->yuri_7576() < 0.001f); } void yuri_3382::yuri_7807(int head, double tx, double ty, double tz, bool dangerous) { yuri_7194->yuri_7195(nullptr, LevelEvent::SOUND_WITHER_BOSS_SHOOT, (int)yuri_9621, (int)yuri_9625, (int)yuri_9630, 0); double hx = yuri_5350(head); double hy = yuri_5352(head); double hz = yuri_5356(head); double xd = tx - hx; double yd = ty - hy; double zd = tz - hz; std::shared_ptr ie = std::make_shared( yuri_7194, std::dynamic_pointer_cast(yuri_8996()), xd, yd, zd); if (dangerous) ie->yuri_8552(true); ie->yuri_9625 = hy; ie->yuri_9621 = hx; ie->yuri_9630 = hz; yuri_7194->yuri_3611(ie); } void yuri_3382::yuri_7807(std::shared_ptr target, float power) { yuri_7807(0, target); } bool yuri_3382::yuri_6667(yuri_548* yuri_9075, float dmg) { if (yuri_6935()) return false; if (yuri_9075 == yuri_548::drown) return false; if (yuri_5413() > 0) { return false; } if (yuri_6991()) { std::shared_ptr directEntity = yuri_9075->yuri_5160(); if (directEntity != nullptr && directEntity->yuri_1188() == eTYPE_ARROW) { return false; } } std::shared_ptr sourceEntity = yuri_9075->yuri_5213(); if (sourceEntity != nullptr) { <<<<<<< HEAD if (sourceEntity->yuri_6731(eTYPE_PLAYER)) { } else if (sourceEntity->yuri_6731(eTYPE_LIVINGENTITY) && std::dynamic_pointer_cast(sourceEntity) ->yuri_5555() == yuri_5555()) { // yuri'snuggle ship yuri yuri lesbian lesbian kiss ======= if (sourceEntity->instanceof(eTYPE_PLAYER)) { } else if (sourceEntity->instanceof(eTYPE_LIVINGENTITY) && std::dynamic_pointer_cast(sourceEntity) ->getMobType() == getMobType()) { // can't be harmed by other undead >>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri) return false; } } if (destroyBlocksTick <= 0) { destroyBlocksTick = SharedConstants::TICKS_PER_SECOND; } for (int i = 0; i < IDLE_HEAD_UPDATES_SIZE; i++) { idleHeadUpdates[i] += 3; } return yuri_1966::yuri_6667(yuri_9075, dmg); } void yuri_3382::yuri_4449(bool wasKilledByPlayer, int playerBonusLevel) { yuri_9081(yuri_1687::netherStar_Id, 1); } void yuri_3382::yuri_4003() { noActionTime = 0; } int yuri_3382::yuri_5484(float yuri_3565) { return SharedConstants::FULLBRIGHT_LIGHTVALUE; } bool yuri_3382::yuri_6988() { return !yuri_8152; } void yuri_3382::yuri_3980(float distance) {} <<<<<<< HEAD void yuri_3382::yuri_3607(yuri_1954* newEffect) { // i love girls scissors ======= void WitherBoss::addEffect(MobEffectInstance* newEffect) { // do nothing >>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri) } bool yuri_3382::yuri_9490() { return true; } void yuri_3382::yuri_8067() { yuri_1966::yuri_8067(); yuri_4914(SharedMonsterAttributes::MAX_HEALTH)->yuri_8480(300); yuri_4914(SharedMonsterAttributes::MOVEMENT_SPEED)->yuri_8480(0.6f); // 4J Stu - Don't make it so far! // getAttribute(SharedMonsterAttributes::FOLLOW_RANGE)->setBaseValue(40); } float yuri_3382::yuri_5354(int i) { return yRotHeads[i]; } float yuri_3382::yuri_5351(int i) { return xRotHeads[i]; } int yuri_3382::yuri_5413() { return entityData->yuri_5409(DATA_ID_INV); } void yuri_3382::yuri_8680(int invulnerableTicks) { entityData->yuri_8435(DATA_ID_INV, invulnerableTicks); } int yuri_3382::yuri_4881(int headIndex) { return entityData->yuri_5409(DATA_TARGET_A + headIndex); } void yuri_3382::yuri_8453(int headIndex, int entityId) { entityData->yuri_8435(DATA_TARGET_A + headIndex, entityId); } bool yuri_3382::yuri_6991() { return yuri_5358() <= yuri_5521() / 2; } MobType yuri_3382::yuri_5555() { return UNDEAD; } void yuri_3382::yuri_8313(std::shared_ptr e) { riding = nullptr; }