summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/ClientHandle.cpp1
-rw-r--r--src/Root.cpp2
-rw-r--r--src/World.cpp30
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: