aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/Common/GameRules/ConsoleSchematicFile.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/ConsoleSchematicFile.h
parentdef8cb415354ac390b7e89052a50605285f1aca9 (diff)
Initial commit
Diffstat (limited to 'Minecraft.Client/Common/GameRules/ConsoleSchematicFile.h')
-rw-r--r--Minecraft.Client/Common/GameRules/ConsoleSchematicFile.h90
1 files changed, 90 insertions, 0 deletions
diff --git a/Minecraft.Client/Common/GameRules/ConsoleSchematicFile.h b/Minecraft.Client/Common/GameRules/ConsoleSchematicFile.h
new file mode 100644
index 00000000..f37a6058
--- /dev/null
+++ b/Minecraft.Client/Common/GameRules/ConsoleSchematicFile.h
@@ -0,0 +1,90 @@
+#pragma once
+using namespace std;
+
+#define XBOX_SCHEMATIC_ORIGINAL_VERSION 1
+#define XBOX_SCHEMATIC_CURRENT_VERSION 2
+
+#include "..\..\..\Minecraft.World\ArrayWithLength.h"
+
+class Level;
+class DataOutputStream;
+class DataInputStream;
+class TileEntity;
+class LevelChunk;
+class AABB;
+class Vec3;
+
+class ConsoleSchematicFile
+{
+public:
+ enum ESchematicRotation
+ {
+ eSchematicRot_0,
+ eSchematicRot_90,
+ eSchematicRot_180,
+ eSchematicRot_270
+ };
+private:
+ int m_refCount;
+
+public:
+ void incrementRefCount() { ++m_refCount; }
+ void decrementRefCount() { --m_refCount; }
+ bool shouldDelete() { return m_refCount <= 0; }
+
+ typedef struct _XboxSchematicInitParam
+ {
+ wchar_t name[64];
+ int startX;
+ int startY;
+ int startZ;
+ int endX;
+ int endY;
+ int endZ;
+ bool bSaveMobs;
+
+ Compression::ECompressionTypes compressionType;
+
+ _XboxSchematicInitParam()
+ {
+ ZeroMemory(name,64*(sizeof(wchar_t)));
+ startX = startY = startZ = endX = endY = endZ = 0;
+ bSaveMobs = false;
+ compressionType = Compression::eCompressionType_None;
+ }
+ } XboxSchematicInitParam;
+private:
+ int m_xSize, m_ySize, m_zSize;
+ vector<shared_ptr<TileEntity> > m_tileEntities;
+ vector< pair<Vec3 *, CompoundTag *> > m_entities;
+
+public:
+ byteArray m_data;
+
+public:
+ ConsoleSchematicFile();
+ ~ConsoleSchematicFile();
+
+ int getXSize() { return m_xSize; }
+ int getYSize() { return m_ySize; }
+ int getZSize() { return m_zSize; }
+
+ void save(DataOutputStream *dos);
+ void load(DataInputStream *dis);
+
+ __int64 applyBlocksAndData(LevelChunk *chunk, AABB *chunkBox, AABB *destinationBox, ESchematicRotation rot);
+ __int64 applyLighting(LevelChunk *chunk, AABB *chunkBox, AABB *destinationBox, ESchematicRotation rot);
+ void applyTileEntities(LevelChunk *chunk, AABB *chunkBox, AABB *destinationBox, ESchematicRotation rot);
+
+ static void generateSchematicFile(DataOutputStream *dos, Level *level, int xStart, int yStart, int zStart, int xEnd, int yEnd, int zEnd, bool bSaveMobs, Compression::ECompressionTypes);
+ static void setBlocksAndData(LevelChunk *chunk, byteArray blockData, byteArray dataData, byteArray data, int x0, int y0, int z0, int x1, int y1, int z1, int &blocksP, int &dataP, int &blockLightP, int &skyLightP);
+private:
+ void save_tags(DataOutputStream *dos);
+ void load_tags(DataInputStream *dis);
+
+ static void getBlocksAndData(LevelChunk *chunk, byteArray *data, int x0, int y0, int z0, int x1, int y1, int z1, int &blocksP, int &dataP, int &blockLightP, int &skyLightP);
+ static vector<shared_ptr<TileEntity> > *getTileEntitiesInRegion(LevelChunk *chunk, int x0, int y0, int z0, int x1, int y1, int z1);
+
+ void chunkCoordToSchematicCoord(AABB *destinationBox, int chunkX, int chunkZ, ESchematicRotation rot, int &schematicX, int &schematicZ);
+ void schematicCoordToChunkCoord(AABB *destinationBox, double schematicX, double schematicZ, ESchematicRotation rot, double &chunkX, double &chunkZ);
+}; \ No newline at end of file