diff options
Diffstat (limited to 'Minecraft.World/LevelSettings.cpp')
| -rw-r--r-- | Minecraft.World/LevelSettings.cpp | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/Minecraft.World/LevelSettings.cpp b/Minecraft.World/LevelSettings.cpp new file mode 100644 index 00000000..59faa1ca --- /dev/null +++ b/Minecraft.World/LevelSettings.cpp @@ -0,0 +1,185 @@ +#include "stdafx.h" +#include "LevelSettings.h" +#include "net.minecraft.world.level.storage.h" +#include "LevelType.h" + +GameType *GameType::NOT_SET = NULL; +GameType *GameType::SURVIVAL= NULL; +GameType *GameType::CREATIVE = NULL; +GameType *GameType::ADVENTURE = NULL; + +void GameType::staticCtor() +{ + NOT_SET = new GameType(-1, L""); + SURVIVAL = new GameType(0, L"survival"); + CREATIVE = new GameType(1, L"creative"); + ADVENTURE = new GameType(2, L"adventure"); +} + +GameType::GameType(int id, const wstring &name) +{ + this->id = id; + this->name = name; +} + +int GameType::getId() +{ + return id; +} + +wstring GameType::getName() +{ + return name; +} + +void GameType::updatePlayerAbilities(Abilities *abilities) +{ + if (this == CREATIVE) + { + abilities->mayfly = true; + abilities->instabuild = true; + abilities->invulnerable = true; + } + else + { + abilities->mayfly = false; + abilities->instabuild = false; + abilities->invulnerable = false; + abilities->flying = false; + } + abilities->mayBuild = !isReadOnly(); +} + +bool GameType::isReadOnly() +{ + return this == ADVENTURE; +} + +bool GameType::isCreative() +{ + return this == CREATIVE; +} + +bool GameType::isSurvival() +{ + return this == SURVIVAL || this == ADVENTURE; +} + +GameType *GameType::byId(int id) +{ + if(id == NOT_SET->id) return NOT_SET; + else if(id == SURVIVAL->id) return SURVIVAL; + else if(id == CREATIVE->id) return CREATIVE; + else if(id == ADVENTURE->id) return ADVENTURE; + + return SURVIVAL; +} + +GameType *GameType::byName(const wstring &name) +{ + if(name.compare(NOT_SET->name) == 0) return NOT_SET; + else if(name.compare(SURVIVAL->name) == 0) return SURVIVAL; + else if(name.compare(CREATIVE->name) == 0) return CREATIVE; + else if(name.compare(ADVENTURE->name) == 0) return ADVENTURE; + + return SURVIVAL; +} + +void LevelSettings::_init(__int64 seed, GameType *gameType, bool generateMapFeatures, bool hardcore, bool newSeaLevel, LevelType *levelType, int xzSize, int hellScale) +{ + this->seed = seed; + this->gameType = gameType; + this->hardcore = hardcore; + this->generateMapFeatures = generateMapFeatures; + this->newSeaLevel = newSeaLevel; + this->levelType = levelType; + this->allowCommands = false; + this->startingBonusItems = false; + m_xzSize = xzSize; + m_hellScale = hellScale; +} + +LevelSettings::LevelSettings(__int64 seed, GameType *gameType, bool generateMapFeatures, bool hardcore, bool newSeaLevel, LevelType *levelType, int xzSize, int hellScale) : + seed(seed), + gameType(gameType), + hardcore(hardcore), + generateMapFeatures(generateMapFeatures), + newSeaLevel(newSeaLevel), + levelType(levelType), + startingBonusItems(false) +{ + _init(seed, gameType, generateMapFeatures, hardcore, newSeaLevel, levelType, xzSize, hellScale); +} + +LevelSettings::LevelSettings(LevelData *levelData) +{ + _init(levelData->getSeed(), levelData->getGameType(), levelData->isGenerateMapFeatures(), levelData->isHardcore(), levelData->useNewSeaLevel(), levelData->getGenerator(), levelData->getXZSize(), levelData->getHellScale() ); +} + +LevelSettings *LevelSettings::enableStartingBonusItems() +{ + startingBonusItems = true; + return this; +} + +LevelSettings *LevelSettings::enableSinglePlayerCommands() +{ + allowCommands = true; + return this; +} + +bool LevelSettings::hasStartingBonusItems() +{ + return startingBonusItems; +} + +__int64 LevelSettings::getSeed() +{ + return seed; +} + +GameType *LevelSettings::getGameType() +{ + return gameType; +} + +bool LevelSettings::isHardcore() +{ + return hardcore; +} + +LevelType *LevelSettings::getLevelType() +{ + return levelType; +} + +bool LevelSettings::getAllowCommands() +{ + return allowCommands; +} + +bool LevelSettings::isGenerateMapFeatures() +{ + return generateMapFeatures; +} + +GameType *LevelSettings::validateGameType(int gameType) +{ + return GameType::byId(gameType); +} + +bool LevelSettings::useNewSeaLevel() +{ + return newSeaLevel; +} + +// 4J Added +int LevelSettings::getXZSize() +{ + return m_xzSize; +} + +int LevelSettings::getHellScale() +{ + return m_hellScale; +} |
