aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/ServerPlayer.h
diff options
context:
space:
mode:
authordaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
committerdaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
commitb691c43c44ff180d10e7d4a9afc83b98551ff586 (patch)
tree3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.Client/ServerPlayer.h
parentdef8cb415354ac390b7e89052a50605285f1aca9 (diff)
Initial commit
Diffstat (limited to 'Minecraft.Client/ServerPlayer.h')
-rw-r--r--Minecraft.Client/ServerPlayer.h164
1 files changed, 164 insertions, 0 deletions
diff --git a/Minecraft.Client/ServerPlayer.h b/Minecraft.Client/ServerPlayer.h
new file mode 100644
index 00000000..a9b37594
--- /dev/null
+++ b/Minecraft.Client/ServerPlayer.h
@@ -0,0 +1,164 @@
+#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<PlayerConnection> connection;
+ MinecraftServer *server;
+ ServerPlayerGameMode *gameMode;
+ double lastMoveX, lastMoveZ;
+ list<ChunkPos> chunksToSend;
+ vector<int> entitiesToRemove;
+ unordered_set<ChunkPos, ChunkPosKeyHash, ChunkPosKeyEq> 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<ItemInstance> 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<TileEntity> te, bool delay = false);
+public:
+ virtual void take(shared_ptr<Entity> 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<Entity> 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> container); // 4J added bool return
+ virtual bool openFurnace(shared_ptr<FurnaceTileEntity> furnace); // 4J added bool return
+ virtual bool openTrap(shared_ptr<DispenserTileEntity> trap); // 4J added bool return
+ virtual bool openBrewingStand(shared_ptr<BrewingStandTileEntity> brewingStand); // 4J added bool return
+ virtual bool openTrading(shared_ptr<Merchant> traderTarget); // 4J added bool return
+ virtual void slotChanged(AbstractContainerMenu *container, int slotIndex, shared_ptr<ItemInstance> item);
+ void refreshContainer(AbstractContainerMenu *menu);
+ virtual void refreshContainer(AbstractContainerMenu *container, vector<shared_ptr<ItemInstance> > *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<ItemInstance> instance, int duration);
+ virtual void restoreFrom(shared_ptr<Player> 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> entity);
+ virtual void magicCrit(shared_ptr<Entity> 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<ClientInformationPacket> 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<ItemInstance> 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;
+};