reimplement old world size's and add new Infinite world size option

This commit is contained in:
bwmp 2026-03-02 20:40:59 -08:00
parent be60dceca1
commit bb7e5aa497
112 changed files with 839 additions and 42 deletions

View file

@ -1200,10 +1200,12 @@ void UIScene_CreateWorldMenu::CreateGame(UIScene_CreateWorldMenu* pClass, DWORD
param->hellScale = 6; param->hellScale = 6;
break; break;
case 3: case 3:
//param->xzSize = 5 * 64;
//param->hellScale = 8;
// Large // Large
param->xzSize = LEVEL_LARGE_WIDTH;
param->hellScale = HELL_LEVEL_MAX_SCALE;
break;
case 4:
// Infinite
param->xzSize = LEVEL_MAX_WIDTH; param->xzSize = LEVEL_MAX_WIDTH;
param->hellScale = HELL_LEVEL_MAX_SCALE; param->hellScale = HELL_LEVEL_MAX_SCALE;
break; break;

View file

@ -6,12 +6,13 @@
#define GAME_CREATE_ONLINE_TIMER_TIME 100 #define GAME_CREATE_ONLINE_TIMER_TIME 100
#ifdef _LARGE_WORLDS #ifdef _LARGE_WORLDS
int m_iWorldSizeTitleA[4] = int m_iWorldSizeTitleA[5] =
{ {
IDS_WORLD_SIZE_TITLE_CLASSIC, IDS_WORLD_SIZE_TITLE_CLASSIC,
IDS_WORLD_SIZE_TITLE_SMALL, IDS_WORLD_SIZE_TITLE_SMALL,
IDS_WORLD_SIZE_TITLE_MEDIUM, IDS_WORLD_SIZE_TITLE_MEDIUM,
IDS_WORLD_SIZE_TITLE_LARGE, IDS_WORLD_SIZE_TITLE_LARGE,
IDS_WORLD_SIZE_TITLE_INFINITE,
}; };
#endif #endif
@ -80,7 +81,7 @@ UIScene_LaunchMoreOptionsMenu::UIScene_LaunchMoreOptionsMenu(int iPad, void *ini
m_labelRandomSeed.init(app.GetString(IDS_CREATE_NEW_WORLD_RANDOM_SEED)); m_labelRandomSeed.init(app.GetString(IDS_CREATE_NEW_WORLD_RANDOM_SEED));
m_editSeed.init(m_params->seed, eControl_EditSeed); m_editSeed.init(m_params->seed, eControl_EditSeed);
m_labelWorldSize.init(app.GetString(IDS_WORLD_SIZE)); m_labelWorldSize.init(app.GetString(IDS_WORLD_SIZE));
m_sliderWorldSize.init(app.GetString(m_iWorldSizeTitleA[m_params->worldSize]),eControl_WorldSize,0,3,m_params->worldSize); m_sliderWorldSize.init(app.GetString(m_iWorldSizeTitleA[m_params->worldSize]),eControl_WorldSize,0,4,m_params->worldSize);
m_checkboxes[eLaunchCheckbox_DisableSaving].init( app.GetString(IDS_DISABLE_SAVING), eLaunchCheckbox_DisableSaving, m_params->bDisableSaving ); m_checkboxes[eLaunchCheckbox_DisableSaving].init( app.GetString(IDS_DISABLE_SAVING), eLaunchCheckbox_DisableSaving, m_params->bDisableSaving );
#endif #endif

View file

@ -8459,6 +8459,10 @@ Pokud se pokusíte postup uložit ve zkušební verzi, nabídne vám hra možnos
<value>Velký</value> <value>Velký</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klasický</value> <value>Klasický</value>
</data> </data>

View file

@ -258,6 +258,9 @@ Pokud se pokusíte postup uložit ve zkušební verzi, nabídne vám hra možnos
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Velký</value> <value>Velký</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klasický</value> <value>Klasický</value>
</data> </data>

View file

@ -8458,6 +8458,10 @@ Hvis du prøver at gemme, mens du bruger prøveversionen, får du mulighed for a
<value>Stor</value> <value>Stor</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klassisk</value> <value>Klassisk</value>
</data> </data>

View file

@ -258,6 +258,9 @@ Hvis du prøver at gemme, mens du bruger prøveversionen, får du mulighed for a
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Stor</value> <value>Stor</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klassisk</value> <value>Klassisk</value>
</data> </data>

View file

@ -8461,6 +8461,10 @@ Wenn du in der Testversion versuchst zu speichern, wird dir die Möglichkeit geg
<value>Groß</value> <value>Groß</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klassisch</value> <value>Klassisch</value>
</data> </data>

View file

@ -259,6 +259,9 @@ Wenn du in der Testversion versuchst zu speichern, wird dir die Möglichkeit geg
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Groß</value> <value>Groß</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klassisch</value> <value>Klassisch</value>
</data> </data>

View file

@ -8457,6 +8457,10 @@ Enchanted Books are used at the Anvil to apply enchantments to items. This gives
<value>Μεγάλο</value> <value>Μεγάλο</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Κλασικό</value> <value>Κλασικό</value>
</data> </data>

View file

@ -257,6 +257,9 @@
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Μεγάλο</value> <value>Μεγάλο</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Κλασικό</value> <value>Κλασικό</value>
</data> </data>

View file

@ -8459,6 +8459,10 @@ If you try to save while using the trial version, you will be given the option t
<value>Large</value> <value>Large</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Classic</value> <value>Classic</value>
</data> </data>

View file

@ -258,6 +258,9 @@ If you try to save while using the trial version, you will be given the option t
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Large</value> <value>Large</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Classic</value> <value>Classic</value>
</data> </data>

View file

@ -8472,6 +8472,10 @@ Si intentas guardar en la versión de prueba, se te dará la opción de comprar
<value>Grande</value> <value>Grande</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Clásico</value> <value>Clásico</value>
</data> </data>

View file

@ -258,6 +258,9 @@ Si intentas guardar en la versión de prueba, se te dará la opción de comprar
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Grande</value> <value>Grande</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Clásico</value> <value>Clásico</value>
</data> </data>

View file

@ -8460,6 +8460,10 @@ Si intentas guardar en la versión de prueba, se te dará la opción de comprar
<value>Grande</value> <value>Grande</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Clásico</value> <value>Clásico</value>
</data> </data>

View file

@ -259,6 +259,9 @@ Si intentas guardar en la versión de prueba, se te dará la opción de comprar
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Grande</value> <value>Grande</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Clásico</value> <value>Clásico</value>
</data> </data>

View file

@ -8459,6 +8459,10 @@ Jos yrität tallentaa käyttäessäsi kokeiluversiota, sinulle tarjotaan mahdoll
<value>Suuri</value> <value>Suuri</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klassinen</value> <value>Klassinen</value>
</data> </data>

View file

@ -258,6 +258,9 @@ Jos yrität tallentaa käyttäessäsi kokeiluversiota, sinulle tarjotaan mahdoll
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Suuri</value> <value>Suuri</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klassinen</value> <value>Klassinen</value>
</data> </data>

View file

@ -8463,6 +8463,10 @@ Si vous tentez de sauvegarder en utilisant la version d'essai, l'achat de la ver
<value>Énorme</value> <value>Énorme</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Classique</value> <value>Classique</value>
</data> </data>

View file

@ -258,6 +258,9 @@ Si vous tentez de sauvegarder en utilisant la version d'essai, l'achat de la ver
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Énorme</value> <value>Énorme</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Classique</value> <value>Classique</value>
</data> </data>

View file

@ -8460,6 +8460,10 @@ Se cerchi di salvare il gioco mentre è in uso la versione di prova, ti verrà o
<value>Grande</value> <value>Grande</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Classico</value> <value>Classico</value>
</data> </data>

View file

@ -258,6 +258,9 @@ Se cerchi di salvare il gioco mentre è in uso la versione di prova, ti verrà o
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Grande</value> <value>Grande</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Classico</value> <value>Classico</value>
</data> </data>

View file

@ -8456,6 +8456,10 @@ Minecraft Xbox One 版は、初期設定でマルチプレイヤー ゲームに
<value>ラージ</value> <value>ラージ</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>クラシック</value> <value>クラシック</value>
</data> </data>

View file

@ -258,6 +258,9 @@ Minecraft Xbox One 版は、初期設定でマルチプレイヤー ゲームに
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>ラージ</value> <value>ラージ</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>クラシック</value> <value>クラシック</value>
</data> </data>

View file

@ -8458,6 +8458,10 @@ Xbox 360 본체용 Minecraft는 멀티 플레이 게임이 기본값으로 되
<value>큼</value> <value>큼</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>클래식</value> <value>클래식</value>
</data> </data>

View file

@ -258,6 +258,9 @@ Xbox 360 본체용 Minecraft는 멀티 플레이 게임이 기본값으로 되
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value></value> <value></value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>클래식</value> <value>클래식</value>
</data> </data>

View file

@ -8459,6 +8459,10 @@ Hvis du prøver å lagre mens du bruker prøveversjonen, får du muligheten til
<value>Stor</value> <value>Stor</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klassisk</value> <value>Klassisk</value>
</data> </data>

View file

@ -258,6 +258,9 @@ Hvis du prøver å lagre mens du bruker prøveversjonen, får du muligheten til
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Stor</value> <value>Stor</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klassisk</value> <value>Klassisk</value>
</data> </data>

View file

@ -8459,6 +8459,10 @@ Als je in de demo probeert op te slaan, krijg je de optie om de volledige versie
<value>Groot</value> <value>Groot</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klassiek</value> <value>Klassiek</value>
</data> </data>

View file

@ -258,6 +258,9 @@ Als je in de demo probeert op te slaan, krijg je de optie om de volledige versie
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Groot</value> <value>Groot</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klassiek</value> <value>Klassiek</value>
</data> </data>

View file

@ -8457,6 +8457,10 @@ Przy próbie zapisania gry z wersją testową pojawi się propozycja zakupu peł
<value>Duży</value> <value>Duży</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klasyczny</value> <value>Klasyczny</value>
</data> </data>

View file

@ -258,6 +258,9 @@ Przy próbie zapisania gry z wersją testową pojawi się propozycja zakupu peł
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Duży</value> <value>Duży</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klasyczny</value> <value>Klasyczny</value>
</data> </data>

View file

@ -8450,6 +8450,10 @@ Não desligue o console Xbox One enquanto este ícone estiver na tela.</value>
<value>Grande</value> <value>Grande</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Clássico</value> <value>Clássico</value>
</data> </data>

View file

@ -256,6 +256,9 @@ Não desligue o console Xbox One enquanto este ícone estiver na tela.</value>
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Grande</value> <value>Grande</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Clássico</value> <value>Clássico</value>
</data> </data>

View file

@ -8456,6 +8456,10 @@ Se tentares guardar enquanto usas a versão de avaliação, ser-te-á apresentad
<value>Grande</value> <value>Grande</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Clássico</value> <value>Clássico</value>
</data> </data>

View file

@ -258,6 +258,9 @@ Se tentares guardar enquanto usas a versão de avaliação, ser-te-á apresentad
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Grande</value> <value>Grande</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Clássico</value> <value>Clássico</value>
</data> </data>

View file

@ -8456,6 +8456,10 @@ Enchanted Books are used at the Anvil to apply enchantments to items. This gives
<value>Большой</value> <value>Большой</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Классика</value> <value>Классика</value>
</data> </data>

View file

@ -254,6 +254,9 @@
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Большой</value> <value>Большой</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Классика</value> <value>Классика</value>
</data> </data>

View file

@ -8459,6 +8459,10 @@ Ak sa pri používaní skúšobnej verzie pokúsite o uloženie, zobrazí sa mo
<value>Veľký</value> <value>Veľký</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klasický</value> <value>Klasický</value>
</data> </data>

View file

@ -258,6 +258,9 @@ Ak sa pri používaní skúšobnej verzie pokúsite o uloženie, zobrazí sa mo
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Veľký</value> <value>Veľký</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klasický</value> <value>Klasický</value>
</data> </data>

View file

@ -8459,6 +8459,10 @@ If you try to save while using the trial version, you will be given the option t
<value>Large</value> <value>Large</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Classic</value> <value>Classic</value>
</data> </data>

View file

@ -258,6 +258,9 @@ If you try to save while using the trial version, you will be given the option t
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Large</value> <value>Large</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Classic</value> <value>Classic</value>
</data> </data>

View file

@ -8454,6 +8454,10 @@ Om du försöker spara kommer du få möjligheten att köpa den kompletta versio
<value>Stor</value> <value>Stor</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klassisk</value> <value>Klassisk</value>
</data> </data>

View file

@ -254,6 +254,9 @@ Om du försöker spara kommer du få möjligheten att köpa den kompletta versio
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Stor</value> <value>Stor</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klassisk</value> <value>Klassisk</value>
</data> </data>

View file

@ -8455,6 +8455,10 @@ Minecraft 在 Xbox One 主机上默认采用多人游戏。如果在高清模式
<value>大型</value> <value>大型</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>经典</value> <value>经典</value>
</data> </data>

View file

@ -254,6 +254,9 @@ Minecraft 在 Xbox One 主机上默认采用多人游戏。如果在高清模式
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>大型</value> <value>大型</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>经典</value> <value>经典</value>
</data> </data>

View file

@ -8465,6 +8465,10 @@ Xbox One 主機上的 Minecraft 預設為多人遊戲。如果您選擇高畫質
<value>大</value> <value>大</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>經典</value> <value>經典</value>
</data> </data>

View file

@ -262,6 +262,9 @@ Xbox One 主機上的 Minecraft 預設為多人遊戲。如果您選擇高畫質
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value></value> <value></value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>經典</value> <value>經典</value>
</data> </data>

View file

@ -1955,3 +1955,4 @@
#define IDS_YOU_DIED 1953 #define IDS_YOU_DIED 1953
#define IDS_YOU_HAVE 1954 #define IDS_YOU_HAVE 1954
#define IDS_ZOMBIE 1955 #define IDS_ZOMBIE 1955
#define IDS_WORLD_SIZE_TITLE_INFINITE 1956

View file

@ -46,6 +46,7 @@
#include "..\Minecraft.World\net.minecraft.world.level.h" #include "..\Minecraft.World\net.minecraft.world.level.h"
#include "..\Minecraft.World\net.minecraft.world.level.dimension.h" #include "..\Minecraft.World\net.minecraft.world.level.dimension.h"
#include "..\Minecraft.World\net.minecraft.world.level.tile.h" #include "..\Minecraft.World\net.minecraft.world.level.tile.h"
#include "..\Minecraft.World\net.minecraft.world.level.storage.h"
#include "..\Minecraft.World\net.minecraft.world.phys.h" #include "..\Minecraft.World\net.minecraft.world.phys.h"
#include "..\Minecraft.World\net.minecraft.world.entity.player.h" #include "..\Minecraft.World\net.minecraft.world.entity.player.h"
#include "..\Minecraft.World\net.minecraft.world.item.h" #include "..\Minecraft.World\net.minecraft.world.item.h"
@ -143,6 +144,7 @@ LevelRenderer::LevelRenderer(Minecraft *mc, Textures *textures)
InitializeCriticalSection(&m_csRenderableTileEntities); InitializeCriticalSection(&m_csRenderableTileEntities);
#ifdef _LARGE_WORLDS #ifdef _LARGE_WORLDS
InitializeCriticalSection(&m_csChunkFlags); InitializeCriticalSection(&m_csChunkFlags);
m_isInfinite = false;
#endif #endif
dirtyChunkPresent = false; dirtyChunkPresent = false;
@ -353,6 +355,9 @@ void LevelRenderer::setLevel(int playerIndex, MultiPlayerLevel *level)
level->addListener(this); level->addListener(this);
} }
#ifdef _LARGE_WORLDS
m_isInfinite = isInfiniteWorld(level->getLevelData()->getXZSize());
#endif
allChanged(playerIndex); allChanged(playerIndex);
} }
else else

View file

@ -133,6 +133,9 @@ private:
ClipChunkArray chunks[4]; // 4J - now one per player ClipChunkArray chunks[4]; // 4J - now one per player
int lastPlayerCount[4]; // 4J - added int lastPlayerCount[4]; // 4J - added
int xChunks, yChunks, zChunks; int xChunks, yChunks, zChunks;
#ifdef _LARGE_WORLDS
bool m_isInfinite; // true when overworld is infinite (rolling window render)
#endif
int chunkLists; int chunkLists;
Minecraft *mc; Minecraft *mc;
TileRenderer *tileRenderer[4]; // 4J - now one per player TileRenderer *tileRenderer[4]; // 4J - now one per player

View file

@ -19,6 +19,9 @@ MultiPlayerChunkCache::MultiPlayerChunkCache(Level *level)
{ {
// For infinite worlds, m_XZSize is kept for compatibility but the cache is unbounded // For infinite worlds, m_XZSize is kept for compatibility but the cache is unbounded
m_XZSize = level->dimension->getXZSize(); m_XZSize = level->dimension->getXZSize();
#ifdef _LARGE_WORLDS
m_isInfinite = isInfiniteWorld(m_XZSize);
#endif
emptyChunk = new EmptyLevelChunk(level, byteArray(16 * 16 * Level::maxBuildHeight), 0, 0); emptyChunk = new EmptyLevelChunk(level, byteArray(16 * 16 * Level::maxBuildHeight), 0, 0);
@ -126,6 +129,15 @@ bool MultiPlayerChunkCache::hasChunk(int x, int z)
// 4J added - find out if we actually really do have a chunk in our cache // 4J added - find out if we actually really do have a chunk in our cache
bool MultiPlayerChunkCache::reallyHasChunk(int x, int z) bool MultiPlayerChunkCache::reallyHasChunk(int x, int z)
{ {
#ifdef _LARGE_WORLDS
// For finite worlds, out-of-bounds coordinates are treated as "exists"
if (!m_isInfinite)
{
int half = m_XZSize / 2;
if (x < -half || x >= half || z < -half || z >= half) return true;
}
#endif
int64_t key = mpKey(x, z); int64_t key = mpKey(x, z);
EnterCriticalSection(&m_csLoadCreate); EnterCriticalSection(&m_csLoadCreate);
auto it = m_chunkMap.find(key); auto it = m_chunkMap.find(key);
@ -174,6 +186,15 @@ void MultiPlayerChunkCache::drop(int x, int z)
LevelChunk *MultiPlayerChunkCache::create(int x, int z) LevelChunk *MultiPlayerChunkCache::create(int x, int z)
{ {
#ifdef _LARGE_WORLDS
// For finite worlds, refuse to create chunks outside the world boundary
if (!m_isInfinite)
{
int half = m_XZSize / 2;
if (x < -half || x >= half || z < -half || z >= half) return emptyChunk;
}
#endif
int64_t key = mpKey(x, z); int64_t key = mpKey(x, z);
EnterCriticalSection(&m_csLoadCreate); EnterCriticalSection(&m_csLoadCreate);
@ -241,6 +262,19 @@ LevelChunk *MultiPlayerChunkCache::create(int x, int z)
LevelChunk *MultiPlayerChunkCache::getChunk(int x, int z) LevelChunk *MultiPlayerChunkCache::getChunk(int x, int z)
{ {
#ifdef _LARGE_WORLDS
// For finite worlds, out-of-bounds coordinates return the water/empty chunk
if (!m_isInfinite)
{
int half = m_XZSize / 2;
if (x < -half || x >= half || z < -half || z >= half)
{
// Return waterChunk for overworld edge (visual sea), emptyChunk for other dims
return (waterChunk != NULL) ? waterChunk : emptyChunk;
}
}
#endif
EnterCriticalSection(&m_csLoadCreate); EnterCriticalSection(&m_csLoadCreate);
auto it = m_chunkMap.find(mpKey(x, z)); auto it = m_chunkMap.find(mpKey(x, z));
LevelChunk *chunk = (it != m_chunkMap.end() && it->second != NULL) ? it->second : NULL; LevelChunk *chunk = (it != m_chunkMap.end() && it->second != NULL) ? it->second : NULL;

View file

@ -24,6 +24,10 @@ private:
// 4J - added for multithreaded support // 4J - added for multithreaded support
CRITICAL_SECTION m_csLoadCreate; CRITICAL_SECTION m_csLoadCreate;
#ifdef _LARGE_WORLDS
bool m_isInfinite; // true when m_XZSize >= LEVEL_MAX_WIDTH (infinite world)
#endif
// Deferred deletion: chunks removed from the map but kept alive briefly // Deferred deletion: chunks removed from the map but kept alive briefly
// so any in-flight rebuild thread that already obtained the pointer can finish. // so any in-flight rebuild thread that already obtained the pointer can finish.
// Each entry stores {chunk, tickAtWhichToDelete}. // Each entry stores {chunk, tickAtWhichToDelete}.

View file

@ -8531,6 +8531,10 @@ Du må ikke slukke for dit PlayStation®4-system, når dette ikon vises på skæ
<value>Stor</value> <value>Stor</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klassisk</value> <value>Klassisk</value>
</data> </data>

View file

@ -175,6 +175,9 @@ Du må ikke slukke for dit PlayStation®4-system, når dette ikon vises på skæ
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Stor</value> <value>Stor</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klassisk</value> <value>Klassisk</value>
</data> </data>

View file

@ -8309,6 +8309,10 @@ Wenn du versuchst, mit der Testversion zu speichern, wird dir die Möglichkeit g
<value>Groß</value> <value>Groß</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klassisch</value> <value>Klassisch</value>
</data> </data>

View file

@ -175,6 +175,9 @@ Wenn du versuchst, mit der Testversion zu speichern, wird dir die Möglichkeit g
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Groß</value> <value>Groß</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klassisch</value> <value>Klassisch</value>
</data> </data>

View file

@ -8527,6 +8527,10 @@
<value>Μεγάλος</value> <value>Μεγάλος</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Κλασικός</value> <value>Κλασικός</value>
</data> </data>

View file

@ -179,6 +179,9 @@
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Μεγάλος</value> <value>Μεγάλος</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Κλασικός</value> <value>Κλασικός</value>
</data> </data>

View file

@ -8332,6 +8332,10 @@ Si intentas guardar mientras usas esta versión de prueba, tendrás la opción d
<value>Grande</value> <value>Grande</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Clásico</value> <value>Clásico</value>
</data> </data>

View file

@ -178,6 +178,9 @@ Si intentas guardar mientras usas esta versión de prueba, tendrás la opción d
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Grande</value> <value>Grande</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Clásico</value> <value>Clásico</value>
</data> </data>

View file

@ -8353,6 +8353,10 @@ Jos yrität tallentaa käyttäessäsi koeversiota, sinulle tarjotaan mahdollisuu
<value>Suuri</value> <value>Suuri</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klassinen</value> <value>Klassinen</value>
</data> </data>

View file

@ -177,6 +177,9 @@ Jos yrität tallentaa käyttäessäsi koeversiota, sinulle tarjotaan mahdollisuu
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Suuri</value> <value>Suuri</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klassinen</value> <value>Klassinen</value>
</data> </data>

View file

@ -8222,6 +8222,10 @@ Si vous tentez de sauvegarder en utilisant cette version d'essai, il vous sera p
<value>Grand</value> <value>Grand</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Classique</value> <value>Classique</value>
</data> </data>

View file

@ -176,6 +176,9 @@ Si vous tentez de sauvegarder en utilisant cette version d'essai, il vous sera p
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Grand</value> <value>Grand</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Classique</value> <value>Classique</value>
</data> </data>

View file

@ -8327,6 +8327,10 @@ Se cerchi di salvare mentre usi la versione di prova, avrai la possibilità di a
<value>Grande</value> <value>Grande</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Classico</value> <value>Classico</value>
</data> </data>

View file

@ -177,6 +177,9 @@ Se cerchi di salvare mentre usi la versione di prova, avrai la possibilità di a
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Grande</value> <value>Grande</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Classico</value> <value>Classico</value>
</data> </data>

View file

@ -8241,6 +8241,10 @@ OK を選択すると、この世界でのプレイを終了します</value>
<value>大</value> <value>大</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>クラシック</value> <value>クラシック</value>
</data> </data>

View file

@ -176,6 +176,9 @@
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value></value> <value></value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>クラシック</value> <value>クラシック</value>
</data> </data>

View file

@ -8359,6 +8359,10 @@ Ender에 들어서면 친구가 그들의 지도에서 요새 내부에 있는 E
<value>대</value> <value>대</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>클래식</value> <value>클래식</value>
</data> </data>

View file

@ -178,6 +178,9 @@
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value></value> <value></value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>클래식</value> <value>클래식</value>
</data> </data>

View file

@ -8565,6 +8565,10 @@ Si intentas guardar mientras usas la versión de prueba, se te dará la opción
<value>Grande</value> <value>Grande</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Clásico</value> <value>Clásico</value>
</data> </data>

View file

@ -178,6 +178,9 @@ Si intentas guardar mientras usas la versión de prueba, se te dará la opción
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Grande</value> <value>Grande</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Clásico</value> <value>Clásico</value>
</data> </data>

View file

@ -8548,6 +8548,10 @@ Als je probeert op te slaan tijdens het gebruik van de testversie, krijg je de m
<value>Groot</value> <value>Groot</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klassiek</value> <value>Klassiek</value>
</data> </data>

View file

@ -177,6 +177,9 @@ Als je probeert op te slaan tijdens het gebruik van de testversie, krijg je de m
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Groot</value> <value>Groot</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klassiek</value> <value>Klassiek</value>
</data> </data>

View file

@ -8526,6 +8526,10 @@ Hvis du prøver å lagre mens du bruker prøveversjonen, vil du få spørsmål o
<value>Stor</value> <value>Stor</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klassisk</value> <value>Klassisk</value>
</data> </data>

View file

@ -178,6 +178,9 @@ Hvis du prøver å lagre mens du bruker prøveversjonen, vil du få spørsmål o
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Stor</value> <value>Stor</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klassisk</value> <value>Klassisk</value>
</data> </data>

View file

@ -8427,6 +8427,10 @@ Jeżeli spróbujesz zapisać postęp podczas korzystania z wersji próbnej, zost
<value>Duży</value> <value>Duży</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klasyczny</value> <value>Klasyczny</value>
</data> </data>

View file

@ -177,6 +177,9 @@ Jeżeli spróbujesz zapisać postęp podczas korzystania z wersji próbnej, zost
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Duży</value> <value>Duży</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klasyczny</value> <value>Klasyczny</value>
</data> </data>

View file

@ -8555,6 +8555,10 @@ Se tentar salvar enquanto estiver usando a versão de avaliação, a versão com
<value>Grande</value> <value>Grande</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Clássico</value> <value>Clássico</value>
</data> </data>

View file

@ -177,6 +177,9 @@ Se tentar salvar enquanto estiver usando a versão de avaliação, a versão com
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Grande</value> <value>Grande</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Clássico</value> <value>Clássico</value>
</data> </data>

View file

@ -8355,6 +8355,10 @@ Se tentares gravar enquanto usas a versão de avaliação, ser-te-á dada a opç
<value>Grande</value> <value>Grande</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Clássico</value> <value>Clássico</value>
</data> </data>

View file

@ -178,6 +178,9 @@ Se tentares gravar enquanto usas a versão de avaliação, ser-te-á dada a opç
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Grande</value> <value>Grande</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Clássico</value> <value>Clássico</value>
</data> </data>

View file

@ -8556,6 +8556,10 @@ Minecraft на системе PlayStation®4 по умолчанию являе
<value>Большой</value> <value>Большой</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Классический</value> <value>Классический</value>
</data> </data>

View file

@ -178,6 +178,9 @@ Minecraft на системе PlayStation®4 по умолчанию являе
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Большой</value> <value>Большой</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Классический</value> <value>Классический</value>
</data> </data>

View file

@ -8571,6 +8571,10 @@ If you try to save while using the trial version, you will be given the option t
<value>Large</value> <value>Large</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Classic</value> <value>Classic</value>
</data> </data>

View file

@ -177,6 +177,9 @@ If you try to save while using the trial version, you will be given the option t
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Large</value> <value>Large</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Classic</value> <value>Classic</value>
</data> </data>

View file

@ -8533,6 +8533,10 @@ Om du försöker spara medan du använder demoversionen kommer du att bli tillfr
<value>Stor</value> <value>Stor</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klassisk</value> <value>Klassisk</value>
</data> </data>

View file

@ -177,6 +177,9 @@ Om du försöker spara medan du använder demoversionen kommer du att bli tillfr
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Stor</value> <value>Stor</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klassisk</value> <value>Klassisk</value>
</data> </data>

View file

@ -8562,6 +8562,10 @@ Deneme sürümünü kullanırken oyunu kaydetmeye çalışırsan, tam sürümü
<value>Büyük</value> <value>Büyük</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klasik</value> <value>Klasik</value>
</data> </data>

View file

@ -182,6 +182,9 @@ Deneme sürümünü kullanırken oyunu kaydetmeye çalışırsan, tam sürümü
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Büyük</value> <value>Büyük</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Klasik</value> <value>Klasik</value>
</data> </data>

View file

@ -8380,6 +8380,10 @@ Minecraft 是一款可讓您放置方塊來建造夢想世界的遊戲。不過
<value>大</value> <value>大</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>傳統</value> <value>傳統</value>
</data> </data>

View file

@ -179,6 +179,9 @@
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value></value> <value></value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>傳統</value> <value>傳統</value>
</data> </data>

View file

@ -1990,3 +1990,4 @@
#define IDS_YOU_DIED 1988 #define IDS_YOU_DIED 1988
#define IDS_YOU_HAVE 1989 #define IDS_YOU_HAVE 1989
#define IDS_ZOMBIE 1990 #define IDS_ZOMBIE 1990
#define IDS_WORLD_SIZE_TITLE_INFINITE 1991

View file

@ -586,6 +586,11 @@ void PlayerChunkMap::add(shared_ptr<ServerPlayer> player)
player->lastMoveX = player->x; player->lastMoveX = player->x;
player->lastMoveZ = player->z; player->lastMoveZ = player->z;
#ifdef _LARGE_WORLDS
int half = level->getLevelData()->getXZSize() / 2;
bool isInfinite = isInfiniteWorld(level->getLevelData()->getXZSize());
#endif
// for (int x = xc - radius; x <= xc + radius; x++) // for (int x = xc - radius; x <= xc + radius; x++)
// for (int z = zc - radius; z <= zc + radius; z++) { // for (int z = zc - radius; z <= zc + radius; z++) {
// getChunk(x, z, true).add(player); // getChunk(x, z, true).add(player);
@ -598,6 +603,9 @@ void PlayerChunkMap::add(shared_ptr<ServerPlayer> player)
int dz = 0; int dz = 0;
// Origin // Origin
#ifdef _LARGE_WORLDS
if (isInfinite || (xc >= -half && xc < half && zc >= -half && zc < half))
#endif
getChunk(xc, zc, true)->add(player, false); getChunk(xc, zc, true)->add(player, false);
// 4J Added so we send an area packet rather than one visibility packet per chunk // 4J Added so we send an area packet rather than one visibility packet per chunk
@ -625,6 +633,9 @@ void PlayerChunkMap::add(shared_ptr<ServerPlayer> player)
if( targetZ > maxZ ) maxZ = targetZ; if( targetZ > maxZ ) maxZ = targetZ;
if( targetZ < minZ ) minZ = targetZ; if( targetZ < minZ ) minZ = targetZ;
#ifdef _LARGE_WORLDS
if (isInfinite || (targetX >= -half && targetX < half && targetZ >= -half && targetZ < half))
#endif
getChunk(targetX, targetZ, true)->add(player, false); getChunk(targetX, targetZ, true)->add(player, false);
} }
} }
@ -645,10 +656,24 @@ void PlayerChunkMap::add(shared_ptr<ServerPlayer> player)
if( targetZ > maxZ ) maxZ = targetZ; if( targetZ > maxZ ) maxZ = targetZ;
if( targetZ < minZ ) minZ = targetZ; if( targetZ < minZ ) minZ = targetZ;
#ifdef _LARGE_WORLDS
if (isInfinite || (targetX >= -half && targetX < half && targetZ >= -half && targetZ < half))
#endif
getChunk(targetX, targetZ, true)->add(player, false); getChunk(targetX, targetZ, true)->add(player, false);
} }
// CraftBukkit end // CraftBukkit end
#ifdef _LARGE_WORLDS
// Clamp visibility area to world bounds for finite worlds
if (!isInfinite)
{
if (minX < -half) minX = -half;
if (maxX >= half) maxX = half - 1;
if (minZ < -half) minZ = -half;
if (maxZ >= half) maxZ = half - 1;
}
#endif
player->connection->send( shared_ptr<ChunkVisibilityAreaPacket>( new ChunkVisibilityAreaPacket(minX, maxX, minZ, maxZ) ) ); player->connection->send( shared_ptr<ChunkVisibilityAreaPacket>( new ChunkVisibilityAreaPacket(minX, maxX, minZ, maxZ) ) );
#ifdef _LARGE_WORLDS #ifdef _LARGE_WORLDS
@ -719,12 +744,20 @@ void PlayerChunkMap::move(shared_ptr<ServerPlayer> player)
int zd = zc - last_zc; int zd = zc - last_zc;
if (xd == 0 && zd == 0) return; if (xd == 0 && zd == 0) return;
#ifdef _LARGE_WORLDS
int half = level->getLevelData()->getXZSize() / 2;
bool isInfinite = isInfiniteWorld(level->getLevelData()->getXZSize());
#endif
for (int x = xc - radius; x <= xc + radius; x++) for (int x = xc - radius; x <= xc + radius; x++)
for (int z = zc - radius; z <= zc + radius; z++) for (int z = zc - radius; z <= zc + radius; z++)
{ {
if (!chunkInRange(x, z, last_xc, last_zc)) if (!chunkInRange(x, z, last_xc, last_zc))
{ {
// 4J - changed from separate getChunk & add so we can wrap these operations up and queue // 4J - changed from separate getChunk & add so we can wrap these operations up and queue
#ifdef _LARGE_WORLDS
if (isInfinite || (x >= -half && x < half && z >= -half && z < half))
#endif
getChunkAndAddPlayer(x, z, player); getChunkAndAddPlayer(x, z, player);
} }
@ -772,6 +805,11 @@ void PlayerChunkMap::setRadius(int newRadius)
{ {
if( radius != newRadius ) if( radius != newRadius )
{ {
#ifdef _LARGE_WORLDS
int half = level->getLevelData()->getXZSize() / 2;
bool isInfinite = isInfiniteWorld(level->getLevelData()->getXZSize());
#endif
PlayerList* players = level->getServer()->getPlayerList(); PlayerList* players = level->getServer()->getPlayerList();
for( int i = 0;i < players->players.size();i += 1 ) for( int i = 0;i < players->players.size();i += 1 )
{ {
@ -787,6 +825,9 @@ void PlayerChunkMap::setRadius(int newRadius)
// check if this chunk is outside the old radius area // check if this chunk is outside the old radius area
if ( x < xc - radius || x > xc + radius || z < zc - radius || z > zc + radius ) if ( x < xc - radius || x > xc + radius || z < zc - radius || z > zc + radius )
{ {
#ifdef _LARGE_WORLDS
if (isInfinite || (x >= -half && x < half && z >= -half && z < half))
#endif
getChunkAndAddPlayer(x, z, player); getChunkAndAddPlayer(x, z, player);
} }
} }

View file

@ -24,6 +24,9 @@ ServerChunkCache::ServerChunkCache(ServerLevel *level, ChunkStorage *storage, Ch
// For infinite worlds, m_XZSize is no longer used for cache sizing. // For infinite worlds, m_XZSize is no longer used for cache sizing.
// Keep it at a large value so code that reads it (e.g. dimension getXZSize) still works. // Keep it at a large value so code that reads it (e.g. dimension getXZSize) still works.
this->m_XZSize = source->m_XZSize; this->m_XZSize = source->m_XZSize;
#ifdef _LARGE_WORLDS
this->m_isInfinite = isInfiniteWorld(this->m_XZSize);
#endif
InitializeCriticalSectionAndSpinCount(&m_csLoadCreate,4000); InitializeCriticalSectionAndSpinCount(&m_csLoadCreate,4000);
} }
@ -48,7 +51,15 @@ ServerChunkCache::~ServerChunkCache()
bool ServerChunkCache::hasChunk(int x, int z) bool ServerChunkCache::hasChunk(int x, int z)
{ {
// Infinite worlds: any coordinate is valid; check if chunk is loaded #ifdef _LARGE_WORLDS
// For finite worlds, out-of-bounds coordinates are treated as "exists" (sea/empty edge)
if (!m_isInfinite)
{
int half = m_XZSize / 2;
if (x < -half || x >= half || z < -half || z >= half) return true;
}
#endif
// Check if chunk is loaded in the map
EnterCriticalSection(&m_csLoadCreate); EnterCriticalSection(&m_csLoadCreate);
auto it = m_chunkMap.find(chunkKey(x, z)); auto it = m_chunkMap.find(chunkKey(x, z));
bool result = (it != m_chunkMap.end() && it->second != NULL); bool result = (it != m_chunkMap.end() && it->second != NULL);
@ -91,6 +102,15 @@ LevelChunk *ServerChunkCache::create(int x, int z)
LevelChunk *ServerChunkCache::create(int x, int z, bool asyncPostProcess) // 4J - added extra parameter LevelChunk *ServerChunkCache::create(int x, int z, bool asyncPostProcess) // 4J - added extra parameter
{ {
#ifdef _LARGE_WORLDS
// For finite worlds, refuse to create chunks outside the world boundary
if (!m_isInfinite)
{
int half = m_XZSize / 2;
if (x < -half || x >= half || z < -half || z >= half) return emptyChunk;
}
#endif
int64_t key = chunkKey(x, z); int64_t key = chunkKey(x, z);
EnterCriticalSection(&m_csLoadCreate); EnterCriticalSection(&m_csLoadCreate);
@ -130,6 +150,17 @@ LevelChunk *ServerChunkCache::create(int x, int z, bool asyncPostProcess) // 4J
// they are in fail ServerChunkCache::hasChunk. // they are in fail ServerChunkCache::hasChunk.
source->lightChunk(chunk); source->lightChunk(chunk);
// Prevent cascading chunk creation: when isFindingSpawn or autoCreate is true,
// getChunk() auto-creates missing chunks. Post-processing and updatePostProcessFlags
// call getChunk() for neighbors, which would recursively create() those neighbors,
// whose post-processing creates more neighbors, flood-filling the entire world.
// Temporarily disable auto-creation so these internal calls return emptyChunk
// for missing neighbors instead of cascading.
bool savedFindingSpawn = level->isFindingSpawn;
bool savedAutoCreate = autoCreate;
level->isFindingSpawn = false;
autoCreate = false;
updatePostProcessFlags( x, z ); updatePostProcessFlags( x, z );
m_loadedChunkList.push_back(chunk); m_loadedChunkList.push_back(chunk);
@ -155,6 +186,10 @@ LevelChunk *ServerChunkCache::create(int x, int z, bool asyncPostProcess) // 4J
if( hasChunk( x, z - 1) && hasChunk( x , z - 2 ) && hasChunk( x - 1, z - 1 ) && hasChunk( x + 1, z - 1 ) ) chunk->checkChests( this, x, z - 1); if( hasChunk( x, z - 1) && hasChunk( x , z - 2 ) && hasChunk( x - 1, z - 1 ) && hasChunk( x + 1, z - 1 ) ) chunk->checkChests( this, x, z - 1);
if( hasChunk( x - 1, z ) && hasChunk( x + 1, z ) && hasChunk ( x, z - 1 ) && hasChunk( x, z + 1 ) ) chunk->checkChests( this, x, z ); if( hasChunk( x - 1, z ) && hasChunk( x + 1, z ) && hasChunk ( x, z - 1 ) && hasChunk( x, z + 1 ) ) chunk->checkChests( this, x, z );
// Restore auto-creation flags
level->isFindingSpawn = savedFindingSpawn;
autoCreate = savedAutoCreate;
LeaveCriticalSection(&m_csLoadCreate); LeaveCriticalSection(&m_csLoadCreate);
#ifdef __PS3__ #ifdef __PS3__
@ -168,6 +203,15 @@ LevelChunk *ServerChunkCache::create(int x, int z, bool asyncPostProcess) // 4J
// This is used when sharing server chunk data on the main thread // This is used when sharing server chunk data on the main thread
LevelChunk *ServerChunkCache::getChunk(int x, int z) LevelChunk *ServerChunkCache::getChunk(int x, int z)
{ {
#ifdef _LARGE_WORLDS
// For finite worlds, out-of-bounds coordinates return the empty chunk
if (!m_isInfinite)
{
int half = m_XZSize / 2;
if (x < -half || x >= half || z < -half || z >= half) return emptyChunk;
}
#endif
EnterCriticalSection(&m_csLoadCreate); EnterCriticalSection(&m_csLoadCreate);
auto it = m_chunkMap.find(chunkKey(x, z)); auto it = m_chunkMap.find(chunkKey(x, z));
LevelChunk *chunk = (it != m_chunkMap.end() && it->second != NULL) ? it->second : NULL; LevelChunk *chunk = (it != m_chunkMap.end() && it->second != NULL) ? it->second : NULL;
@ -377,6 +421,15 @@ void ServerChunkCache::flagPostProcessComplete(short flag, int x, int z)
void ServerChunkCache::postProcess(ChunkSource *parent, int x, int z ) void ServerChunkCache::postProcess(ChunkSource *parent, int x, int z )
{ {
#ifdef _LARGE_WORLDS
// Don't run decoration/structures at out-of-bounds coordinates
if (!m_isInfinite)
{
int half = m_XZSize / 2;
if (x < -half || x >= half || z < -half || z >= half) return;
}
#endif
LevelChunk *chunk = getChunk(x, z); LevelChunk *chunk = getChunk(x, z);
if ( (chunk->terrainPopulated & LevelChunk::sTerrainPopulatedFromHere) == 0 ) if ( (chunk->terrainPopulated & LevelChunk::sTerrainPopulatedFromHere) == 0 )
{ {
@ -393,7 +446,38 @@ void ServerChunkCache::postProcess(ChunkSource *parent, int x, int z )
// chunks exist as that's determined before post-processing can even run // chunks exist as that's determined before post-processing can even run
chunk->terrainPopulated |= LevelChunk::sTerrainPopulatedFromHere; chunk->terrainPopulated |= LevelChunk::sTerrainPopulatedFromHere;
// Infinite worlds: no fixed world edges, so no edge-chunk special-casing needed. #ifdef _LARGE_WORLDS
// For finite worlds, edge chunks have missing neighbours that will never post-process,
// so fill in the appropriate flags. For infinite worlds, no edges exist.
if (!m_isInfinite)
{
int half = m_XZSize / 2;
if(x == -half) // Furthest west
{
chunk->terrainPopulated |= LevelChunk::sTerrainPopulatedFromW;
chunk->terrainPopulated |= LevelChunk::sTerrainPopulatedFromSW;
chunk->terrainPopulated |= LevelChunk::sTerrainPopulatedFromNW;
}
if(x == (half - 1)) // Furthest east
{
chunk->terrainPopulated |= LevelChunk::sTerrainPopulatedFromE;
chunk->terrainPopulated |= LevelChunk::sTerrainPopulatedFromSE;
chunk->terrainPopulated |= LevelChunk::sTerrainPopulatedFromNE;
}
if(z == -half) // Furthest south
{
chunk->terrainPopulated |= LevelChunk::sTerrainPopulatedFromS;
chunk->terrainPopulated |= LevelChunk::sTerrainPopulatedFromSW;
chunk->terrainPopulated |= LevelChunk::sTerrainPopulatedFromSE;
}
if(z == (half - 1)) // Furthest north
{
chunk->terrainPopulated |= LevelChunk::sTerrainPopulatedFromN;
chunk->terrainPopulated |= LevelChunk::sTerrainPopulatedFromNW;
chunk->terrainPopulated |= LevelChunk::sTerrainPopulatedFromNE;
}
}
#endif
// Set flags for post-processing being complete for neighbouring chunks. This also performs actions if this post-processing completes // Set flags for post-processing being complete for neighbouring chunks. This also performs actions if this post-processing completes
// a full set of post-processing flags for one of these neighbours. // a full set of post-processing flags for one of these neighbours.

View file

@ -34,6 +34,7 @@ private:
ServerLevel *level; ServerLevel *level;
#ifdef _LARGE_WORLDS #ifdef _LARGE_WORLDS
bool m_isInfinite; // true when m_XZSize >= LEVEL_MAX_WIDTH (infinite world)
deque<LevelChunk *> m_toDrop; deque<LevelChunk *> m_toDrop;
#endif #endif

View file

@ -756,8 +756,22 @@ void ServerLevel::setInitialSpawn(LevelSettings *levelSettings)
int xSpawn = 0; // (Level.MAX_LEVEL_SIZE - 100) * 0; int xSpawn = 0; // (Level.MAX_LEVEL_SIZE - 100) * 0;
int ySpawn = dimension->getSpawnYPosition(); int ySpawn = dimension->getSpawnYPosition();
int zSpawn = 0; // (Level.MAX_LEVEL_SIZE - 100) * 0; int zSpawn = 0; // (Level.MAX_LEVEL_SIZE - 100) * 0;
#ifdef _LARGE_WORLDS
int minXZ, maxXZ;
if (isInfiniteWorld(dimension->getXZSize()))
{
minXZ = -Level::MAX_LEVEL_SIZE;
maxXZ = Level::MAX_LEVEL_SIZE - 1;
}
else
{
minXZ = -(dimension->getXZSize() * 16) / 2;
maxXZ = (dimension->getXZSize() * 16) / 2 - 1;
}
#else
int minXZ = -Level::MAX_LEVEL_SIZE; int minXZ = -Level::MAX_LEVEL_SIZE;
int maxXZ = Level::MAX_LEVEL_SIZE - 1; int maxXZ = Level::MAX_LEVEL_SIZE - 1;
#endif
if (findBiome != NULL) if (findBiome != NULL)
{ {

View file

@ -18,6 +18,7 @@
#include "..\Minecraft.World\net.minecraft.world.entity.projectile.h" #include "..\Minecraft.World\net.minecraft.world.entity.projectile.h"
#include "..\Minecraft.World\net.minecraft.world.entity.h" #include "..\Minecraft.World\net.minecraft.world.entity.h"
#include "..\Minecraft.World\net.minecraft.world.item.h" #include "..\Minecraft.World\net.minecraft.world.item.h"
#include "..\Minecraft.World\ChunkSource.h"
#include "..\Minecraft.World\net.minecraft.world.item.trading.h" #include "..\Minecraft.World\net.minecraft.world.item.trading.h"
#include "..\Minecraft.World\net.minecraft.world.entity.item.h" #include "..\Minecraft.World\net.minecraft.world.entity.item.h"
#include "..\Minecraft.World\net.minecraft.world.level.tile.entity.h" #include "..\Minecraft.World\net.minecraft.world.level.tile.entity.h"
@ -65,8 +66,22 @@ ServerPlayer::ServerPlayer(MinecraftServer *server, Level *level, const wstring&
int attemptCount = 0; int attemptCount = 0;
int xx2, yy2, zz2; int xx2, yy2, zz2;
#ifdef _LARGE_WORLDS
int minXZ, maxXZ;
if (isInfiniteWorld(level->getLevelData()->getXZSize()))
{
minXZ = -Level::MAX_LEVEL_SIZE;
maxXZ = Level::MAX_LEVEL_SIZE - 1;
}
else
{
minXZ = -(level->getLevelData()->getXZSize() * 16) / 2;
maxXZ = (level->getLevelData()->getXZSize() * 16) / 2 - 1;
}
#else
int minXZ = -Level::MAX_LEVEL_SIZE; int minXZ = -Level::MAX_LEVEL_SIZE;
int maxXZ = Level::MAX_LEVEL_SIZE - 1; int maxXZ = Level::MAX_LEVEL_SIZE - 1;
#endif
bool playerNear = false; bool playerNear = false;
do do
@ -445,7 +460,7 @@ void ServerPlayer::doChunkSendingTick(bool dontDelayChunks)
for (unsigned int i = 0; i < tes->size(); i++) for (unsigned int i = 0; i < tes->size(); i++)
{ {
// 4J Stu - Added delay param to ensure that these arrive after the BRUPs from above // 4J Stu - Added delay param to ensure that these arrive after the BRUPs from above
// Fix for #9169 - ART : Sign text is replaced with the words “Awaiting approval”. // Fix for #9169 - ART : Sign text is replaced with the words <EFBFBD>Awaiting approval<61>.
broadcast(tes->at(i), !connection->isLocal() && !dontDelayChunks); broadcast(tes->at(i), !connection->isLocal() && !dontDelayChunks);
} }
delete tes; delete tes;

View file

@ -258,6 +258,9 @@ If you try to save while using the trial version, you will be given the option t
<data name="IDS_WORLD_SIZE_TITLE_LARGE"> <data name="IDS_WORLD_SIZE_TITLE_LARGE">
<value>Large</value> <value>Large</value>
</data> </data>
<data name="IDS_WORLD_SIZE_TITLE_INFINITE">
<value>Infinite</value>
</data>
<data name="IDS_WORLD_SIZE_TITLE_CLASSIC"> <data name="IDS_WORLD_SIZE_TITLE_CLASSIC">
<value>Classic</value> <value>Classic</value>
</data> </data>

Some files were not shown because too many files have changed in this diff Show more