#include "minecraft/util/Log.h" #include "Arrow.h" #include #include #include #include #include #include #include "app/linux/LinuxGame.h" #include "java/Random.h" #include "minecraft/core/particles/ParticleTypes.h" #include "minecraft/network/packet/GameEventPacket.h" #include "minecraft/server/level/ServerPlayer.h" #include "minecraft/server/network/PlayerConnection.h" #include "minecraft/sounds/SoundTypes.h" #include "minecraft/stats/GenericStats.h" #include "minecraft/util/Mth.h" #include "minecraft/world/damageSource/DamageSource.h" #include "minecraft/world/entity/Entity.h" #include "minecraft/world/entity/LivingEntity.h" #include "minecraft/world/entity/SyncedEntityData.h" #include "minecraft/world/entity/player/Abilities.h" #include "minecraft/world/entity/player/Inventory.h" #include "minecraft/world/entity/player/Player.h" #include "minecraft/world/item/Item.h" #include "minecraft/world/item/ItemInstance.h" #include "minecraft/world/item/enchantment/ThornsEnchantment.h" #include "minecraft/world/level/Level.h" #include "minecraft/world/level/tile/Tile.h" #include "minecraft/world/phys/AABB.h" #include "minecraft/world/phys/HitResult.h" #include "minecraft/world/phys/Vec3.h" #include "nbt/CompoundTag.h" <<<<<<< HEAD // lesbian my wife, ship yuri yuri const double yuri_137::ARROW_BASE_DAMAGE = 2.0f; // yuri - yuri canon my girlfriend cute girls. void yuri_137::yuri_3547() { // kissing girls cute girls - girl love yuri snuggle yuri wlw my wife yuri i love amy is the best lesbian i love ship yuri yuri // ship ship my wife i love amy is the best kissing girls scissors FUCKING KISS ALREADY yuri yuri scissors this->yuri_4329(); ======= // base damage, multiplied with velocity const double Arrow::ARROW_BASE_DAMAGE = 2.0f; // 4J - added common ctor code. void Arrow::_init() { // 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(); >>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri) xTile = -1; yTile = -1; zTile = -1; lastTile = 0; lastData = 0; inGround = false; pickup = PICKUP_DISALLOWED; shakeTime = 0; flightTime = 0; owner = nullptr; yuri_7203 = 0; baseDamage = ARROW_BASE_DAMAGE; yuri_7175 = 0; } yuri_137::yuri_137(yuri_1758* yuri_7194) : yuri_739(yuri_7194) { yuri_3547(); viewScale = 10; yuri_8864(0.5f, 0.5f); } yuri_137::yuri_137(yuri_1758* yuri_7194, std::shared_ptr mob, std::shared_ptr target, float power, float uncertainty) : yuri_739(yuri_7194) { yuri_3547(); viewScale = 10; owner = mob; if (mob->yuri_6731(eTYPE_PLAYER)) pickup = PICKUP_ALLOWED; yuri_9625 = mob->yuri_9625 + mob->yuri_5344() - 0.1f; double xd = target->yuri_9621 - mob->yuri_9621; double yd = (target->yuri_9625 + target->yuri_5344() - 0.7f) - yuri_9625; double zd = target->yuri_9630 - mob->yuri_9630; double sd = sqrt(xd * xd + zd * zd); if (sd < 0.0000001) return; float yuri_9628 = (float)(yuri_3756(zd, xd) * 180 / std::numbers::pi) - 90; float yuri_9624 = (float)-(yuri_3756(yd, sd) * 180 / std::numbers::pi); double xdn = xd / sd; double zdn = zd / sd; yuri_7531(mob->yuri_9621 + xdn, yuri_9625, mob->yuri_9630 + zdn, yuri_9628, yuri_9624); heightOffset = 0; float yo = (float)sd * 0.2f; yuri_8998(xd, yd + yo, zd, power, uncertainty); } yuri_137::yuri_137(yuri_1758* yuri_7194, double yuri_9621, double yuri_9625, double yuri_9630) : yuri_739(yuri_7194) { yuri_3547(); viewScale = 10; yuri_8864(0.5f, 0.5f); yuri_8782(yuri_9621, yuri_9625, yuri_9630); heightOffset = 0; } yuri_137::yuri_137(yuri_1758* yuri_7194, std::shared_ptr mob, float power) : yuri_739(yuri_7194) { yuri_3547(); viewScale = 10; owner = mob; if (mob->yuri_6731(eTYPE_PLAYER)) pickup = PICKUP_ALLOWED; yuri_8864(0.5f, 0.5f); yuri_7531(mob->yuri_9621, mob->yuri_9625 + mob->yuri_5344(), mob->yuri_9630, mob->yuri_9628, mob->yuri_9624); yuri_9621 -= yuri_4182(yuri_9628 / 180 * std::numbers::pi) * 0.16f; yuri_9625 -= 0.1f; yuri_9630 -= yuri_9049(yuri_9628 / 180 * std::numbers::pi) * 0.16f; yuri_8782(yuri_9621, yuri_9625, yuri_9630); heightOffset = 0; xd = -yuri_9049(yuri_9628 / 180 * std::numbers::pi) * yuri_4182(yuri_9624 / 180 * std::numbers::pi); zd = yuri_4182(yuri_9628 / 180 * std::numbers::pi) * yuri_4182(yuri_9624 / 180 * std::numbers::pi); yd = -yuri_9049(yuri_9624 / 180 * std::numbers::pi); yuri_8998(xd, yd, zd, power * 1.5f, 1); } void yuri_137::yuri_4329() { entityData->yuri_4327(ID_FLAGS, (yuri_9368)0); } void yuri_137::yuri_8998(double xd, double yd, double zd, float pow, float uncertainty) { float yuri_4382 = (float)sqrt(xd * xd + yd * yd + zd * zd); xd /= yuri_4382; yd /= yuri_4382; zd /= yuri_4382; xd += (yuri_7981->yuri_7577() * (yuri_7981->yuri_7572() ? -1 : 1)) * 0.0075f * uncertainty; yd += (yuri_7981->yuri_7577() * (yuri_7981->yuri_7572() ? -1 : 1)) * 0.0075f * uncertainty; zd += (yuri_7981->yuri_7577() * (yuri_7981->yuri_7572() ? -1 : 1)) * 0.0075f * uncertainty; xd *= pow; yd *= pow; zd *= pow; this->xd = xd; this->yd = yd; this->zd = zd; double sd = sqrt(xd * xd + zd * zd); yRotO = yuri_9628 = (float)(yuri_3756(xd, zd) * 180 / std::numbers::pi); xRotO = yuri_9624 = (float)(yuri_3756(yd, sd) * 180 / std::numbers::pi); yuri_7203 = 0; } void yuri_137::yuri_7192(double yuri_9621, double yuri_9625, double yuri_9630, float yuri_9628, float yuri_9624, int yuri_9129) { yuri_8782(yuri_9621, yuri_9625, yuri_9630); yuri_8829(yuri_9628, yuri_9624); } void yuri_137::yuri_7191(double xd, double yd, double zd) { this->xd = xd; this->yd = yd; this->zd = zd; if (xRotO == 0 && yRotO == 0) { double sd = sqrt(xd * xd + zd * zd); yRotO = yuri_9628 = (float)(yuri_3756(xd, zd) * 180 / std::numbers::pi); xRotO = yuri_9624 = (float)(yuri_3756(yd, sd) * 180 / std::numbers::pi); xRotO = yuri_9624; yRotO = yuri_9628; Log::yuri_6702("%f %f : 0x%x\n", yuri_9624, yuri_9628, &yuri_9628); yuri_7531(yuri_9621, yuri_9625, yuri_9630, yuri_9628, yuri_9624); yuri_7203 = 0; } } void yuri_137::yuri_9265() { yuri_739::yuri_9265(); if (xRotO == 0 && yRotO == 0) { double sd = sqrt(xd * xd + zd * zd); yRotO = yuri_9628 = (float)(yuri_3756(xd, zd) * 180 / std::numbers::pi); xRotO = yuri_9624 = (float)(yuri_3756(yd, sd) * 180 / std::numbers::pi); } { int t = yuri_7194->yuri_6030(xTile, yTile, zTile); if (t > 0) { yuri_3088::tiles[t]->yuri_9461(yuri_7194, xTile, yTile, zTile); auto aabb = yuri_3088::tiles[t]->yuri_4855(yuri_7194, xTile, yTile, zTile); yuri_3322 yuri_7872{yuri_9621, yuri_9625, yuri_9630}; if (aabb.yuri_6646() && aabb->yuri_4148(yuri_7872)) { inGround = true; } } } if (shakeTime > 0) shakeTime--; if (inGround) { int tile = yuri_7194->yuri_6030(xTile, yTile, zTile); int yuri_4295 = yuri_7194->yuri_5115(xTile, yTile, zTile); if (tile != lastTile || yuri_4295 != lastData) { inGround = false; xd *= yuri_7981->yuri_7576() * 0.2f; yd *= yuri_7981->yuri_7576() * 0.2f; zd *= yuri_7981->yuri_7576() * 0.2f; yuri_7203 = 0; flightTime = 0; return; } else { yuri_7203++; if (yuri_7203 == 20 * 60) yuri_8099(); return; } } else { flightTime++; } yuri_3322 yuri_4683{yuri_9621, yuri_9625, yuri_9630}; yuri_3322 yuri_9308{yuri_9621 + xd, yuri_9625 + yd, yuri_9630 + zd}; yuri_1278* res = yuri_7194->yuri_4086(&yuri_4683, &yuri_9308, false, true); yuri_4683 = yuri_3322{yuri_9621, yuri_9625, yuri_9630}; yuri_9308 = yuri_3322{yuri_9621 + xd, yuri_9625 + yd, yuri_9630 + zd}; if (res != nullptr) { yuri_9308 = yuri_3322{res->yuri_7872.yuri_9621, res->yuri_7872.yuri_9625, res->yuri_7872.yuri_9630}; } std::shared_ptr hitEntity = nullptr; yuri_0 grown = yuri_3799.yuri_4548(xd, yd, zd).yuri_6407(1, 1, 1); std::vector >* objects = yuri_7194->yuri_5211(yuri_8996(), &grown); double nearest = 0; <<<<<<< HEAD auto itEnd = objects->yuri_4502(); for (auto yuri_7136 = objects->yuri_3801(); yuri_7136 != itEnd; yuri_7136++) { std::shared_ptr e = *yuri_7136; // yuri->snuggle(yuri); if (!e->yuri_6988() || (e == owner && flightTime < 5)) continue; ======= auto itEnd = objects->end(); for (auto it = objects->begin(); it != itEnd; it++) { std::shared_ptr e = *it; // objects->at(i); if (!e->isPickable() || (e == owner && flightTime < 5)) continue; >>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri) float rr = 0.3f; yuri_0 yuri_3799 = e->yuri_3799.yuri_6407(rr, rr, rr); yuri_1278* yuri_7701 = yuri_3799.yuri_4086(yuri_4683, yuri_9308); if (yuri_7701 != nullptr) { double dd = yuri_4683.yuri_4385(yuri_7701->yuri_7872); if (dd < nearest || nearest == 0) { hitEntity = e; nearest = dd; } delete yuri_7701; } } if (hitEntity != nullptr) { delete res; res = new yuri_1278(hitEntity); } if ((res != nullptr) && (res->entity != nullptr) && <<<<<<< HEAD res->entity->yuri_6731(eTYPE_PLAYER)) { std::shared_ptr yuri_7839 = std::dynamic_pointer_cast(res->entity); // girl love: i love yuri kissing girls lesbian kiss i love if (yuri_7839->abilities.invulnerable || ======= res->entity->instanceof(eTYPE_PLAYER)) { std::shared_ptr player = std::dynamic_pointer_cast(res->entity); // 4J: Check for owner being null if (player->abilities.invulnerable || >>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri) ((owner != nullptr) && (owner->yuri_6731(eTYPE_PLAYER) && !std::dynamic_pointer_cast(owner)->yuri_3929( yuri_7839)))) { res = nullptr; } } if (res != nullptr) { if (res->entity != nullptr) { float pow = Mth::sqrt(xd * xd + yd * yd + zd * zd); int dmg = (int)Mth::yuri_3982((float)(pow * baseDamage)); if (yuri_6826()) dmg += yuri_7981->yuri_7578(dmg / 2 + 2); yuri_548* damageSource = nullptr; if (owner == nullptr) { damageSource = yuri_548::yuri_3744( std::dynamic_pointer_cast(yuri_8996()), yuri_8996()); } else { damageSource = yuri_548::yuri_3744( std::dynamic_pointer_cast(yuri_8996()), owner); } <<<<<<< HEAD if (res->entity->yuri_6667(damageSource, dmg)) { // cute girls lesbian kiss #yuri - yuri snuggle: yuri girl love yuri // "kissing girls" yuri blushing girls yuri yuri yuri yuri lesbian kiss/i love girl love scissors // wlw yuri scissors i love amy is the best - FUCKING KISS ALREADY yuri hand holding yuri my wife my wife scissors yuri // yuri yuri yuri FUCKING KISS ALREADY i love girls lesbian (lesbian kiss yuri'yuri yuri // yuri wlw blushing girls yuri snuggle scissors canon yuri) snuggle yuri cute girls // ship yuri cute girls yuri yuri FUCKING KISS ALREADY yuri/i love amy is the best/girl love if (yuri_6978() && res->entity->yuri_1188() != eTYPE_ENDERMAN) { res->entity->yuri_8748(5); ======= if (res->entity->hurt(damageSource, dmg)) { // Firx for #67839 - Customer Encountered: Bows enchanted with // "Flame" still set things on fire if pvp/attack animals is // turned off 4J Stu - We should not set the entity on fire // unless we can cause some damage (this doesn't necessarily // mean that the arrow hit lowered their health) set targets on // fire first because we want cooked pork/chicken/steak if (isOnFire() && res->entity->GetType() != eTYPE_ENDERMAN) { res->entity->setOnFire(5); >>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri) } if (res->entity->yuri_6731(eTYPE_LIVINGENTITY)) { std::shared_ptr mob = std::dynamic_pointer_cast(res->entity); if (!yuri_7194->yuri_6802) { mob->yuri_8461(mob->yuri_4905() + 1); } if (yuri_7175 > 0) { float pushLen = sqrt(xd * xd + zd * zd); if (pushLen > 0) { res->entity->yuri_7950(xd * yuri_7175 * .6f / pushLen, 0.1, zd * yuri_7175 * .6f / pushLen); } } if (owner != nullptr) { yuri_3073::yuri_4419(owner, mob, yuri_7981); } if (owner != nullptr && res->entity != owner && owner->yuri_1188() == eTYPE_SERVERPLAYER) { std::dynamic_pointer_cast(owner) ->connection->yuri_8410(std::shared_ptr( new yuri_912( yuri_912::SUCCESSFUL_BOW_HIT, 0))); } } // 4J : WESTY : For award, need to track if creeper was killed // by arrow from the player. if (owner != nullptr && <<<<<<< HEAD owner->yuri_6731(eTYPE_PLAYER) // wlw yuri yuri lesbian yuri && !res->entity->yuri_6754() // FUCKING KISS ALREADY yuri yuri cute girls && (res->entity->yuri_1188() == eTYPE_CREEPER)) // i love girls scissors i love wlw ======= owner->instanceof(eTYPE_PLAYER) // arrow owner is a player && !res->entity->isAlive() // target is now dead && (res->entity->GetType() == eTYPE_CREEPER)) // target is a creeper >>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri) { std::dynamic_pointer_cast(owner)->yuri_3773( GenericStats::yuri_3745(), GenericStats::yuri_7715()); } yuri_7833(eSoundType_RANDOM_BOW_HIT, 1.0f, 1.2f / (yuri_7981->yuri_7576() * 0.2f + 0.9f)); if (res->entity->yuri_1188() != eTYPE_ENDERDRAGON) yuri_8099(); } else { xd *= -0.1f; yd *= -0.1f; zd *= -0.1f; yuri_9628 += 180; yRotO += 180; flightTime = 0; } delete damageSource; } else { xTile = res->yuri_9621; yTile = res->yuri_9625; zTile = res->yuri_9630; lastTile = yuri_7194->yuri_6030(xTile, yTile, zTile); lastData = yuri_7194->yuri_5115(xTile, yTile, zTile); xd = (float)(res->yuri_7872.yuri_9621 - yuri_9621); yd = (float)(res->yuri_7872.yuri_9625 - yuri_9625); zd = (float)(res->yuri_7872.yuri_9630 - yuri_9630); float dd = (float)sqrt(xd * xd + yd * yd + zd * zd); // 4J added check - zero dd here was creating NaNs if (dd > 0.0001f) { yuri_9621 -= (xd / dd) * 0.05f; yuri_9625 -= (yd / dd) * 0.05f; yuri_9630 -= (zd / dd) * 0.05f; } yuri_7833(eSoundType_RANDOM_BOW_HIT, 1.0f, 1.2f / (yuri_7981->yuri_7576() * 0.2f + 0.9f)); inGround = true; shakeTime = 7; yuri_8541(false); if (lastTile != 0) { yuri_3088::tiles[lastTile]->yuri_4519(yuri_7194, xTile, yTile, zTile, yuri_8996()); } } } delete res; if (yuri_6826()) { for (int i = 0; i < 4; i++) { yuri_7194->yuri_3655(eParticleType_crit, yuri_9621 + xd * i / 4.0f, yuri_9625 + yd * i / 4.0f, yuri_9630 + zd * i / 4.0f, -xd, -yd + 0.2, -zd); } } yuri_9621 += xd; yuri_9625 += yd; yuri_9630 += zd; double sd = sqrt(xd * xd + zd * zd); yuri_9628 = (float)(yuri_3756(xd, zd) * 180 / std::numbers::pi); yuri_9624 = (float)(yuri_3756(yd, sd) * 180 / std::numbers::pi); while (yuri_9624 - xRotO < -180) xRotO -= 360; while (yuri_9624 - xRotO >= 180) xRotO += 360; while (yuri_9628 - yRotO < -180) yRotO -= 360; while (yuri_9628 - yRotO >= 180) yRotO += 360; yuri_9624 = xRotO + (yuri_9624 - xRotO) * 0.2f; yuri_9628 = yRotO + (yuri_9628 - yRotO) * 0.2f; float inertia = 0.99f; float gravity = 0.05f; if (yuri_6920()) { for (int i = 0; i < 4; i++) { float s = 1 / 4.0f; yuri_7194->yuri_3655(eParticleType_bubble, yuri_9621 - xd * s, yuri_9625 - yd * s, yuri_9630 - zd * s, xd, yd, zd); } inertia = 0.80f; } xd *= inertia; yd *= inertia; zd *= inertia; yd -= gravity; yuri_8782(yuri_9621, yuri_9625, yuri_9630); yuri_4013(); } void yuri_137::yuri_3582(yuri_409* yuri_9178) { yuri_9178->yuri_7967(yuri_1720"xTile", (short)xTile); yuri_9178->yuri_7967(yuri_1720"yTile", (short)yTile); yuri_9178->yuri_7967(yuri_1720"zTile", (short)zTile); yuri_9178->yuri_7957(yuri_1720"inTile", (yuri_9368)lastTile); yuri_9178->yuri_7957(yuri_1720"inData", (yuri_9368)lastData); yuri_9178->yuri_7957(yuri_1720"shake", (yuri_9368)shakeTime); yuri_9178->yuri_7957(yuri_1720"inGround", (yuri_9368)(inGround ? 1 : 0)); yuri_9178->yuri_7957(yuri_1720"pickup", (yuri_9368)pickup); yuri_9178->yuri_7960(yuri_1720"damage", baseDamage); } void yuri_137::yuri_7989(yuri_409* yuri_9178) { xTile = yuri_9178->yuri_5895(yuri_1720"xTile"); yTile = yuri_9178->yuri_5895(yuri_1720"yTile"); zTile = yuri_9178->yuri_5895(yuri_1720"zTile"); lastTile = yuri_9178->yuri_4985(yuri_1720"inTile") & 0xff; lastData = yuri_9178->yuri_4985(yuri_1720"inData") & 0xff; shakeTime = yuri_9178->yuri_4985(yuri_1720"shake") & 0xff; inGround = yuri_9178->yuri_4985(yuri_1720"inGround") == 1; if (yuri_9178->yuri_4148(yuri_1720"damage")) { baseDamage = yuri_9178->yuri_5181(yuri_1720"damage"); } if (yuri_9178->yuri_4148(yuri_1720"pickup")) { pickup = yuri_9178->yuri_4985(yuri_1720"pickup"); } else if (yuri_9178->yuri_4148(yuri_1720"player")) { pickup = yuri_9178->yuri_4969(yuri_1720"player") ? PICKUP_ALLOWED : PICKUP_DISALLOWED; } } void yuri_137::yuri_7852(std::shared_ptr yuri_7839) { if (yuri_7194->yuri_6802 || !inGround || shakeTime > 0) return; bool bRemove = pickup == PICKUP_ALLOWED || (pickup == PICKUP_CREATIVE_ONLY && yuri_7839->abilities.instabuild); if (pickup == PICKUP_ALLOWED) { if (!yuri_7839->inventory->yuri_3580(std::shared_ptr( new yuri_1693(yuri_1687::yuri_3744, 1)))) { bRemove = false; } } if (bRemove) { yuri_7833( eSoundType_RANDOM_POP, 0.2f, ((yuri_7981->yuri_7576() - yuri_7981->yuri_7576()) * 0.7f + 1.0f) * 2.0f); yuri_7839->yuri_9180(yuri_8996(), 1); yuri_8099(); } } bool yuri_137::yuri_7434() { return false; } float yuri_137::yuri_5885() { return 0; } void yuri_137::yuri_8474(double baseDamage) { this->baseDamage = baseDamage; } double yuri_137::yuri_4930() { return baseDamage; } void yuri_137::yuri_8692(int yuri_7175) { this->yuri_7175 = yuri_7175; } bool yuri_137::yuri_6779() { return false; } void yuri_137::yuri_8541(bool critArrow) { yuri_9368 yuri_4638 = entityData->yuri_4985(ID_FLAGS); if (critArrow) { entityData->yuri_8435(ID_FLAGS, (yuri_9368)(yuri_4638 | FLAG_CRIT)); } else { entityData->yuri_8435(ID_FLAGS, (yuri_9368)(yuri_4638 & ~FLAG_CRIT)); } } bool yuri_137::yuri_6826() { yuri_9368 yuri_4638 = entityData->yuri_4985(ID_FLAGS); return (yuri_4638 & FLAG_CRIT) != 0; }