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/Common/GameRules/GameRuleDefinition.h | |
| parent | def8cb415354ac390b7e89052a50605285f1aca9 (diff) | |
Initial commit
Diffstat (limited to 'Minecraft.Client/Common/GameRules/GameRuleDefinition.h')
| -rw-r--r-- | Minecraft.Client/Common/GameRules/GameRuleDefinition.h | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/Minecraft.Client/Common/GameRules/GameRuleDefinition.h b/Minecraft.Client/Common/GameRules/GameRuleDefinition.h new file mode 100644 index 00000000..afec8fbc --- /dev/null +++ b/Minecraft.Client/Common/GameRules/GameRuleDefinition.h @@ -0,0 +1,66 @@ +#pragma once +using namespace std; +#include <unordered_map> +#include <string> + +#include "..\..\..\Minecraft.World\ItemInstance.h" +#include "ConsoleGameRulesConstants.h" + +#include "GameRulesInstance.h" + +class GameRule; +class LevelRuleset; +class Player; +class WstringLookup; + +class GameRuleDefinition +{ +private: + // Owner type defines who this rule applies to + GameRulesInstance::EGameRulesInstanceType m_ownerType; + +protected: + // These attributes should map to those in the XSD GameRuleType + wstring m_descriptionId; + wstring m_promptId; + int m_4JDataValue; + +public: + GameRuleDefinition(); + + virtual ConsoleGameRules::EGameRuleType getActionType() = 0; + + void setOwnerType(GameRulesInstance::EGameRulesInstanceType ownerType) { m_ownerType = ownerType;} + + virtual void write(DataOutputStream *); + + virtual void writeAttributes(DataOutputStream *dos, UINT numAttributes); + virtual void getChildren(vector<GameRuleDefinition *> *); + + virtual GameRuleDefinition *addChild(ConsoleGameRules::EGameRuleType ruleType); + virtual void addAttribute(const wstring &attributeName, const wstring &attributeValue); + + virtual void populateGameRule(GameRulesInstance::EGameRulesInstanceType type, GameRule *rule); + + bool getComplete(GameRule *rule); + void setComplete(GameRule *rule, bool val); + + virtual int getGoal() { return 0; } + virtual int getProgress(GameRule *rule) { return 0; } + + virtual int getIcon() { return -1; } + virtual int getAuxValue() { return 0; } + + // Here we should have functions for all the hooks, with a GameRule* as the first parameter + virtual bool onUseTile(GameRule *rule, int tileId, int x, int y, int z) { return false; } + virtual bool onCollectItem(GameRule *rule, shared_ptr<ItemInstance> item) { return false; } + virtual void postProcessPlayer(shared_ptr<Player> player) { } + + vector<GameRuleDefinition *> *enumerate(); + unordered_map<GameRuleDefinition *, int> *enumerateMap(); + + // Static functions + static GameRulesInstance *generateNewGameRulesInstance(GameRulesInstance::EGameRulesInstanceType type, LevelRuleset *rules, Connection *connection); + static wstring generateDescriptionString(ConsoleGameRules::EGameRuleType defType, const wstring &description, void *data = NULL, int dataLength = 0); + +};
\ No newline at end of file |
