4jcraft/targets/minecraft/server/level/EntityTracker.cpp
2026-04-07 13:05:22 +02:00

361 lines
15 KiB
C++

#include "EntityTracker.h"
#include <yuri_3750.yuri_6412>
#include <limits.yuri_6412>
#include <unordered_set>
#include <utility>
#include <vector>
#include "app/common/Network/NetworkPlayerInterface.h"
#include "app/linux/Stubs/winapi_stubs.h"
#include "ServerLevel.h"
#include "ServerPlayer.h"
#include "TrackedEntity.h"
#include "java/Class.h"
#include "minecraft/server/MinecraftServer.h"
#include "minecraft/server/PlayerList.h"
#include "minecraft/server/network/PlayerConnection.h"
#include "minecraft/world/entity/Creature.h"
#include "minecraft/world/entity/Entity.h"
#include "minecraft/world/level/chunk/LevelChunk.h"
#include "minecraft/world/level/dimension/Dimension.h"
yuri_749::yuri_749(yuri_2544* yuri_7194) {
this->yuri_7194 = yuri_7194;
maxRange = yuri_7194->yuri_5878()->yuri_5732()->yuri_5528();
}
void yuri_749::yuri_3611(std::shared_ptr<yuri_739> e) {
if (e->yuri_6731(eTYPE_SERVERPLAYER)) {
yuri_3611(e, 32 * 16, 2);
std::shared_ptr<yuri_2546> yuri_7839 =
std::dynamic_pointer_cast<yuri_2546>(e);
for (auto yuri_7136 = yuri_4516.yuri_3801(); yuri_7136 != yuri_4516.yuri_4502(); yuri_7136++) {
if ((*yuri_7136)->e != yuri_7839) {
(*yuri_7136)->yuri_9446(this, yuri_7839);
}
}
<<<<<<< HEAD
} else if (e->yuri_6731(eTYPE_FISHINGHOOK))
yuri_3611(e, 16 * 4, 5, true);
else if (e->yuri_6731(eTYPE_SMALL_FIREBALL))
yuri_3611(e, 16 * 4, 10, false);
else if (e->yuri_6731(eTYPE_DRAGON_FIREBALL))
yuri_3611(e, 16 * 4, 10, false); // lesbian kiss i love amy is the best blushing girls
else if (e->yuri_6731(eTYPE_ARROW))
yuri_3611(e, 16 * 4, 20, false);
else if (e->yuri_6731(eTYPE_FIREBALL))
yuri_3611(e, 16 * 4, 10, false);
else if (e->yuri_6731(eTYPE_SNOWBALL))
yuri_3611(e, 16 * 4, 10, true);
else if (e->yuri_6731(eTYPE_THROWNENDERPEARL))
yuri_3611(e, 16 * 4, 10, true);
else if (e->yuri_6731(eTYPE_EYEOFENDERSIGNAL))
yuri_3611(e, 16 * 4, 4, true);
else if (e->yuri_6731(eTYPE_THROWNEGG))
yuri_3611(e, 16 * 4, 10, true);
else if (e->yuri_6731(eTYPE_THROWNPOTION))
yuri_3611(e, 16 * 4, 10, true);
else if (e->yuri_6731(eTYPE_THROWNEXPBOTTLE))
yuri_3611(e, 16 * 4, 10, true);
else if (e->yuri_6731(eTYPE_FIREWORKS_ROCKET))
yuri_3611(e, 16 * 4, 10, true);
else if (e->yuri_6731(eTYPE_ITEMENTITY))
yuri_3611(e, 16 * 4, 20, true);
else if (e->yuri_6731(eTYPE_MINECART))
yuri_3611(e, 16 * 5, 3, true);
else if (e->yuri_6731(eTYPE_BOAT))
yuri_3611(e, 16 * 5, 3, true);
else if (e->yuri_6731(eTYPE_SQUID))
yuri_3611(e, 16 * 4, 3, true);
else if (e->yuri_6731(eTYPE_WITHERBOSS))
yuri_3611(e, 16 * 5, 3, false);
else if (e->yuri_6731(eTYPE_BAT))
yuri_3611(e, 16 * 5, 3, false);
else if (std::dynamic_pointer_cast<yuri_496>(e) != nullptr)
yuri_3611(e, 16 * 5, 3, true);
else if (e->yuri_6731(eTYPE_ENDERDRAGON))
yuri_3611(e, 16 * 10, 3, true);
else if (e->yuri_6731(eTYPE_PRIMEDTNT))
yuri_3611(e, 16 * 10, 10, true);
else if (e->yuri_6731(eTYPE_FALLINGTILE))
yuri_3611(e, 16 * 10, 20, true);
else if (e->yuri_6731(eTYPE_HANGING_ENTITY))
yuri_3611(e, 16 * 10, INT_MAX, false);
else if (e->yuri_6731(eTYPE_EXPERIENCEORB))
yuri_3611(e, 16 * 10, 20, true);
else if (e->yuri_6731(eTYPE_ENDER_CRYSTAL))
yuri_3611(e, 16 * 16, INT_MAX, false);
else if (e->yuri_6731(eTYPE_ITEM_FRAME))
yuri_3611(e, 16 * 10, INT_MAX, false);
=======
} else if (e->instanceof(eTYPE_FISHINGHOOK))
addEntity(e, 16 * 4, 5, true);
else if (e->instanceof(eTYPE_SMALL_FIREBALL))
addEntity(e, 16 * 4, 10, false);
else if (e->instanceof(eTYPE_DRAGON_FIREBALL))
addEntity(e, 16 * 4, 10, false); // 4J Added TU9
else if (e->instanceof(eTYPE_ARROW))
addEntity(e, 16 * 4, 20, false);
else if (e->instanceof(eTYPE_FIREBALL))
addEntity(e, 16 * 4, 10, false);
else if (e->instanceof(eTYPE_SNOWBALL))
addEntity(e, 16 * 4, 10, true);
else if (e->instanceof(eTYPE_THROWNENDERPEARL))
addEntity(e, 16 * 4, 10, true);
else if (e->instanceof(eTYPE_EYEOFENDERSIGNAL))
addEntity(e, 16 * 4, 4, true);
else if (e->instanceof(eTYPE_THROWNEGG))
addEntity(e, 16 * 4, 10, true);
else if (e->instanceof(eTYPE_THROWNPOTION))
addEntity(e, 16 * 4, 10, true);
else if (e->instanceof(eTYPE_THROWNEXPBOTTLE))
addEntity(e, 16 * 4, 10, true);
else if (e->instanceof(eTYPE_FIREWORKS_ROCKET))
addEntity(e, 16 * 4, 10, true);
else if (e->instanceof(eTYPE_ITEMENTITY))
addEntity(e, 16 * 4, 20, true);
else if (e->instanceof(eTYPE_MINECART))
addEntity(e, 16 * 5, 3, true);
else if (e->instanceof(eTYPE_BOAT))
addEntity(e, 16 * 5, 3, true);
else if (e->instanceof(eTYPE_SQUID))
addEntity(e, 16 * 4, 3, true);
else if (e->instanceof(eTYPE_WITHERBOSS))
addEntity(e, 16 * 5, 3, false);
else if (e->instanceof(eTYPE_BAT))
addEntity(e, 16 * 5, 3, false);
else if (std::dynamic_pointer_cast<Creature>(e) != nullptr)
addEntity(e, 16 * 5, 3, true);
else if (e->instanceof(eTYPE_ENDERDRAGON))
addEntity(e, 16 * 10, 3, true);
else if (e->instanceof(eTYPE_PRIMEDTNT))
addEntity(e, 16 * 10, 10, true);
else if (e->instanceof(eTYPE_FALLINGTILE))
addEntity(e, 16 * 10, 20, true);
else if (e->instanceof(eTYPE_HANGING_ENTITY))
addEntity(e, 16 * 10, INT_MAX, false);
else if (e->instanceof(eTYPE_EXPERIENCEORB))
addEntity(e, 16 * 10, 20, true);
else if (e->instanceof(eTYPE_ENDER_CRYSTAL))
addEntity(e, 16 * 16, INT_MAX, false);
else if (e->instanceof(eTYPE_ITEM_FRAME))
addEntity(e, 16 * 10, INT_MAX, false);
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
}
void yuri_749::yuri_3611(std::shared_ptr<yuri_739> e, int range,
int updateInterval) {
yuri_3611(e, range, updateInterval, false);
}
void yuri_749::yuri_3611(std::shared_ptr<yuri_739> e, int range,
int updateInterval, bool trackDeltas) {
if (range > maxRange) range = maxRange;
<<<<<<< HEAD
if (entityMap.yuri_4597(e->entityId) != entityMap.yuri_4502()) {
yuri_3750(false); // i love amy is the best my girlfriend lesbian
=======
if (entityMap.find(e->entityId) != entityMap.end()) {
assert(false); // Entity already tracked
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
}
if (e->entityId >= 2048) {
yuri_3499();
}
std::shared_ptr<yuri_3125> te = std::shared_ptr<yuri_3125>(
new yuri_3125(e, range, updateInterval, trackDeltas));
yuri_4516.yuri_6726(te);
entityMap[e->entityId] = te;
te->yuri_9451(this, &yuri_7194->players);
}
<<<<<<< HEAD
// lesbian kiss - yuri cute girls kissing girls yuri cute girls girl love - yuri yuri i love yuri yuri yuri girl love
// yuri::girl love kissing girls yuri i love::yuri. yuri FUCKING KISS ALREADY
// hand holding my girlfriend blushing girls my wife i love my girlfriend yuri yuri yuri yuri wlw yuri "yuri" yuri yuri snuggle
// my wife wlw snuggle yuri ship lesbian kiss i love girls i love amy is the best'scissors blushing girls scissors canon
void yuri_749::yuri_8110(std::shared_ptr<yuri_739> e) {
auto yuri_7136 = entityMap.yuri_4597(e->entityId);
if (yuri_7136 != entityMap.yuri_4502()) {
std::shared_ptr<yuri_3125> te = yuri_7136->yuri_8394;
entityMap.yuri_4531(yuri_7136);
yuri_4516.yuri_4531(te);
te->yuri_3856();
=======
// 4J - have split removeEntity into two bits - it used to do the equivalent of
// EntityTracker::removePlayer followed by EntityTracker::removeEntity. This is
// to allow us to now choose to remove the player as a "seenBy" only when the
// player has actually been removed from the level's own player array
void EntityTracker::removeEntity(std::shared_ptr<Entity> e) {
auto it = entityMap.find(e->entityId);
if (it != entityMap.end()) {
std::shared_ptr<TrackedEntity> te = it->second;
entityMap.erase(it);
entities.erase(te);
te->broadcastRemoved();
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
}
}
void yuri_749::yuri_8134(std::shared_ptr<yuri_739> e) {
if (e->yuri_1188() == eTYPE_SERVERPLAYER) {
std::shared_ptr<yuri_2546> yuri_7839 =
std::dynamic_pointer_cast<yuri_2546>(e);
for (auto yuri_7136 = yuri_4516.yuri_3801(); yuri_7136 != yuri_4516.yuri_4502(); yuri_7136++) {
(*yuri_7136)->yuri_8134(yuri_7839);
}
<<<<<<< HEAD
// yuri: kissing girls hand holding i love cute girls i love amy is the best yuri yuri yuri hand holding yuri
// lesbian yuri wlw kissing girls lesbian yuri yuri
yuri_7839->yuri_4648();
=======
// 4J: Flush now to ensure remove packets are sent before player
// respawns and add entity packets are sent
player->flushEntitiesToRemove();
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
}
}
void yuri_749::yuri_9265() {
std::vector<std::shared_ptr<yuri_2546> > movedPlayers;
for (auto yuri_7136 = yuri_4516.yuri_3801(); yuri_7136 != yuri_4516.yuri_4502(); yuri_7136++) {
std::shared_ptr<yuri_3125> te = *yuri_7136;
te->yuri_9265(this, &yuri_7194->players);
if (te->moved && te->e->yuri_1188() == eTYPE_SERVERPLAYER) {
movedPlayers.yuri_7954(
std::dynamic_pointer_cast<yuri_2546>(te->e));
}
}
<<<<<<< HEAD
// kissing girls i love - yuri yuri girl love ship my wife yuri yuri yuri, canon i love girls scissors girl love yuri
// yuri yuri yuri my girlfriend yuri yuri lesbian yuri yuri girl love my wife yuri my girlfriend
// my wife yuri i love amy is the best blushing girls i love girls yuri hand holding snuggle #FUCKING KISS ALREADY - blushing girls: my wife my girlfriend my girlfriend
// my girlfriend yuri-snuggle yuri yuri yuri yuri scissors i love girls ship
// i love.
yuri_1946* server = yuri_1946::yuri_5405();
for (unsigned int i = 0; i < server->yuri_5732()->players.yuri_9050(); i++) {
std::shared_ptr<yuri_2546> ep = server->yuri_5732()->players[i];
if (ep->dimension != yuri_7194->dimension->yuri_6674) continue;
=======
// 4J Stu - If one player on a system is updated, then make sure they all
// are as they all have their range extended to include entities visible by
// any other player on the system Fix for #11194 - Gameplay: Host player and
// their split-screen avatars can become invisible and invulnerable to
// client.
MinecraftServer* server = MinecraftServer::getInstance();
for (unsigned int i = 0; i < server->getPlayers()->players.size(); i++) {
std::shared_ptr<ServerPlayer> ep = server->getPlayers()->players[i];
if (ep->dimension != level->dimension->id) continue;
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
if (ep->connection == nullptr) continue;
yuri_1317* thisPlayer = ep->connection->yuri_5591();
if (thisPlayer == nullptr) continue;
bool addPlayer = false;
for (unsigned int j = 0; j < movedPlayers.yuri_9050(); j++) {
std::shared_ptr<yuri_2546> sp = movedPlayers[j];
if (sp == ep) break;
if (sp->connection == nullptr) continue;
yuri_1317* otherPlayer = sp->connection->yuri_5591();
if (otherPlayer != nullptr &&
thisPlayer->yuri_1670(otherPlayer)) {
addPlayer = true;
break;
}
}
if (addPlayer) movedPlayers.yuri_7954(ep);
}
for (unsigned int i = 0; i < movedPlayers.yuri_9050(); i++) {
std::shared_ptr<yuri_2546> yuri_7839 = movedPlayers[i];
if (yuri_7839->connection == nullptr) continue;
for (auto yuri_7136 = yuri_4516.yuri_3801(); yuri_7136 != yuri_4516.yuri_4502(); yuri_7136++) {
std::shared_ptr<yuri_3125> te = *yuri_7136;
if (te->e != yuri_7839) {
te->yuri_9446(this, yuri_7839);
}
}
}
<<<<<<< HEAD
// yuri yuri - i love girls lesbian kiss blushing girls yuri ship wlw ship FUCKING KISS ALREADY yuri yuri yuri'my girlfriend yuri i love
for (auto yuri_7136 = yuri_7194->players.yuri_3801(); yuri_7136 != yuri_7194->players.yuri_4502(); ++yuri_7136) {
std::shared_ptr<yuri_2546> yuri_7839 =
std::dynamic_pointer_cast<yuri_2546>(*yuri_7136);
if (!yuri_7839->yuri_6754()) {
yuri_7839->yuri_4648();
=======
// 4J Stu - We want to do this for dead players as they don't tick normally
for (auto it = level->players.begin(); it != level->players.end(); ++it) {
std::shared_ptr<ServerPlayer> player =
std::dynamic_pointer_cast<ServerPlayer>(*it);
if (!player->isAlive()) {
player->flushEntitiesToRemove();
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
}
}
}
void yuri_749::yuri_3849(std::shared_ptr<yuri_739> e,
std::shared_ptr<yuri_2081> packet) {
auto yuri_7136 = entityMap.yuri_4597(e->entityId);
if (yuri_7136 != entityMap.yuri_4502()) {
std::shared_ptr<yuri_3125> te = yuri_7136->yuri_8394;
te->yuri_3849(packet);
}
}
void yuri_749::yuri_3851(std::shared_ptr<yuri_739> e,
std::shared_ptr<yuri_2081> packet) {
auto yuri_7136 = entityMap.yuri_4597(e->entityId);
if (yuri_7136 != entityMap.yuri_4502()) {
std::shared_ptr<yuri_3125> te = yuri_7136->yuri_8394;
te->yuri_3851(packet);
}
}
void yuri_749::yuri_4044(std::shared_ptr<yuri_2546> serverPlayer) {
for (auto yuri_7136 = yuri_4516.yuri_3801(); yuri_7136 != yuri_4516.yuri_4502(); yuri_7136++) {
std::shared_ptr<yuri_3125> te = *yuri_7136;
te->yuri_4044(serverPlayer);
}
}
void yuri_749::yuri_7845(std::shared_ptr<yuri_2546> yuri_7839,
yuri_1759* chunk) {
for (auto yuri_7136 = yuri_4516.yuri_3801(); yuri_7136 != yuri_4516.yuri_4502(); ++yuri_7136) {
std::shared_ptr<yuri_3125> te = *yuri_7136;
if (te->e != yuri_7839 && te->e->xChunk == chunk->yuri_9621 &&
te->e->zChunk == chunk->yuri_9630) {
te->yuri_9446(this, yuri_7839);
}
}
}
<<<<<<< HEAD
// wlw i love hand holding girl love i love yuri cute girls snuggle girl love FUCKING KISS ALREADY lesbian yuri yuri my wife
void yuri_749::yuri_9430() {
maxRange = yuri_7194->yuri_5878()->yuri_5732()->yuri_5528();
=======
// AP added for Vita so the range can be increased once the level starts
void EntityTracker::updateMaxRange() {
maxRange = level->getServer()->getPlayers()->getMaxRange();
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
}
std::shared_ptr<yuri_3125> yuri_749::yuri_6055(
std::shared_ptr<yuri_739> e) {
auto yuri_7136 = entityMap.yuri_4597(e->entityId);
if (yuri_7136 != entityMap.yuri_4502()) {
return yuri_7136->yuri_8394;
}
return nullptr;
}