Add seed validation for server world creation and override-seed property
The dedicated server previously picked a completely random seed with no biome diversity checks (the client validates but the server skipped it). On top of that, the client's findSeed() was hardcoded to only check a 54-chunk (Classic) area, so Large worlds had no diversity guarantee beyond the center. New server worlds now use findSeed() scaled to the full target world size. Added override-seed in server.properties to fix existing worlds without deleting them.
This commit is contained in:
@@ -206,6 +206,8 @@ CMinecraftApp::CMinecraftApp()
|
||||
m_dwRequiredTexturePackID=0;
|
||||
|
||||
m_bResetNether=false;
|
||||
m_seedOverride = 0;
|
||||
m_hasSeedOverride = false;
|
||||
|
||||
#ifdef _XBOX
|
||||
// m_bTransferSavesToXboxOne=false;
|
||||
|
||||
@@ -706,6 +706,8 @@ private:
|
||||
bool m_bGameNewWorldSizeUseMoat;
|
||||
unsigned int m_GameNewHellScale;
|
||||
#endif
|
||||
int64_t m_seedOverride;
|
||||
bool m_hasSeedOverride;
|
||||
unsigned int FromBigEndian(unsigned int uiValue);
|
||||
|
||||
public:
|
||||
@@ -723,6 +725,10 @@ public:
|
||||
void SetGameNewHellScale(unsigned int newScale) { m_GameNewHellScale = newScale; }
|
||||
unsigned int GetGameNewHellScale() { return m_GameNewHellScale; }
|
||||
#endif
|
||||
void SetSeedOverride(int64_t seed) { m_seedOverride = seed; m_hasSeedOverride = true; }
|
||||
bool HasSeedOverride() { return m_hasSeedOverride; }
|
||||
int64_t GetSeedOverride() { return m_seedOverride; }
|
||||
|
||||
void SetResetNether(bool bResetNether) {m_bResetNether=bResetNether;}
|
||||
bool GetResetNether() {return m_bResetNether;}
|
||||
bool CanRecordStatsAndAchievements();
|
||||
|
||||
@@ -735,10 +735,11 @@ bool MinecraftServer::initServer(int64_t seed, NetworkGameInitData *initData, DW
|
||||
|
||||
if( findSeed )
|
||||
{
|
||||
int worldSizeChunks = (initData && initData->xzSize > 0) ? (int)initData->xzSize : 54;
|
||||
#ifdef __PSVITA__
|
||||
seed = BiomeSource::findSeed(pLevelType, &running);
|
||||
seed = BiomeSource::findSeed(pLevelType, &running, worldSizeChunks);
|
||||
#else
|
||||
seed = BiomeSource::findSeed(pLevelType);
|
||||
seed = BiomeSource::findSeed(pLevelType, worldSizeChunks);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user