mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-04-25 10:04:45 +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
77 lines
2.4 KiB
C++
77 lines
2.4 KiB
C++
#include "../../Platform/stdafx.h"
|
|
#include "../../Headers/net.minecraft.world.entity.ai.control.h"
|
|
#include "../../Headers/net.minecraft.world.entity.ai.goal.h"
|
|
#include "../../Headers/net.minecraft.world.entity.ai.navigation.h"
|
|
#include "../../Headers/net.minecraft.world.entity.npc.h"
|
|
#include "../../Headers/net.minecraft.world.entity.animal.h"
|
|
#include "../../Headers/net.minecraft.world.level.h"
|
|
#include "../../Headers/net.minecraft.world.phys.h"
|
|
#include "TakeFlowerGoal.h"
|
|
|
|
TakeFlowerGoal::TakeFlowerGoal(Villager* villager) {
|
|
takeFlower = false;
|
|
pickupTick = 0;
|
|
golem = std::weak_ptr<VillagerGolem>();
|
|
|
|
this->villager = villager;
|
|
setRequiredControlFlags(Control::MoveControlFlag |
|
|
Control::LookControlFlag);
|
|
}
|
|
|
|
bool TakeFlowerGoal::canUse() {
|
|
if (villager->getAge() >= 0) return false;
|
|
if (!villager->level->isDay()) return false;
|
|
|
|
AABB villager_bb = villager->bb.grow(6, 2, 6);
|
|
std::vector<std::shared_ptr<Entity> >* golems =
|
|
villager->level->getEntitiesOfClass(typeid(VillagerGolem),
|
|
&villager_bb);
|
|
if (golems->size() == 0) {
|
|
delete golems;
|
|
return false;
|
|
}
|
|
|
|
// for (Entity e : golems)
|
|
for (auto it = golems->begin(); it != golems->end(); ++it) {
|
|
std::shared_ptr<VillagerGolem> vg =
|
|
std::dynamic_pointer_cast<VillagerGolem>(*it);
|
|
if (vg->getOfferFlowerTick() > 0) {
|
|
golem = std::weak_ptr<VillagerGolem>(vg);
|
|
break;
|
|
}
|
|
}
|
|
delete golems;
|
|
return golem.lock() != nullptr;
|
|
}
|
|
|
|
bool TakeFlowerGoal::canContinueToUse() {
|
|
return golem.lock() != nullptr && golem.lock()->getOfferFlowerTick() > 0;
|
|
}
|
|
|
|
void TakeFlowerGoal::start() {
|
|
pickupTick = villager->getRandom()->nextInt(
|
|
(int)(OfferFlowerGoal::OFFER_TICKS * 0.8));
|
|
takeFlower = false;
|
|
golem.lock()->getNavigation()->stop();
|
|
}
|
|
|
|
void TakeFlowerGoal::stop() {
|
|
golem = std::weak_ptr<VillagerGolem>();
|
|
villager->getNavigation()->stop();
|
|
}
|
|
|
|
void TakeFlowerGoal::tick() {
|
|
villager->getLookControl()->setLookAt(golem.lock(), 30, 30);
|
|
if (golem.lock()->getOfferFlowerTick() == pickupTick) {
|
|
villager->getNavigation()->moveTo(golem.lock(), 0.5f);
|
|
takeFlower = true;
|
|
}
|
|
|
|
if (takeFlower) {
|
|
if (villager->distanceToSqr(golem.lock()) < 2 * 2) {
|
|
golem.lock()->offerFlower(false);
|
|
villager->getNavigation()->stop();
|
|
}
|
|
}
|
|
}
|