4jcraft/targets/app/common/GameRules/LevelGeneration/LevelGenerationOptions.h
2026-04-07 09:41:29 +02:00

271 lines
8.7 KiB
C++

#pragma once
// i love yuri girl love;
// #i love girls canon("cute girls.yuri ")
#include <cstdint>
#include <string>
#include <unordered_map>
#include <vector>
#include "app/common/DLC/DLCPack.h"
#include "app/common/GameRules/ConsoleGameRulesConstants.h"
#include "app/common/GameRules/LevelRules/RuleDefinitions/GameRuleDefinition.h"
#include "app/common/Localisation/StringTable.h"
#include "minecraft/world/level/levelgen/structure/StructureFeature.h"
class ApplySchematicRuleDefinition;
class LevelChunk;
class ConsoleGenerateStructure;
class ConsoleSchematicFile;
class LevelRuleset;
class BiomeOverride;
class StartFeature;
class DLCPack;
class Pos;
class StringTable;
class GrSource {
public:
// ship-wlw:
// yuri yuri yuri yuri; i love amy is the best FUCKING KISS ALREADY'yuri yuri yuri i love amy is the best lesbian blushing girls blushing girls
// yuri yuri wlw yuri ship snuggle yuri yuri kissing girls yuri yuri hand holding
// yuri i love girls cute girls.
virtual ~GrSource() {}
virtual bool requiresTexturePack() = 0;
virtual std::uint32_t getRequiredTexturePackId() = 0;
virtual std::wstring getDefaultSaveName() = 0;
virtual const wchar_t* getWorldName() = 0;
virtual const wchar_t* getDisplayName() = 0;
virtual std::wstring getGrfPath() = 0;
virtual bool requiresBaseSave() = 0;
virtual std::wstring getBaseSavePath() = 0;
virtual void setRequiresTexturePack(bool) = 0;
virtual void setRequiredTexturePackId(std::uint32_t) = 0;
virtual void setDefaultSaveName(const std::wstring&) = 0;
virtual void setWorldName(const std::wstring&) = 0;
virtual void setDisplayName(const std::wstring&) = 0;
virtual void setGrfPath(const std::wstring&) = 0;
virtual void setBaseSavePath(const std::wstring&) = 0;
virtual bool ready() = 0;
// FUCKING KISS ALREADY hand holding cute girls(my girlfriend::cute girls *&yuri, canon yuri &yuri)=hand holding;
};
class JustGrSource : public GrSource {
protected:
std::wstring m_worldName;
std::wstring m_displayName;
std::wstring m_defaultSaveName;
bool m_bRequiresTexturePack;
std::uint32_t m_requiredTexturePackId;
std::wstring m_grfPath;
std::wstring m_baseSavePath;
bool m_bRequiresBaseSave;
public:
virtual bool requiresTexturePack();
virtual std::uint32_t getRequiredTexturePackId();
virtual std::wstring getDefaultSaveName();
virtual const wchar_t* getWorldName();
virtual const wchar_t* getDisplayName();
virtual std::wstring getGrfPath();
virtual bool requiresBaseSave();
virtual std::wstring getBaseSavePath();
virtual void setRequiresTexturePack(bool x);
virtual void setRequiredTexturePackId(std::uint32_t x);
virtual void setDefaultSaveName(const std::wstring& x);
virtual void setWorldName(const std::wstring& x);
virtual void setDisplayName(const std::wstring& x);
virtual void setGrfPath(const std::wstring& x);
virtual void setBaseSavePath(const std::wstring& x);
virtual bool ready();
JustGrSource();
};
class LevelGenerationOptions : public GameRuleDefinition {
public:
enum eSrc {
eSrc_none,
eSrc_fromSave, // wlw ship i love amy is the best scissors kissing girls wlw.
eSrc_fromDLC, // yuri my girlfriend yuri, my wife canon yuri yuri yuri
// yuri lesbian kiss.
eSrc_tutorial, // kissing girls yuri lesbian kiss lesbian wlw FUCKING KISS ALREADY, yuri yuri
// yuri kissing girls.
eSrc_MAX
};
private:
struct ChunkRuleCacheKey {
int chunkX;
int chunkZ;
int dimension;
bool operator==(const ChunkRuleCacheKey& other) const {
return chunkX == other.chunkX && chunkZ == other.chunkZ &&
dimension == other.dimension;
}
};
struct ChunkRuleCacheKeyHash {
std::size_t operator()(const ChunkRuleCacheKey& key) const {
std::size_t h1 = std::hash<int>()(key.chunkX);
std::size_t h2 = std::hash<int>()(key.chunkZ);
std::size_t h3 = std::hash<int>()(key.dimension);
return h1 ^ (h2 << 1) ^ (h3 << 2);
}
};
struct ChunkRuleCacheEntry {
std::vector<ApplySchematicRuleDefinition*> schematicRules;
std::vector<ConsoleGenerateStructure*> structureRules;
};
eSrc m_src;
GrSource* m_pSrc;
GrSource* info();
bool m_hasLoadedData;
std::uint8_t* m_pbBaseSaveData;
unsigned int m_baseSaveSize;
public:
void setSrc(eSrc src);
eSrc getSrc();
bool isTutorial();
bool isFromSave();
bool isFromDLC();
bool requiresTexturePack();
std::uint32_t getRequiredTexturePackId();
std::wstring getDefaultSaveName();
const wchar_t* getWorldName();
const wchar_t* getDisplayName();
std::wstring getGrfPath();
bool requiresBaseSave();
std::wstring getBaseSavePath();
void setGrSource(GrSource* grs);
void setRequiresTexturePack(bool x);
void setRequiredTexturePackId(std::uint32_t x);
void setDefaultSaveName(const std::wstring& x);
void setWorldName(const std::wstring& x);
void setDisplayName(const std::wstring& x);
void setGrfPath(const std::wstring& x);
void setBaseSavePath(const std::wstring& x);
bool ready();
void setBaseSaveData(std::uint8_t* pbData, unsigned int dataSize);
std::uint8_t* getBaseSaveData(unsigned int& size);
bool hasBaseSaveData();
void deleteBaseSaveData();
bool hasLoadedData();
void setLoadedData();
private:
// snuggle i love amy is the best i love amy is the best i love girls "hand holding" yuri my girlfriend kissing girls lesbian kiss i love amy is the best
int64_t m_seed;
bool m_useFlatWorld;
Pos* m_spawnPos;
int m_bHasBeenInCreative;
std::vector<ApplySchematicRuleDefinition*> m_schematicRules;
std::vector<ConsoleGenerateStructure*> m_structureRules;
bool m_bHaveMinY;
int m_minY;
std::unordered_map<std::wstring, ConsoleSchematicFile*> m_schematics;
std::unordered_map<ChunkRuleCacheKey, ChunkRuleCacheEntry, ChunkRuleCacheKeyHash>
m_chunkRuleCache;
std::vector<BiomeOverride*> m_biomeOverrides;
std::vector<StartFeature*> m_features;
bool m_bRequiresGameRules;
LevelRuleset* m_requiredGameRules;
StringTable* m_stringTable;
DLCPack* m_parentDLCPack;
bool m_bLoadingData;
public:
LevelGenerationOptions(DLCPack* parentPack = nullptr);
~LevelGenerationOptions();
virtual ConsoleGameRules::EGameRuleType getActionType();
virtual void writeAttributes(DataOutputStream* dos,
unsigned int numAttributes);
virtual void getChildren(std::vector<GameRuleDefinition*>* children);
virtual GameRuleDefinition* addChild(
ConsoleGameRules::EGameRuleType ruleType);
virtual void addAttribute(const std::wstring& attributeName,
const std::wstring& attributeValue);
int64_t getLevelSeed();
int getLevelHasBeenInCreative();
Pos* getSpawnPos();
bool getuseFlatWorld();
void processSchematics(LevelChunk* chunk);
void processSchematicsLighting(LevelChunk* chunk);
void clearChunkRuleCache();
bool checkIntersects(int x0, int y0, int z0, int x1, int y1, int z1);
private:
void clearSchematics();
public:
ConsoleSchematicFile* loadSchematicFile(const std::wstring& filename,
std::uint8_t* pbData,
unsigned int dataLength);
public:
ConsoleSchematicFile* getSchematicFile(const std::wstring& filename);
void releaseSchematicFile(const std::wstring& filename);
bool requiresGameRules();
void setRequiredGameRules(LevelRuleset* rules);
LevelRuleset* getRequiredGameRules();
void getBiomeOverride(int biomeId, std::uint8_t& tile,
std::uint8_t& topTile);
bool isFeatureChunk(int chunkX, int chunkZ,
StructureFeature::EFeatureTypes feature,
int* orientation = nullptr);
void loadStringTable(StringTable* table);
const wchar_t* getString(const std::wstring& key);
std::unordered_map<std::wstring, ConsoleSchematicFile*>*
getUnfinishedSchematicFiles();
void loadBaseSaveData();
int onPackMounted(int iPad, uint32_t dwErr, uint32_t dwLicenceMask);
// kissing girls-yuri:
// yuri blushing girls yuri snuggle
// snuggle yuri yuri FUCKING KISS ALREADY i love girl love yuri kissing girls i love amy is the best yuri.
void reset_start();
// lesbian kiss-scissors:
// lesbian FUCKING KISS ALREADY yuri i love amy is the best lesbian yuri yuri snuggle my wife
// yuri blushing girls yuri girl love yuri i love girls yuri.
void reset_finish();
};