aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/CreateWorldScreen.cpp
diff options
context:
space:
mode:
authordaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
committerdaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
commitb691c43c44ff180d10e7d4a9afc83b98551ff586 (patch)
tree3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.Client/CreateWorldScreen.cpp
parentdef8cb415354ac390b7e89052a50605285f1aca9 (diff)
Initial commit
Diffstat (limited to 'Minecraft.Client/CreateWorldScreen.cpp')
-rw-r--r--Minecraft.Client/CreateWorldScreen.cpp183
1 files changed, 183 insertions, 0 deletions
diff --git a/Minecraft.Client/CreateWorldScreen.cpp b/Minecraft.Client/CreateWorldScreen.cpp
new file mode 100644
index 00000000..b9856c7e
--- /dev/null
+++ b/Minecraft.Client/CreateWorldScreen.cpp
@@ -0,0 +1,183 @@
+#include "stdafx.h"
+#include "CreateWorldScreen.h"
+#include "EditBox.h"
+#include "Button.h"
+#include "SurvivalMode.h"
+#include "..\Minecraft.World\net.minecraft.locale.h"
+#include "..\Minecraft.World\StringHelpers.h"
+#include "..\Minecraft.World\net.minecraft.world.level.h"
+#include "..\Minecraft.World\net.minecraft.world.level.storage.h"
+#include "..\Minecraft.World\SharedConstants.h"
+#include "..\Minecraft.World\Random.h"
+
+CreateWorldScreen::CreateWorldScreen(Screen *lastScreen)
+{
+ done = false; // 4J added
+ this->lastScreen = lastScreen;
+}
+
+void CreateWorldScreen::tick()
+{
+ nameEdit->tick();
+ seedEdit->tick();
+
+ // 4J - debug code - to be removed
+ static int count = 0;
+ if(count++ == 100 ) buttonClicked(buttons[0]);
+}
+
+void CreateWorldScreen::init()
+{
+ Language *language = Language::getInstance();
+
+ Keyboard::enableRepeatEvents(true);
+ buttons.clear();
+ buttons.push_back(new Button(0, width / 2 - 100, height / 4 + 24 * 4 + 12, language->getElement(L"selectWorld.create")));
+ buttons.push_back(new Button(1, width / 2 - 100, height / 4 + 24 * 5 + 12, language->getElement(L"gui.cancel")));
+
+ nameEdit = new EditBox(this, font, width / 2 - 100, 60, 200, 20, language->getElement(L"testWorld")); // 4J - test - should be L"selectWorld.newWorld"
+ nameEdit->inFocus = true;
+ nameEdit->setMaxLength(32);
+
+ seedEdit = new EditBox(this, font, width / 2 - 100, 116, 200, 20, L"");
+
+ updateResultFolder();
+}
+
+void CreateWorldScreen::updateResultFolder()
+{
+ resultFolder = trimString(nameEdit->getValue());
+
+ for( int i = 0; i < SharedConstants::ILLEGAL_FILE_CHARACTERS_LENGTH; i++ )
+ {
+ size_t pos;
+ while( (pos = resultFolder.find(SharedConstants::ILLEGAL_FILE_CHARACTERS[i])) != wstring::npos)
+ {
+ resultFolder[pos] = L'_';
+ }
+ }
+
+ if (resultFolder.length()==0)
+ {
+ resultFolder = L"World";
+ }
+ resultFolder = CreateWorldScreen::findAvailableFolderName(minecraft->getLevelSource(), resultFolder);
+
+}
+
+wstring CreateWorldScreen::findAvailableFolderName(LevelStorageSource *levelSource, const wstring& folder)
+{
+ wstring folder2 = folder; // 4J - copy input as it is const
+
+#if 0
+ while (levelSource->getDataTagFor(folder2) != NULL)
+ {
+ folder2 = folder2 + L"-";
+ }
+#endif
+ return folder2;
+}
+
+void CreateWorldScreen::removed()
+{
+ Keyboard::enableRepeatEvents(false);
+}
+
+void CreateWorldScreen::buttonClicked(Button *button)
+{
+ if (!button->active) return;
+ if (button->id == 1)
+ {
+ minecraft->setScreen(lastScreen);
+ }
+ else if (button->id == 0)
+ {
+ // note: code copied from SelectWorldScreen
+ minecraft->setScreen(NULL);
+ if (done) return;
+ done = true;
+
+ __int64 seedValue = (new Random())->nextLong();
+ wstring seedString = seedEdit->getValue();
+
+ if (seedString.length() != 0)
+ {
+ // try to convert it to a long first
+// try { // 4J - removed try/catch
+ __int64 value = _fromString<__int64>(seedString);
+ if (value != 0)
+ {
+ seedValue = value;
+ }
+ // } catch (NumberFormatException e) {
+ // // not a number, fetch hash value
+ // seedValue = seedString.hashCode();
+ // }
+ }
+
+// 4J Stu - This screen is not used, so removing this to stop the build failing
+#if 0
+ minecraft->gameMode = new SurvivalMode(minecraft);
+ minecraft->selectLevel(resultFolder, nameEdit->getValue(), seedValue);
+ minecraft->setScreen(NULL);
+#endif
+ }
+
+}
+
+void CreateWorldScreen::keyPressed(wchar_t ch, int eventKey)
+{
+ if (nameEdit->inFocus) nameEdit->keyPressed(ch, eventKey);
+ else seedEdit->keyPressed(ch, eventKey);
+
+ if (ch == 13)
+ {
+ buttonClicked(buttons[0]);
+ }
+ buttons[0]->active = nameEdit->getValue().length() > 0;
+
+ updateResultFolder();
+}
+
+void CreateWorldScreen::mouseClicked(int x, int y, int buttonNum)
+{
+ Screen::mouseClicked(x, y, buttonNum);
+
+ nameEdit->mouseClicked(x, y, buttonNum);
+ seedEdit->mouseClicked(x, y, buttonNum);
+}
+
+void CreateWorldScreen::render(int xm, int ym, float a)
+{
+ Language *language = Language::getInstance();
+
+ // fill(0, 0, width, height, 0x40000000);
+ renderBackground();
+
+ drawCenteredString(font, language->getElement(L"selectWorld.create"), width / 2, height / 4 - 60 + 20, 0xffffff);
+ drawString(font, language->getElement(L"selectWorld.enterName"), width / 2 - 100, 47, 0xa0a0a0);
+ drawString(font, language->getElement(L"selectWorld.resultFolder") + L" " + resultFolder, width / 2 - 100, 85, 0xa0a0a0);
+
+ drawString(font, language->getElement(L"selectWorld.enterSeed"), width / 2 - 100, 104, 0xa0a0a0);
+ drawString(font, language->getElement(L"selectWorld.seedInfo"), width / 2 - 100, 140, 0xa0a0a0);
+
+ nameEdit->render();
+ seedEdit->render();
+
+ Screen::render(xm, ym, a);
+
+}
+
+void CreateWorldScreen::tabPressed()
+{
+ if (nameEdit->inFocus)
+ {
+ nameEdit->focus(false);
+ seedEdit->focus(true);
+ }
+ else
+ {
+ nameEdit->focus(true);
+ seedEdit->focus(false);
+ }
+} \ No newline at end of file