aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/Common/GameRules/GameRuleManager.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/Common/GameRules/GameRuleManager.h
parentdef8cb415354ac390b7e89052a50605285f1aca9 (diff)
Initial commit
Diffstat (limited to 'Minecraft.Client/Common/GameRules/GameRuleManager.h')
-rw-r--r--Minecraft.Client/Common/GameRules/GameRuleManager.h80
1 files changed, 80 insertions, 0 deletions
diff --git a/Minecraft.Client/Common/GameRules/GameRuleManager.h b/Minecraft.Client/Common/GameRules/GameRuleManager.h
new file mode 100644
index 00000000..e9e983b8
--- /dev/null
+++ b/Minecraft.Client/Common/GameRules/GameRuleManager.h
@@ -0,0 +1,80 @@
+#pragma once
+using namespace std;
+
+#include "LevelGenerators.h"
+#include "LevelRules.h"
+class LevelGenerationOptions;
+class RootGameRulesDefinition;
+class LevelChunk;
+class DLCPack;
+class DLCGameRulesFile;
+class DLCGameRulesHeader;
+class StringTable;
+class GameRuleDefinition;
+class DataInputStream;
+class DataOutputStream;
+class WstringLookup;
+
+#define GAME_RULE_SAVENAME L"requiredGameRules.grf"
+
+// 4J-JEV:
+#define LEVEL_GEN_ID int
+#define LEVEL_GEN_ID_NULL 0
+
+class GameRuleManager
+{
+public:
+ static WCHAR *wchTagNameA[ConsoleGameRules::eGameRuleType_Count];
+ static WCHAR *wchAttrNameA[ConsoleGameRules::eGameRuleAttr_Count];
+
+ static const short version_number = 2;
+
+private:
+ LevelGenerationOptions *m_currentLevelGenerationOptions;
+ LevelRuleset *m_currentGameRuleDefinitions;
+ LevelGenerators m_levelGenerators;
+ LevelRules m_levelRules;
+
+public:
+ GameRuleManager();
+
+ void loadGameRules(DLCPack *);
+
+ LevelGenerationOptions *loadGameRules(byte *dIn, UINT dSize);
+ void loadGameRules(LevelGenerationOptions *lgo, byte *dIn, UINT dSize);
+
+ void saveGameRules(byte **dOut, UINT *dSize);
+
+private:
+ LevelGenerationOptions *readHeader(DLCGameRulesHeader *grh);
+
+ void writeRuleFile(DataOutputStream *dos);
+
+public:
+ bool readRuleFile(LevelGenerationOptions *lgo, byte *dIn, UINT dSize, StringTable *strings); //(DLCGameRulesFile *dlcFile, StringTable *strings);
+
+private:
+ void readAttributes(DataInputStream *dis, vector<wstring> *tagsAndAtts, GameRuleDefinition *rule);
+ void readChildren(DataInputStream *dis, vector<wstring> *tagsAndAtts, unordered_map<int, ConsoleGameRules::EGameRuleType> *tagIdMap, GameRuleDefinition *rule);
+
+public:
+ void processSchematics(LevelChunk *levelChunk);
+ void processSchematicsLighting(LevelChunk *levelChunk);
+ void loadDefaultGameRules();
+
+private:
+ bool loadGameRulesPack(File *path);
+
+ LEVEL_GEN_ID addLevelGenerationOptions(LevelGenerationOptions *);
+
+public:
+ vector<LevelGenerationOptions *> *getLevelGenerators() { return m_levelGenerators.getLevelGenerators(); }
+ void setLevelGenerationOptions(LevelGenerationOptions *levelGen);
+ LevelRuleset *getGameRuleDefinitions() { return m_currentGameRuleDefinitions; }
+ LevelGenerationOptions *getLevelGenerationOptions() { return m_currentLevelGenerationOptions; }
+ LPCWSTR GetGameRulesString(const wstring &key);
+
+ // 4J-JEV:
+ // Properly cleans-up and unloads the current set of gameRules.
+ void unloadCurrentGameRules();
+};