diff options
| author | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
|---|---|---|
| committer | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
| commit | b691c43c44ff180d10e7d4a9afc83b98551ff586 (patch) | |
| tree | 3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.Client/LocalPlayer.h | |
| parent | def8cb415354ac390b7e89052a50605285f1aca9 (diff) | |
Initial commit
Diffstat (limited to 'Minecraft.Client/LocalPlayer.h')
| -rw-r--r-- | Minecraft.Client/LocalPlayer.h | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/Minecraft.Client/LocalPlayer.h b/Minecraft.Client/LocalPlayer.h new file mode 100644 index 00000000..b1e8dd23 --- /dev/null +++ b/Minecraft.Client/LocalPlayer.h @@ -0,0 +1,199 @@ +#pragma once +#include "..\Minecraft.World\SmoothFloat.h" +#include "..\Minecraft.World\net.minecraft.world.entity.player.h" +#include "..\Minecraft.World\Pos.h" +class Level; +class User; +class CompoundTag; +class FurnaceTileEntity; +class DispenserTileEntity; +class SignTileEntity; +class Container; +class Input; +class Stat; +class Minecraft; + +using namespace std; + +// Time in seconds before the players presence is update to Idle +#define PLAYER_IDLE_TIME 300 + +class LocalPlayer : public Player +{ +public: + static const int SPRINT_DURATION = 20 * 30; + + Input *input; +protected: + Minecraft *minecraft; + int sprintTriggerTime; + bool sprintTriggerRegisteredReturn; // 4J added + bool twoJumpsRegistered; // 4J added + + unsigned int m_uiInactiveTicks; // To measure time for idle anims + + unsigned long long m_awardedThisSession; + + // 4J - Last time we checked for achievement uunlocks. + //long long m_lastAchievementUpdate; + +public: + int sprintTime; + + float yBob, xBob; + float yBobO, xBobO; + + LocalPlayer(Minecraft *minecraft, Level *level, User *user, int dimension); + virtual ~LocalPlayer(); + + void move(double xa, double ya, double za, bool noEntityCubes=false); // 4J - added noEntityCubes parameter + + + int m_iScreenSection; // assuming 4player splitscreen for now, or -1 for single player + __uint64 ullButtonsPressed; // Stores the button presses, since the inputmanager can be ticked faster than the minecraft + // player tick, and a button press and release combo can be missed in the minecraft::tick + + __uint64 ullDpad_last; + __uint64 ullDpad_this; + __uint64 ullDpad_filtered; + + // 4J-PB - moved these in from the minecraft structure, since they are per player things for splitscreen + //int ticks; + int missTime; + int lastClickTick[2]; + bool isRaining ; + int m_iThirdPersonView; + + bool m_bHasAwardedStayinFrosty; + +private: + float flyX, flyY, flyZ; + +protected: + // 4J-PB - player's xbox pad + int m_iPad; + + bool m_bIsIdle; + +private: + // local player fly + // -------------------------------------------------------------------------- + // smooth camera settings + + SmoothFloat smoothFlyX; + SmoothFloat smoothFlyY; + SmoothFloat smoothFlyZ; + + void calculateFlight(float xa, float ya, float za); + +public: + virtual void serverAiStep(); + +protected: + bool isEffectiveAI(); + +public: + virtual void aiStep(); + virtual void changeDimension(int i); + virtual float getFieldOfViewModifier(); + virtual void addAdditonalSaveData(CompoundTag *entityTag); + virtual void readAdditionalSaveData(CompoundTag *entityTag); + virtual void closeContainer(); + virtual void openTextEdit(shared_ptr<SignTileEntity> sign); + virtual bool openContainer(shared_ptr<Container> container); // 4J added bool return + 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); + virtual bool openFurnace(shared_ptr<FurnaceTileEntity> furnace); // 4J added bool return + virtual bool openBrewingStand(shared_ptr<BrewingStandTileEntity> brewingStand); // 4J added bool return + virtual bool openTrap(shared_ptr<DispenserTileEntity> trap); // 4J added bool return + virtual bool openTrading(shared_ptr<Merchant> traderTarget); + virtual void crit(shared_ptr<Entity> e); + virtual void magicCrit(shared_ptr<Entity> e); + virtual void take(shared_ptr<Entity> e, int orgCount); + virtual void chat(const wstring& message); + virtual bool isSneaking(); + //virtual bool isIdle(); + virtual void hurtTo(int newHealth, ETelemetryChallenges damageSource); + virtual void respawn(); + virtual void animateRespawn(); + virtual void displayClientMessage(int messageId); + virtual void awardStat(Stat *stat, byteArray param); + virtual int ThirdPersonView() { return m_iThirdPersonView;} + // 4J - have changed 3rd person view to be 0 if not enabled, 1 for mode like original, 2 reversed mode + virtual void SetThirdPersonView(int val) {m_iThirdPersonView=val;} + + void ResetInactiveTicks() { m_uiInactiveTicks=0;} + unsigned int GetInactiveTicks() { return m_uiInactiveTicks;} + void IncrementInactiveTicks() { if(m_uiInactiveTicks<255) m_uiInactiveTicks++;} + + void mapPlayerChunk(unsigned int); + // 4J-PB - xbox pad for this player + void SetXboxPad(int iPad) {m_iPad=iPad;} + int GetXboxPad() {return m_iPad;} + void SetPlayerRespawned(bool bVal) {m_bPlayerRespawned=bVal;} + bool GetPlayerRespawned() {return m_bPlayerRespawned;} + + // 4J-PB - Moved these in here from the minecraft structure since they are local player related + void handleMouseDown(int button, bool down); + bool handleMouseClick(int button); + + // 4J - added for improved autorepeat + bool creativeModeHandleMouseClick(int button, bool buttonPressed); + float lastClickX; + float lastClickY; + float lastClickZ; + float lastClickdX; + float lastClickdY; + float lastClickdZ; + enum eLastClickState + { + lastClick_invalid, + lastClick_init, + lastClick_moving, + lastClick_stopped, + lastClick_oldRepeat, + lastClick_disabled + }; + float lastClickTolerance; + int lastClickState; + + // 4J Stu - Added to allow callback to tutorial to stay within Minecraft.Client + virtual void onCrafted(shared_ptr<ItemInstance> item); + + virtual void setAndBroadcastCustomSkin(DWORD skinId); + virtual void setAndBroadcastCustomCape(DWORD capeId); + +private: + bool isSolidBlock(int x, int y, int z); + bool m_bPlayerRespawned; + +protected: + bool checkInTile(double x, double y, double z); + +public: + void setSprinting(bool value); + void setExperienceValues(float experienceProgress, int totalExp, int experienceLevel); + + bool hasPermission(EGameCommand command); + + void updateRichPresence(); + + // 4J Stu - Added for telemetry + float m_sessionTimeStart; + float m_dimensionTimeStart; + +public: + void SetSessionTimerStart(void); + float getSessionTimer(void); + + float getAndResetChangeDimensionTimer(); + + virtual void handleCollectItem(shared_ptr<ItemInstance> item); + void SetPlayerAdditionalModelParts(vector<ModelPart *>pAdditionalModelParts); + +private: + vector<ModelPart *> m_pAdditionalModelParts; +}; + + |
