mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-05-14 08:57:14 +00:00
# Conflicts: # Minecraft.Client/Network/PlayerChunkMap.cpp # Minecraft.Client/Network/PlayerList.cpp # Minecraft.Client/Network/ServerChunkCache.cpp # Minecraft.Client/Platform/Common/Consoles_App.cpp # Minecraft.Client/Platform/Common/DLC/DLCManager.cpp # Minecraft.Client/Platform/Common/GameRules/LevelGenerationOptions.cpp # Minecraft.Client/Platform/Common/GameRules/LevelRuleset.cpp # Minecraft.Client/Platform/Common/Tutorial/Tutorial.cpp # Minecraft.Client/Platform/Common/Tutorial/TutorialTask.cpp # Minecraft.Client/Platform/Common/UI/IUIScene_CreativeMenu.cpp # Minecraft.Client/Platform/Common/UI/UIComponent_Panorama.cpp # Minecraft.Client/Platform/Common/UI/UIController.cpp # Minecraft.Client/Platform/Common/UI/UIController.h # Minecraft.Client/Platform/Extrax64Stubs.cpp # Minecraft.Client/Platform/Windows64/4JLibs/inc/4J_Input.h # Minecraft.Client/Platform/Windows64/4JLibs/inc/4J_Storage.h # Minecraft.Client/Player/EntityTracker.cpp # Minecraft.Client/Player/ServerPlayer.cpp # Minecraft.Client/Rendering/EntityRenderers/PlayerRenderer.cpp # Minecraft.Client/Textures/Packs/DLCTexturePack.cpp # Minecraft.Client/Textures/Stitching/StitchedTexture.cpp # Minecraft.Client/Textures/Stitching/TextureMap.cpp # Minecraft.Client/Textures/Textures.cpp # Minecraft.World/Blocks/NotGateTile.cpp # Minecraft.World/Blocks/PressurePlateTile.cpp # Minecraft.World/Blocks/TileEntities/PotionBrewing.cpp # Minecraft.World/Enchantments/EnchantmentHelper.cpp # Minecraft.World/Entities/HangingEntity.cpp # Minecraft.World/Entities/LeashFenceKnotEntity.cpp # Minecraft.World/Entities/LivingEntity.cpp # Minecraft.World/Entities/Mobs/Boat.cpp # Minecraft.World/Entities/Mobs/Minecart.cpp # Minecraft.World/Entities/Mobs/Witch.cpp # Minecraft.World/Entities/SyncedEntityData.cpp # Minecraft.World/Items/LeashItem.cpp # Minecraft.World/Items/PotionItem.cpp # Minecraft.World/Level/BaseMobSpawner.cpp # Minecraft.World/Level/CustomLevelSource.cpp # Minecraft.World/Level/Level.cpp # Minecraft.World/Level/Storage/DirectoryLevelStorage.cpp # Minecraft.World/Level/Storage/McRegionLevelStorage.cpp # Minecraft.World/Level/Storage/RegionFileCache.cpp # Minecraft.World/Player/Player.cpp # Minecraft.World/WorldGen/Biomes/BiomeCache.cpp # Minecraft.World/WorldGen/Features/RandomScatteredLargeFeature.cpp # Minecraft.World/WorldGen/Layers/BiomeOverrideLayer.cpp
43 lines
1.6 KiB
C++
43 lines
1.6 KiB
C++
#include "../../Platform/stdafx.h"
|
|
#include "../../Headers/net.minecraft.world.entity.h"
|
|
#include "../../Headers/net.minecraft.world.phys.h"
|
|
#include "../../Headers/net.minecraft.world.level.h"
|
|
#include "HurtByTargetGoal.h"
|
|
|
|
HurtByTargetGoal::HurtByTargetGoal(PathfinderMob* mob, bool alertSameType)
|
|
: TargetGoal(mob, false) {
|
|
this->alertSameType = alertSameType;
|
|
setRequiredControlFlags(TargetGoal::TargetFlag);
|
|
timestamp = 0;
|
|
}
|
|
|
|
bool HurtByTargetGoal::canUse() {
|
|
int ts = mob->getLastHurtByMobTimestamp();
|
|
return ts != timestamp && canAttack(mob->getLastHurtByMob(), false);
|
|
}
|
|
|
|
void HurtByTargetGoal::start() {
|
|
mob->setTarget(mob->getLastHurtByMob());
|
|
timestamp = mob->getLastHurtByMobTimestamp();
|
|
|
|
if (alertSameType) {
|
|
double within = getFollowDistance();
|
|
AABB mob_bb = AABB(mob->x, mob->y, mob->z, mob->x + 1, mob->y + 1, mob->z + 1).grow(within, 4, within);
|
|
std::vector<std::shared_ptr<Entity> >* nearby =
|
|
mob->level->getEntitiesOfClass(
|
|
typeid(*mob), &mob_bb);
|
|
for (auto it = nearby->begin(); it != nearby->end(); ++it) {
|
|
std::shared_ptr<PathfinderMob> other =
|
|
std::dynamic_pointer_cast<PathfinderMob>(*it);
|
|
if (this->mob->shared_from_this() == other) continue;
|
|
if (other->getTarget() != nullptr) continue;
|
|
if (other->isAlliedTo(mob->getLastHurtByMob()))
|
|
continue; // don't target allies
|
|
other->setTarget(mob->getLastHurtByMob());
|
|
}
|
|
delete nearby;
|
|
}
|
|
|
|
TargetGoal::start();
|
|
}
|