#pragma once #include "Golem.h" class Village; class Level; class VillagerGolem : public Golem { public: eINSTANCEOF GetType() { return eTYPE_VILLAGERGOLEM; } static Entity* create(Level* level) { return new VillagerGolem(level); } protected: static const int DATA_FLAGS_ID = 16; private: int villageUpdateInterval; std::weak_ptr village; int attackAnimationTick; int offerFlowerTick; public: VillagerGolem(Level* level); protected: virtual void defineSynchedData(); public: virtual bool useNewAi(); protected: virtual void serverAiMobStep(); virtual void registerAttributes(); virtual int decreaseAirSupply(int currentSupply); virtual void doPush(std::shared_ptr e); public: virtual void aiStep(); virtual bool canAttackType(eINSTANCEOF targetType); virtual void addAdditonalSaveData(CompoundTag* tag); virtual void readAdditionalSaveData(CompoundTag* tag); virtual bool doHurtTarget(std::shared_ptr target); virtual void handleEntityEvent(uint8_t id); virtual std::shared_ptr getVillage(); virtual int getAttackAnimationTick(); virtual void offerFlower(bool offer); protected: virtual int getAmbientSound(); virtual int getHurtSound(); virtual int getDeathSound(); virtual void playStepSound(int xt, int yt, int zt, int t); virtual void dropDeathLoot(bool wasKilledByPlayer, int playerBonusLevel); public: virtual int getOfferFlowerTick(); virtual bool isPlayerCreated(); virtual void setPlayerCreated(bool value); virtual void die(DamageSource* source); virtual bool hurt(DamageSource* source, float dmg); };