diff options
author | LogicParrot <LogicParrot@users.noreply.github.com> | 2016-04-19 13:20:02 +0200 |
---|---|---|
committer | LogicParrot <LogicParrot@users.noreply.github.com> | 2016-04-19 13:20:02 +0200 |
commit | 4348b2f5a4a3d91aac8808842716fc8527d254e2 (patch) | |
tree | 92e20fb6b24e2f0d7b8af190b49cfb71838f1f90 /src | |
parent | Proper fix for #3136 (#3143) (diff) | |
parent | Auto clean bad world linkages (diff) | |
download | cuberite-4348b2f5a4a3d91aac8808842716fc8527d254e2.tar cuberite-4348b2f5a4a3d91aac8808842716fc8527d254e2.tar.gz cuberite-4348b2f5a4a3d91aac8808842716fc8527d254e2.tar.bz2 cuberite-4348b2f5a4a3d91aac8808842716fc8527d254e2.tar.lz cuberite-4348b2f5a4a3d91aac8808842716fc8527d254e2.tar.xz cuberite-4348b2f5a4a3d91aac8808842716fc8527d254e2.tar.zst cuberite-4348b2f5a4a3d91aac8808842716fc8527d254e2.zip |
Diffstat (limited to '')
-rw-r--r-- | src/ClientHandle.cpp | 1 | ||||
-rw-r--r-- | src/Root.cpp | 2 | ||||
-rw-r--r-- | src/World.cpp | 30 |
3 files changed, 16 insertions, 17 deletions
diff --git a/src/ClientHandle.cpp b/src/ClientHandle.cpp index cd261b338..6dc35fe61 100644 --- a/src/ClientHandle.cpp +++ b/src/ClientHandle.cpp @@ -345,6 +345,7 @@ void cClientHandle::Authenticate(const AString & a_Name, const AString & a_UUID, if (World == nullptr) { World = cRoot::Get()->GetDefaultWorld(); + m_Player->SetPosition(World->GetSpawnX(), World->GetSpawnY(), World->GetSpawnZ()); } if (m_Player->GetGameMode() == eGameMode_NotSet) diff --git a/src/Root.cpp b/src/Root.cpp index 87c255b9c..bd8e026f3 100644 --- a/src/Root.cpp +++ b/src/Root.cpp @@ -410,7 +410,7 @@ void cRoot::LoadWorlds(cSettingsRepositoryInterface & a_Settings, bool a_IsNewIn a_Settings.AddValue("Worlds", "World", "world_nether"); a_Settings.AddValue("Worlds", "World", "world_end"); Worlds = a_Settings.GetValues("Worlds"); // Refresh the Worlds list so that the rest of the function works as usual - LOG("The server detected an old default config with bad world linkages. This has been autofixed by adding \"world_nether\" and \"world_end\" to settings.ini"); + LOG("The server detected an old default config with bad world linkages. This has been autofixed by adding \"world_nether\" and \"world_end\" to settings.ini. If you do not want this autofix to trigger, please remove the nether and / or end from settings.ini and from world/world.ini"); } } } diff --git a/src/World.cpp b/src/World.cpp index 0649d2bb2..d06f22d1b 100644 --- a/src/World.cpp +++ b/src/World.cpp @@ -530,38 +530,36 @@ 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 = ""; + // If we are linked to one or more worlds that do not exist, unlink them cRoot * Root = cRoot::Get(); if (GetDimension() == dimOverworld) { if ((!m_LinkedNetherWorldName.empty()) && (Root->GetWorld(m_LinkedNetherWorldName) == nullptr)) { - BadWorlds = m_LinkedNetherWorldName; + IniFile.SetValue("LinkedWorlds", "NetherWorldName", ""); + LOG("%s Is linked to a nonexisting nether world called \"%s\". The server has modified \"%s/world.ini\" and removed this invalid link.", + GetName().c_str(), m_LinkedNetherWorldName.c_str(), GetName().c_str()); + m_LinkedNetherWorldName = ""; } if ((!m_LinkedEndWorldName.empty()) && (Root->GetWorld(m_LinkedEndWorldName) == nullptr)) { - if (!(BadWorlds.empty())) - { - BadWorlds += ", "; - } - BadWorlds += m_LinkedEndWorldName; + IniFile.SetValue("LinkedWorlds", "EndWorldName", ""); + LOG("%s Is linked to a nonexisting end world called \"%s\". The server has modified \"%s/world.ini\" and removed this invalid link.", + GetName().c_str(), m_LinkedEndWorldName.c_str(), GetName().c_str()); + m_LinkedEndWorldName = ""; } } else { if ((!m_LinkedOverworldName.empty()) && (Root->GetWorld(m_LinkedOverworldName) == nullptr)) { - BadWorlds = m_LinkedOverworldName; + IniFile.SetValue("LinkedWorlds", "OverworldName", ""); + LOG("%s Is linked to a nonexisting overworld called \"%s\". The server has modified \"%s/world.ini\" and removed this invalid link.", + GetName().c_str(), m_LinkedOverworldName.c_str(), GetName().c_str()); + m_LinkedOverworldName = ""; } } - if (!BadWorlds.empty()) - { - const char * WorldName = m_WorldName.c_str(); - LOGERROR("\n###### ERROR: \"%s\" is linked to the following nonexisting world/s:\n%s\n\nPlease edit %s/world.ini and fix this.\n\nNote that the server started enforcing proper world linkages recently. And people with older configs may naturally get this error. If you just want a working default config and don't mind losing this world, delete the folder \"%s\" and the server will receate one for you. Otherwise edit the world.ini file and fix the invalid linkages.\n\nMore help and info:\nhttps://forum.cuberite.org/thread-2366.html\n######\n", - WorldName, BadWorlds.c_str(), WorldName, WorldName); - cRoot::Get()->StopServer(); - } + // Adjust the enum-backed variables into their respective bounds: |