81 lines
2.5 KiB
C
81 lines
2.5 KiB
C
|
|
||
|
// Zapper.h
|
||
|
|
||
|
// Declares the cZapper class representing the processor that actually zaps blocks and entities
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#include "Regions.h"
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
// fwd: ParsedNBT.h
|
||
|
class cParsedNBT;
|
||
|
class cFastNBTWriter;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
class cZapper
|
||
|
{
|
||
|
public:
|
||
|
cZapper(const AString & a_MCAFolder);
|
||
|
|
||
|
/// Zaps all the specified regions
|
||
|
void ZapRegions(const cRegionVector & a_Regions);
|
||
|
|
||
|
protected:
|
||
|
static const int BlocksPerChunkX = 16;
|
||
|
static const int BlocksPerChunkZ = 16;
|
||
|
static const int ChunksPerMCAX = 32;
|
||
|
static const int ChunksPerMCAZ = 32;
|
||
|
|
||
|
AString m_MCAFolder;
|
||
|
|
||
|
/// Converts from block coords to MCA coords
|
||
|
void BlockToMCA(int a_BlockX, int a_BlockZ, int & a_MCAX, int & a_MCAZ);
|
||
|
|
||
|
/// Converts from block coords to chunk coords
|
||
|
void BlockToChunk(int a_BlockX, int a_BlockZ, int & a_ChunkX, int & a_ChunkZ);
|
||
|
|
||
|
/// Zaps the specified region in the MCA file with the specified MCA coords
|
||
|
void ZapRegionInMCAFile(const cRegion & a_Region, int a_MCAX, int a_MCAZ);
|
||
|
|
||
|
/** Loads raw compressed chunk data from the specified file
|
||
|
* chunk is specified by ChunkHeaderValue, which is the int describing the chunk in file header.
|
||
|
*/
|
||
|
void LoadChunkData(cFile & a_InFile, int a_ChunkHeaderValue, AString & a_ChunkData, int a_ChunkX, int a_ChunkZ);
|
||
|
|
||
|
/// Zaps the specified region in the raw (compressed) chunk data.
|
||
|
void ZapRegionInRawChunkData(const cRegion & a_Region, AString & a_ChunkData, int a_ChunkX, int a_ChunkZ);
|
||
|
|
||
|
/// Zaps the specified region in the specified NBT structure
|
||
|
void ZapRegionInNBTChunk(const cRegion & a_Region, cParsedNBT & a_NBT, int a_ChunkX, int a_ChunkZ);
|
||
|
|
||
|
/// Zaps the blocks in the specified region from the specified NBT
|
||
|
void ZapRegionBlocksInNBT(const cRegion & a_Region, cParsedNBT & a_NBT, int a_SectionsTag);
|
||
|
|
||
|
/// Zaps the blocks in the specified bytes (types) from one vertical section (16^3 blocks) of a chunk.
|
||
|
void ZapRegionInNBTSectionBytes(const cRegion & a_Region, int a_SectionY, unsigned char * a_BlockBytes);
|
||
|
|
||
|
/// Zaps the blocks in the specified nibbles (meta, add) from one vertical section (16^3 blocks) of a chunk.
|
||
|
void ZapRegionInNBTSectionNibbles(const cRegion & a_Region, int a_SectionY, unsigned char * a_BlockNibbles);
|
||
|
|
||
|
/// Zaps entities in the specified region from the specified NBT
|
||
|
void ZapRegionEntitiesInNBT(const cRegion & a_Region, cParsedNBT & a_NBT, int a_EntitiesTag);
|
||
|
|
||
|
/// Serializes the NBT subtree into a writer
|
||
|
void SerializeNBTTag(const cParsedNBT & a_NBT, int a_Tag, cFastNBTWriter & a_Writer);
|
||
|
} ;
|
||
|
|
||
|
|
||
|
|
||
|
|