the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#include "stdafx.h"
2#include "CreateWorldScreen.h"
3#include "EditBox.h"
4#include "Button.h"
5#include "SurvivalMode.h"
6#include "..\Minecraft.World\net.minecraft.locale.h"
7#include "..\Minecraft.World\StringHelpers.h"
8#include "..\Minecraft.World\net.minecraft.world.level.h"
9#include "..\Minecraft.World\net.minecraft.world.level.storage.h"
10#include "..\Minecraft.World\SharedConstants.h"
11#include "..\Minecraft.World\Random.h"
12
13CreateWorldScreen::CreateWorldScreen(Screen *lastScreen)
14{
15 done = false; // 4J added
16 this->lastScreen = lastScreen;
17}
18
19void CreateWorldScreen::tick()
20{
21 nameEdit->tick();
22 seedEdit->tick();
23
24 // 4J - debug code - to be removed
25 static int count = 0;
26 if(count++ == 100 ) buttonClicked(buttons[0]);
27}
28
29void CreateWorldScreen::init()
30{
31 Language *language = Language::getInstance();
32
33 Keyboard::enableRepeatEvents(true);
34 buttons.clear();
35 buttons.push_back(new Button(0, width / 2 - 100, height / 4 + 24 * 4 + 12, language->getElement(L"selectWorld.create")));
36 buttons.push_back(new Button(1, width / 2 - 100, height / 4 + 24 * 5 + 12, language->getElement(L"gui.cancel")));
37
38 nameEdit = new EditBox(this, font, width / 2 - 100, 60, 200, 20, language->getElement(L"testWorld")); // 4J - test - should be L"selectWorld.newWorld"
39 nameEdit->inFocus = true;
40 nameEdit->setMaxLength(32);
41
42 seedEdit = new EditBox(this, font, width / 2 - 100, 116, 200, 20, L"");
43
44 updateResultFolder();
45}
46
47void CreateWorldScreen::updateResultFolder()
48{
49 resultFolder = trimString(nameEdit->getValue());
50
51 for( int i = 0; i < SharedConstants::ILLEGAL_FILE_CHARACTERS_LENGTH; i++ )
52 {
53 size_t pos;
54 while( (pos = resultFolder.find(SharedConstants::ILLEGAL_FILE_CHARACTERS[i])) != wstring::npos)
55 {
56 resultFolder[pos] = L'_';
57 }
58 }
59
60 if (resultFolder.length()==0)
61 {
62 resultFolder = L"World";
63 }
64 resultFolder = CreateWorldScreen::findAvailableFolderName(minecraft->getLevelSource(), resultFolder);
65
66}
67
68wstring CreateWorldScreen::findAvailableFolderName(LevelStorageSource *levelSource, const wstring& folder)
69{
70 wstring folder2 = folder; // 4J - copy input as it is const
71
72#if 0
73 while (levelSource->getDataTagFor(folder2) != NULL)
74 {
75 folder2 = folder2 + L"-";
76 }
77#endif
78 return folder2;
79}
80
81void CreateWorldScreen::removed()
82{
83 Keyboard::enableRepeatEvents(false);
84}
85
86void CreateWorldScreen::buttonClicked(Button *button)
87{
88 if (!button->active) return;
89 if (button->id == 1)
90 {
91 minecraft->setScreen(lastScreen);
92 }
93 else if (button->id == 0)
94 {
95 // note: code copied from SelectWorldScreen
96 minecraft->setScreen(NULL);
97 if (done) return;
98 done = true;
99
100 __int64 seedValue = (new Random())->nextLong();
101 wstring seedString = seedEdit->getValue();
102
103 if (seedString.length() != 0)
104 {
105 // try to convert it to a long first
106// try { // 4J - removed try/catch
107 __int64 value = _fromString<__int64>(seedString);
108 if (value != 0)
109 {
110 seedValue = value;
111 }
112 // } catch (NumberFormatException e) {
113 // // not a number, fetch hash value
114 // seedValue = seedString.hashCode();
115 // }
116 }
117
118// 4J Stu - This screen is not used, so removing this to stop the build failing
119#if 0
120 minecraft->gameMode = new SurvivalMode(minecraft);
121 minecraft->selectLevel(resultFolder, nameEdit->getValue(), seedValue);
122 minecraft->setScreen(NULL);
123#endif
124 }
125
126}
127
128void CreateWorldScreen::keyPressed(wchar_t ch, int eventKey)
129{
130 if (nameEdit->inFocus) nameEdit->keyPressed(ch, eventKey);
131 else seedEdit->keyPressed(ch, eventKey);
132
133 if (ch == 13)
134 {
135 buttonClicked(buttons[0]);
136 }
137 buttons[0]->active = nameEdit->getValue().length() > 0;
138
139 updateResultFolder();
140}
141
142void CreateWorldScreen::mouseClicked(int x, int y, int buttonNum)
143{
144 Screen::mouseClicked(x, y, buttonNum);
145
146 nameEdit->mouseClicked(x, y, buttonNum);
147 seedEdit->mouseClicked(x, y, buttonNum);
148}
149
150void CreateWorldScreen::render(int xm, int ym, float a)
151{
152 Language *language = Language::getInstance();
153
154 // fill(0, 0, width, height, 0x40000000);
155 renderBackground();
156
157 drawCenteredString(font, language->getElement(L"selectWorld.create"), width / 2, height / 4 - 60 + 20, 0xffffff);
158 drawString(font, language->getElement(L"selectWorld.enterName"), width / 2 - 100, 47, 0xa0a0a0);
159 drawString(font, language->getElement(L"selectWorld.resultFolder") + L" " + resultFolder, width / 2 - 100, 85, 0xa0a0a0);
160
161 drawString(font, language->getElement(L"selectWorld.enterSeed"), width / 2 - 100, 104, 0xa0a0a0);
162 drawString(font, language->getElement(L"selectWorld.seedInfo"), width / 2 - 100, 140, 0xa0a0a0);
163
164 nameEdit->render();
165 seedEdit->render();
166
167 Screen::render(xm, ym, a);
168
169}
170
171void CreateWorldScreen::tabPressed()
172{
173 if (nameEdit->inFocus)
174 {
175 nameEdit->focus(false);
176 seedEdit->focus(true);
177 }
178 else
179 {
180 nameEdit->focus(true);
181 seedEdit->focus(false);
182 }
183}