aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/LevelSettings.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Minecraft.World/LevelSettings.cpp')
-rw-r--r--Minecraft.World/LevelSettings.cpp185
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;
+}