#pragma once #include "..\Minecraft.World\net.minecraft.world.entity.player.h" #include "..\Minecraft.World\net.minecraft.world.inventory.ContainerListener.h" #include "..\Minecraft.World\ChunkPos.h" class PlayerConnection; class MinecraftServer; class ServerPlayerGameMode; class Level; class Stat; class TileEntity; class Entity; class BrewingStandTileEntity; class Merchant; using namespace std; class ServerPlayer : public Player, public net_minecraft_world_inventory::ContainerListener { public: eINSTANCEOF GetType() { return eTYPE_SERVERPLAYER; } shared_ptr connection; MinecraftServer *server; ServerPlayerGameMode *gameMode; double lastMoveX, lastMoveZ; list chunksToSend; vector entitiesToRemove; unordered_set seenChunks; int spewTimer; // 4J-Added, for 'Adventure Time' achievement. Biome *currentBiome; private: int lastSentHealth; int lastSentFood; bool lastFoodSaturationZero; int lastSentExp; int invulnerableTime; int viewDistance; int lastBrupSendTickCount; // 4J Added public: ServerPlayer(MinecraftServer *server, Level *level, const wstring& name, ServerPlayerGameMode *gameMode); ~ServerPlayer(); void flagEntitiesToBeRemoved(unsigned int *flags, bool *removedFound); // 4J added virtual void readAdditionalSaveData(CompoundTag *entityTag); virtual void addAdditonalSaveData(CompoundTag *entityTag); virtual void withdrawExperienceLevels(int amount); void initMenu(); private: ItemInstanceArray lastCarried; public: virtual ItemInstanceArray getEquipmentSlots(); protected: virtual void setDefaultHeadHeight(); public: virtual float getHeadHeight(); virtual void tick(); void flushEntitiesToRemove(); virtual shared_ptr getCarried(int slot); virtual void die(DamageSource *source); virtual bool hurt(DamageSource *dmgSource, int dmg); virtual bool isPlayerVersusPlayer(); void doTick(bool sendChunks, bool dontDelayChunks = false, bool ignorePortal = false); void doTickA(); void doChunkSendingTick(bool dontDelayChunks); void doTickB(bool ignorePortal); virtual void changeDimension(int i); private: void broadcast(shared_ptr te, bool delay = false); public: virtual void take(shared_ptr e, int orgCount); virtual void swing(); virtual BedSleepingResult startSleepInBed(int x, int y, int z, bool bTestUse = false); public: virtual void stopSleepInBed(bool forcefulWakeUp, bool updateLevelList, bool saveRespawnPoint); virtual void ride(shared_ptr e); protected: virtual void checkFallDamage(double ya, bool onGround); public: void doCheckFallDamage(double ya, bool onGround); private: int containerCounter; public: bool ignoreSlotUpdateHack; int latency; bool wonGame; bool m_enteredEndExitPortal; // 4J Added private: void nextContainerCounter(); public: virtual bool startCrafting(int x, int y, int z); // 4J added bool return virtual bool startEnchanting(int x, int y, int z); // 4J added bool return virtual bool startRepairing(int x, int y, int z); // 4J added bool return virtual bool openContainer(shared_ptr container); // 4J added bool return virtual bool openFurnace(shared_ptr furnace); // 4J added bool return virtual bool openTrap(shared_ptr trap); // 4J added bool return virtual bool openBrewingStand(shared_ptr brewingStand); // 4J added bool return virtual bool openTrading(shared_ptr traderTarget); // 4J added bool return virtual void slotChanged(AbstractContainerMenu *container, int slotIndex, shared_ptr item); void refreshContainer(AbstractContainerMenu *menu); virtual void refreshContainer(AbstractContainerMenu *container, vector > *items); virtual void setContainerData(AbstractContainerMenu *container, int id, int value); virtual void closeContainer(); void broadcastCarriedItem(); void doCloseContainer(); void setPlayerInput(float xa, float ya, bool jumping, bool sneaking, float xRot, float yRot); virtual void awardStat(Stat *stat, byteArray param); void disconnect(); void resetSentInfo(); virtual void displayClientMessage(int messageId); protected: virtual void completeUsingItem(); public: virtual void startUsingItem(shared_ptr instance, int duration); virtual void restoreFrom(shared_ptr oldPlayer, bool restoreAll); protected: virtual void onEffectAdded(MobEffectInstance *effect); virtual void onEffectUpdated(MobEffectInstance *effect); virtual void onEffectRemoved(MobEffectInstance *effect); public: virtual void teleportTo(double x, double y, double z); virtual void crit(shared_ptr entity); virtual void magicCrit(shared_ptr entity); void onUpdateAbilities(); ServerLevel *getLevel(); void setGameMode(GameType *mode); void sendMessage(const wstring& message, ChatPacket::EChatPacketMessage type = ChatPacket::e_ChatCustom, int customData = -1, const wstring& additionalMessage = L""); bool hasPermission(EGameCommand command); // 4J - Don't use //void updateOptions(shared_ptr packet); int getViewDistance(); //bool canChatInColor(); //int getChatVisibility(); public: static int getFlagIndexForChunk(const ChunkPos& pos, int dimension); // 4J - added int getPlayerViewDistanceModifier(); // 4J Added, returns a number which is subtracted from the default view distance public: // 4J Stu - Added hooks for the game rules virtual void handleCollectItem(shared_ptr item); #ifndef _CONTENT_PACKAGE void debug_setPosition(double,double,double,double,double); #endif protected: // 4J Added to record telemetry of player deaths, this should store the last source of damage ETelemetryChallenges m_lastDamageSource; };