summaryrefslogtreecommitdiffstats
path: root/src/World.cpp
diff options
context:
space:
mode:
authorLogicParrot <LogicParrot@users.noreply.github.com>2016-02-08 10:57:57 +0100
committerLogicParrot <LogicParrot@users.noreply.github.com>2016-02-08 10:57:57 +0100
commited97946bb946bae2caf8f7dd963a75dceddfcc86 (patch)
tree6df0a1f27e4db9f9a790d1105246ba658be6b571 /src/World.cpp
parentMerge pull request #2953 from LogicParrot/worldRebuild (diff)
parentPrevent server from starting if there's bad world linkage (diff)
downloadcuberite-ed97946bb946bae2caf8f7dd963a75dceddfcc86.tar
cuberite-ed97946bb946bae2caf8f7dd963a75dceddfcc86.tar.gz
cuberite-ed97946bb946bae2caf8f7dd963a75dceddfcc86.tar.bz2
cuberite-ed97946bb946bae2caf8f7dd963a75dceddfcc86.tar.lz
cuberite-ed97946bb946bae2caf8f7dd963a75dceddfcc86.tar.xz
cuberite-ed97946bb946bae2caf8f7dd963a75dceddfcc86.tar.zst
cuberite-ed97946bb946bae2caf8f7dd963a75dceddfcc86.zip
Diffstat (limited to 'src/World.cpp')
-rw-r--r--src/World.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/World.cpp b/src/World.cpp
index fa9b7f966..0cb2615ef 100644
--- a/src/World.cpp
+++ b/src/World.cpp
@@ -530,6 +530,40 @@ void cWorld::Start(void)
m_LinkedOverworldName = IniFile.GetValueSet("LinkedWorlds", "OverworldName", GetLinkedOverworldName());
}
+ // If we are linked to one or more worlds that do not exist, ask the server to stop.
+ AString BadWorlds = "";
+ cRoot * Root = cRoot::Get();
+ if (GetDimension() == dimOverworld)
+ {
+ if ((!m_LinkedNetherWorldName.empty()) && (Root->GetWorld(m_LinkedNetherWorldName) == nullptr))
+ {
+ BadWorlds = m_LinkedNetherWorldName;
+ }
+ if ((!m_LinkedEndWorldName.empty()) && (Root->GetWorld(m_LinkedEndWorldName) == nullptr))
+ {
+ if (!(BadWorlds.empty()))
+ {
+ BadWorlds += ", ";
+ }
+ BadWorlds += m_LinkedEndWorldName;
+ }
+ }
+ else
+ {
+ if ((!m_LinkedOverworldName.empty()) && (Root->GetWorld(m_LinkedOverworldName) == nullptr))
+ {
+ BadWorlds = m_LinkedOverworldName;
+ }
+ }
+ if (!BadWorlds.empty())
+ {
+ const char * WorldName = m_WorldName.c_str();
+ LOGERROR("\n######\nERROR: %s is linked to one or more invalid worlds: %s\nPlease edit %s/world.ini and fix this.\n######\n",
+ WorldName, BadWorlds.c_str(), WorldName);
+ cRoot::Get()->StopServer();
+ }
+
+
// Adjust the enum-backed variables into their respective bounds:
m_GameMode = static_cast<eGameMode> (Clamp<int>(GameMode, gmSurvival, gmSpectator));
m_TNTShrapnelLevel = static_cast<eShrapnelLevel>(Clamp<int>(TNTShrapnelLevel, slNone, slAll));