Files
minecraft-pe-0.6.1/src/world/entity/player/Player.h
2026-03-02 22:04:18 +03:00

202 lines
5.3 KiB
C++
Executable File

#ifndef NET_MINECRAFT_WORLD_ENTITY_PLAYER__Player_H__
#define NET_MINECRAFT_WORLD_ENTITY_PLAYER__Player_H__
//package net.minecraft.world.entity.player;
#include "Abilities.h"
#include "../Mob.h"
#include "../../Pos.h"
#include "../../food/SimpleFoodData.h"
#include "../../item/crafting/Recipe.h"
class Tile;
class ItemEntity;
class ItemInstance;
class Inventory;
class FillingContainer;
class FurnaceTileEntity;
class CompoundTag;
class ChestTileEntity;
class BaseContainerMenu;
class TileEntity;
class BedSleepingResult {
public:
static const int OK = 0;
static const int NOT_POSSIBLE_HERE = 1;
static const int NOT_POSSIBLE_NOW = 2;
static const int TOO_FAR_AWAY = 3;
static const int OTHER_PROBLEM = 4;
static const int NOT_SAFE = 5;
};
class Player: public Mob
{
typedef Mob super;
typedef SynchedEntityData::TypeChar PlayerFlagIDType;
static const int DATA_PLAYER_FLAGS_ID = 16;
static const int DATA_BED_POSITION_ID = 17;
static const int PLAYER_SLEEP_FLAG = 1;
public:
static const int MAX_NAME_LENGTH = 16;
static const int MAX_HEALTH = 20;
static const float DEFAULT_WALK_SPEED;
static const float DEFAULT_FLY_SPEED;
static const int SLEEP_DURATION = 100;
static const int WAKE_UP_DURATION = 10;
Player(Level* level, bool isCreative);
virtual ~Player();
void _init();
virtual void reset();
static bool isPlayer(Entity* e);
static Player* asPlayer(Entity* e);
virtual void tick();
void aiStep();
void travel(float xa, float ya);
virtual float getWalkingSpeedModifier();
void die(Entity* source);
void remove();
void respawn();
void resetPos(bool clearMore);
Pos getRespawnPosition();
void setRespawnPosition(const Pos& respawnPosition);
bool isShootable();
bool isCreativeModeAllowed();
bool isPlayer();
bool isInWall();
virtual bool hasResource( int id );
bool isUsingItem();
ItemInstance* getUseItem();
void startUsingItem(ItemInstance instance, int duration);
void stopUsingItem();
void releaseUsingItem();
virtual void completeUsingItem();
int getUseItemDuration();
int getTicksUsingItem();
int getScore();
void awardKillScore(Entity* victim, int score);
void handleEntityEvent(char id);
virtual void take(Entity* e, int orgCount);
//void drop();
virtual void drop(ItemInstance* item);
virtual void drop(ItemInstance* item, bool randomly);
void reallyDrop(ItemEntity* thrownItem);
bool canDestroy(Tile* tile);
float getDestroySpeed(Tile* tile);
int getMaxHealth();
bool isHurt();
bool hurt(Entity* source, int dmg);
void hurtArmor(int dmg);
void setArmor(int slot, const ItemInstance* item);
ItemInstance* getArmor(int slot);
int getArmorTypeHash();
void interact(Entity* entity);
void attack(Entity* entity);
virtual ItemInstance* getCarriedItem();
bool canUseCarriedItemWhileMoving();
virtual void startCrafting(int x, int y, int z, int tableSize);
virtual void startStonecutting(int x, int y, int z);
virtual void openContainer(ChestTileEntity* container);
virtual void openFurnace(FurnaceTileEntity* e);
void tileEntityDestroyed( int tileEntityId );
virtual void displayClientMessage(const std::string& messageId);
virtual void animateRespawn();
float getHeadHeight();
// id == 0 -> not possible to create via serialization (yet)
int getEntityTypeId() const { return 0; }
int getItemInHandIcon(ItemInstance* item, int layer);
bool isSleeping();
virtual int startSleepInBed(int x, int y, int z);
virtual void stopSleepInBed(bool forcefulWakeUp, bool updateLevelList, bool saveRespawnPoint);
virtual int getSleepTimer();
void setAllPlayersSleeping();
float getSleepRotation();
bool isSleepingLongEnough();
ItemInstance* getSelectedItem();
Inventory* inventory;
bool hasRespawnPosition();
virtual void openTextEdit( TileEntity* tileEntity );
//AbstractContainerMenu inventoryMenu;
//AbstractContainerMenu containerMenu;
int getArmorValue();
protected:
bool isImmobile();
void updateAi();
virtual void closeContainer();
void setDefaultHeadHeight();
void readAdditionalSaveData(CompoundTag* entityTag);
void addAdditonalSaveData(CompoundTag* entityTag);
void setBedOffset(int bedDirection);
bool checkBed();
static void animateRespawn(Player* player, Level* level);
void spawnEatParticles(const ItemInstance* useItem, int count);
private:
void touch(Entity* entity);
//void eat( ItemInstance* instance );
public:
char userType;
int score;
float oBob, bob;
std::string name;
int dimension;
Abilities abilities;
SimpleFoodData foodData;
//Stats stats;
BaseContainerMenu* containerMenu;
// ok I know it's not so nice to build in RakNet dependency here, BUT I DON'T CARE! MUAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHHAHAHAHAHAHAHAHAHHAHAHAHAHAHAHA
RakNet::RakNetGUID owner;
bool hasFakeInventory;
Pos bedPosition;
float bedOffsetX;
float bedOffsetY;
float bedOffsetZ;
protected:
ItemInstance useItem;
int useItemDuration;
short sleepCounter;
static const int NUM_ARMOR = 4;
private:
Pos respawnPosition;
bool playerHasRespawnPosition;
bool playerIsSleeping;
bool allPlayersSleeping;
ItemInstance armor[NUM_ARMOR];
//FishingHook fishing = NULL;
};
#endif /*NET_MINECRAFT_WORLD_ENTITY_PLAYER__Player_H__*/