Commit is being made to allow additions of GPL3+ code previously un-addable. With these changes, contributions back to cuberite are possible with the backporting exemtion, as well as adding stuff in minetest with minetest code properly being read through and implimented to upgrade it to GPL3 from GPL2. project still has Apache2.0 license and credits to all its contributers, but now has the freedom of GPL3+ and all the code that can be implimented and shared with it.
157 lines
4.6 KiB
C++
157 lines
4.6 KiB
C++
|
|
/*
|
|
* Copyright 2011-2022 Cuberite Contributors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
// Statistics.h
|
|
|
|
// Interfaces to the cStatistics class representing a statistics-collecting callback
|
|
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
#include "Callback.h"
|
|
#include "Utils.h"
|
|
|
|
|
|
|
|
|
|
|
|
class cStatistics :
|
|
public cCallback
|
|
{
|
|
public:
|
|
class cStats
|
|
{
|
|
public:
|
|
UInt64 m_TotalChunks; // Total number of chunks that go through this callback (OnNewChunk())
|
|
UInt64 m_BiomeCounts[256];
|
|
UInt64 m_BlockCounts[256][256]; // First dimension is the biome, second dimension is BlockType
|
|
UInt64 m_BiomeNumChunks; // Num chunks that have been processed for biome stats
|
|
UInt64 m_BlockNumChunks; // Num chunks that have been processed for block stats
|
|
UInt64 m_NumEntities;
|
|
UInt64 m_NumTileEntities;
|
|
UInt64 m_NumTileTicks;
|
|
UInt64 m_PerHeightBlockCounts[256][256]; // First dimension is the height, second dimension is BlockType
|
|
UInt64 m_PerHeightSpawners[256][entMax + 1]; // First dimension is the height, second dimension is spawned entity type
|
|
int m_MinChunkX, m_MaxChunkX; // X coords range
|
|
int m_MinChunkZ, m_MaxChunkZ; // Z coords range
|
|
|
|
Int64 m;
|
|
UInt64 m_SpawnerEntity[entMax + 1];
|
|
|
|
cStats(void);
|
|
void Add(const cStats & a_Stats);
|
|
void UpdateCoordsRange(int a_ChunkX, int a_ChunkZ);
|
|
} ;
|
|
|
|
cStatistics(void);
|
|
|
|
const cStats & GetStats(void) const { return m_Stats; }
|
|
|
|
protected:
|
|
cStats m_Stats;
|
|
|
|
bool m_IsBiomesValid; // Set to true in OnBiomes(), reset to false in OnNewChunk(); if true, the m_BiomeData is valid for the current chunk
|
|
unsigned char m_BiomeData[16 * 16];
|
|
bool m_IsFirstSectionInChunk; // True if there was no section in the chunk yet. Set by OnNewChunk(), reset by OnSection()
|
|
|
|
// cCallback overrides:
|
|
virtual bool OnNewChunk(int a_ChunkX, int a_ChunkZ) override;
|
|
virtual bool OnHeader(int a_FileOffset, unsigned char a_NumSectors, int a_Timestamp) override { return false; }
|
|
virtual bool OnCompressedDataSizePos(int a_CompressedDataSize, int a_DataOffset, char a_CompressionMethod) override { return false; }
|
|
virtual bool OnDecompressedData(const char * a_DecompressedNBT, int a_DataSize) override { return false; }
|
|
virtual bool OnRealCoords(int a_ChunkX, int a_ChunkZ) override { return false; }
|
|
virtual bool OnLastUpdate(Int64 a_LastUpdate) override { return false; }
|
|
virtual bool OnTerrainPopulated(bool a_Populated) override { return !a_Populated; } // If not populated, we don't want it!
|
|
virtual bool OnBiomes(const unsigned char * a_BiomeData) override;
|
|
virtual bool OnHeightMap(const int * a_HeightMap) override { return false; }
|
|
virtual bool OnSection(
|
|
unsigned char a_Y,
|
|
const BLOCKTYPE * a_BlockTypes,
|
|
const NIBBLETYPE * a_BlockAdditional,
|
|
const NIBBLETYPE * a_BlockMeta,
|
|
const NIBBLETYPE * a_BlockLight,
|
|
const NIBBLETYPE * a_BlockSkyLight
|
|
) override;
|
|
|
|
virtual bool OnEmptySection(unsigned char a_Y) override;
|
|
|
|
virtual bool OnSectionsFinished(void) override { return false; } // continue processing
|
|
|
|
virtual bool OnEntity(
|
|
const AString & a_EntityType,
|
|
double a_PosX, double a_PosY, double a_PosZ,
|
|
double a_SpeedX, double a_SpeedY, double a_SpeedZ,
|
|
float a_Yaw, float a_Pitch,
|
|
float a_FallDistance,
|
|
short a_FireTicksLeft,
|
|
short a_AirTicks,
|
|
char a_IsOnGround,
|
|
cParsedNBT & a_NBT,
|
|
int a_NBTTag
|
|
) override;
|
|
|
|
virtual bool OnTileEntity(
|
|
const AString & a_EntityType,
|
|
int a_PosX, int a_PosY, int a_PosZ,
|
|
cParsedNBT & a_NBT,
|
|
int a_NBTTag
|
|
) override;
|
|
|
|
virtual bool OnTileTick(
|
|
int a_BlockType,
|
|
int a_TicksLeft,
|
|
int a_PosX, int a_PosY, int a_PosZ
|
|
) override;
|
|
|
|
void OnSpawner(cParsedNBT & a_NBT, int a_TileEntityTag);
|
|
} ;
|
|
|
|
|
|
|
|
|
|
|
|
class cStatisticsFactory :
|
|
public cCallbackFactory
|
|
{
|
|
public:
|
|
cStatisticsFactory(void);
|
|
virtual ~cStatisticsFactory();
|
|
|
|
virtual cCallback * CreateNewCallback(void)
|
|
{
|
|
return new cStatistics;
|
|
}
|
|
|
|
protected:
|
|
// The results, combined, are stored here:
|
|
cStatistics::cStats m_CombinedStats;
|
|
|
|
clock_t m_BeginTick;
|
|
|
|
void JoinResults(void);
|
|
void SaveBiomes(void);
|
|
void SaveBlockTypes(void);
|
|
void SavePerHeightBlockTypes(void);
|
|
void SaveBiomeBlockTypes(void);
|
|
void SaveStatistics(void);
|
|
void SaveSpawners(void);
|
|
void SavePerHeightSpawners(void);
|
|
} ;
|