Files
daoge b3feddfef3 feat: TU19 (Dec 2014) Features & Content (#155)
* try to resolve merge conflict

* feat: TU19 (Dec 2014) Features & Content (#32)

* December 2014 files

* Working release build

* Fix compilation issues

* Add sound to Windows64Media

* Add DLC content and force Tutorial DLC

* Revert "Add DLC content and force Tutorial DLC"

This reverts commit 97a4399472.

* Disable broken light packing

* Disable breakpoint during DLC texture map load

Allows DLC loading but the DLC textures are still broken

* Fix post build not working

* ...

* fix vs2022 build

* fix cmake build

---------

Co-authored-by: Loki <lokirautio@gmail.com>
2026-03-03 03:04:10 +08:00

342 lines
8.1 KiB
C++

#pragma once
#include "Animal.h"
#include "net.minecraft.world.ContainerListener.h"
#include "MobGroupData.h"
#include "EntitySelector.h"
class Attribute;
class AnimalChest;
class HorseEntitySelector : public EntitySelector
{
public:
bool matches(shared_ptr<Entity> entity) const;
};
class EntityHorse : public Animal, public net_minecraft_world::ContainerListener
{
public:
eINSTANCEOF GetType() { return eTYPE_HORSE; }
static Entity *create(Level *level) { return new EntityHorse(level); }
private:
static const wstring TEX_FOLDER;
static const EntitySelector *PARENT_HORSE_SELECTOR;
static Attribute *JUMP_STRENGTH;
static const int DATA_ID_HORSE_FLAGS = 16;
static const int DATA_ID_TYPE = 19;
static const int DATA_ID_TYPE_VARIANT = 20;
static const int DATA_ID_OWNER_NAME = 21;
static const int DATA_ID_ARMOR = 22;
static const int FLAG_TAME = 1 << 1;
static const int FLAG_SADDLE = 1 << 2;
static const int FLAG_CHESTED = 1 << 3;
static const int FLAG_BRED = 1 << 4;
static const int FLAG_EATING = 1 << 5;
static const int FLAG_STANDING = 1 << 6;
static const int FLAG_OPEN_MOUTH = 1 << 7;
public:
static const int INV_SLOT_SADDLE = 0;
static const int INV_SLOT_ARMOR = 1;
static const int INV_BASE_COUNT = 2;
static const int INV_DONKEY_CHEST_COUNT = 15;
// TODO: USE ENUMS! // Original comment
static const int ARMOR_NONE = 0;
static const int ARMOR_IRON = 1;
static const int ARMOR_GOLD = 2;
static const int ARMOR_DIAMOND = 3;
private:
static const int ARMORS = 4;
static wstring ARMOR_TEXTURES[ARMORS];
static int ARMOR_TEXTURES_ID[ARMORS];
static wstring ARMOR_HASHES[ARMORS];
static int ARMOR_PROTECTION[ARMORS];
public:
static const int TYPE_HORSE = 0;
static const int TYPE_DONKEY = 1;
static const int TYPE_MULE = 2;
static const int TYPE_UNDEAD = 3;
static const int TYPE_SKELETON = 4;
static const int VARIANT_WHITE = 0;
static const int VARIANT_CREAMY = 1;
static const int VARIANT_CHESTNUT = 2;
static const int VARIANT_BROWN = 3;
static const int VARIANT_BLACK = 4;
static const int VARIANT_GRAY = 5;
static const int VARIANT_DARKBROWN = 6;
private:
static const int VARIANTS = 7;
static wstring VARIANT_TEXTURES[VARIANTS];
static int VARIANT_TEXTURES_ID[VARIANTS];
static wstring VARIANT_HASHES[VARIANTS];
public:
static const int MARKING_NONE = 0;
static const int MARKING_WHITE_DETAILS = 1;
static const int MARKING_WHITE_FIELDS = 2;
static const int MARKING_WHITE_DOTS = 3;
static const int MARKING_BLACK_DOTS = 4;
private:
static const int MARKINGS = 5;
static wstring MARKING_TEXTURES[MARKINGS];
static int MARKING_TEXTURES_ID[MARKINGS];
static wstring MARKING_HASHES[MARKINGS];
private:
int countEating; // eating timer
int mouthCounter;
int standCounter;
public:
int tailCounter;
int sprintCounter;
protected:
bool isEntityJumping;
private:
shared_ptr<AnimalChest> inventory;
bool hasReproduced;
protected:
int temper;
float playerJumpPendingScale;
private:
bool allowStandSliding;
// animation data
float eatAnim, eatAnimO;
float standAnim, standAnimO;
float mouthAnim, mouthAnimO;
public:
EntityHorse(Level *world);
~EntityHorse();
protected:
virtual void defineSynchedData();
public:
virtual void setType(int i);
virtual int getType();
virtual void setVariant(int i);
virtual int getVariant();
virtual wstring getAName();
private:
virtual bool getHorseFlag(int flag);
virtual void setHorseFlag(int flag, bool value);
public:
virtual bool isAdult();
virtual bool isTamed();
virtual bool isRidable();
virtual wstring getOwnerName();
virtual void setOwner(const wstring &par1Str);
virtual float getFoalScale();
virtual void updateSize(bool isBaby);
virtual bool getIsJumping();
virtual void setTamed(bool flag);
virtual void setIsJumping(bool flag);
virtual bool canBeLeashed();
protected:
virtual void onLeashDistance(float distanceToLeashHolder);
public:
virtual bool isChestedHorse();
virtual int getArmorType();
virtual int getArmorTypeForItem(shared_ptr<ItemInstance> armorItem);
virtual bool isEating();
virtual bool isStanding();
virtual bool isBred();
virtual bool getHasReproduced();
virtual void setArmorType(int i);
virtual void setBred(bool flag);
virtual void setChestedHorse(bool flag);
virtual void setReproduced(bool flag);
virtual void setSaddled(bool flag);
virtual int getTemper();
virtual void setTemper(int temper);
virtual int modifyTemper(int amount);
virtual bool hurt(DamageSource *damagesource, float dmg);
virtual int getArmorValue();
virtual bool isPushable();
virtual bool checkSpawningBiome();
virtual void dropBags();
private:
virtual void eatingHorse();
protected:
virtual void causeFallDamage(float fallDistance);
private:
virtual int getInventorySize();
virtual void createInventory();
virtual void updateEquipment();
public:
virtual void containerChanged();
virtual bool canSpawn();
protected:
virtual shared_ptr<EntityHorse> getClosestMommy(shared_ptr<Entity> baby, double searchRadius);
public:
virtual double getCustomJump();
protected:
virtual int getDeathSound();
virtual int getDeathLoot();
virtual int getHurtSound();
public:
virtual bool isSaddled();
protected:
virtual int getAmbientSound();
virtual int getMadSound();
private:
int gallopSoundCounter;
protected:
virtual void playStepSound(int xt, int yt, int zt, int t);
virtual void registerAttributes();
public:
virtual int getMaxSpawnClusterSize();
virtual int getMaxTemper();
protected:
virtual float getSoundVolume();
public:
virtual int getAmbientSoundInterval();
virtual bool hasLayeredTextures();
private:
wstring layerTextureHashName;
intArray layerTextureLayers;
private:
virtual void clearLayeredTextureInfo();
virtual void rebuildLayeredTextureInfo();
public:
virtual wstring getLayeredTextureHashName();
virtual intArray getLayeredTextureLayers();
virtual void openInventory(shared_ptr<Player> player);
virtual bool mobInteract(shared_ptr<Player> player);
private:
virtual void doPlayerRide(shared_ptr<Player> player);
public:
virtual bool isAmuletHorse();
virtual bool canWearArmor();
virtual bool canWearBags();
protected:
virtual bool isImmobile();
public:
virtual bool isPureBreed();
virtual bool isUndead();
virtual bool isSterile();
virtual bool isFood(shared_ptr<ItemInstance> itemInstance);
private:
virtual void moveTail();
public:
virtual int nameYOffset();
virtual void die(DamageSource *damagesource);
virtual void aiStep();
virtual void tick();
private:
virtual void openMouth();
public:
// 4J-JEV: Made public for tooltip code, doesn't change state anyway.
virtual bool isReadyForParenting();
public:
virtual bool renderName();
virtual bool rideableEntity();
virtual void setUsingItemFlag(bool flag);
virtual void setEating(bool state);
virtual void setStanding(bool state);
private:
virtual void stand();
public:
virtual void makeMad();
virtual void dropMyStuff();
private:
virtual void dropInventory(shared_ptr<Entity> entity, shared_ptr<AnimalChest> animalchest);
public:
virtual bool tameWithName(shared_ptr<Player> player);
virtual void travel(float xa, float ya);
virtual void addAdditonalSaveData(CompoundTag *tag);
virtual void readAdditionalSaveData(CompoundTag *tag);
virtual bool canMate(shared_ptr<Animal> partner);
virtual shared_ptr<AgableMob> getBreedOffspring(shared_ptr<AgableMob> partner);
virtual MobGroupData *finalizeMobSpawn(MobGroupData *groupData, int extraData = 0); // 4J Added extraData param
virtual float getEatAnim(float a);
virtual float getStandAnim(float a);
virtual float getMouthAnim(float a);
protected:
virtual bool useNewAi();
public:
virtual void onPlayerJump(int jumpAmount);
protected:
virtual void spawnTamingParticles(bool success);
public:
virtual void handleEntityEvent(byte id);
virtual void positionRider();
private:
virtual float generateRandomMaxHealth();
virtual double generateRandomJumpStrength();
virtual double generateRandomSpeed();
shared_ptr<Player> getOwner();
public:
class HorseGroupData : public MobGroupData
{
public:
int horseType;
int horseVariant;
HorseGroupData(int type, int variant);
};
static bool isHorseArmor(int itemId);
virtual bool onLadder();
};