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 "..\..\..\Minecraft.World\StringHelpers.h"
3#include "XUI_DebugSchematicCreator.h"
4#include "..\..\..\Minecraft.World\ChunkSource.h"
5#include "..\..\..\Minecraft.World\net.minecraft.world.level.h"
6
7#ifndef _CONTENT_PACKAGE
8HRESULT CScene_DebugSchematicCreator::OnInit( XUIMessageInit *pInitData, BOOL &bHandled )
9{
10 MapChildControls();
11
12 m_startX .SetKeyboardType(C_4JInput::EKeyboardMode_Numeric);
13 m_startY .SetKeyboardType(C_4JInput::EKeyboardMode_Numeric);
14 m_startZ .SetKeyboardType(C_4JInput::EKeyboardMode_Numeric);
15 m_endX .SetKeyboardType(C_4JInput::EKeyboardMode_Numeric);
16 m_endY .SetKeyboardType(C_4JInput::EKeyboardMode_Numeric);
17 m_endZ .SetKeyboardType(C_4JInput::EKeyboardMode_Numeric);
18
19 m_data = new ConsoleSchematicFile::XboxSchematicInitParam();
20
21 return S_OK;
22}
23
24HRESULT CScene_DebugSchematicCreator::OnNotifyPressEx(HXUIOBJ hObjPressed, XUINotifyPress* pNotifyPressData, BOOL& rfHandled)
25{
26 // This assumes all buttons can only be pressed with the A button
27 ui.AnimateKeyPress(pNotifyPressData->UserIndex, VK_PAD_A);
28
29 if ( hObjPressed == m_createButton )
30 {
31 // We want the start to be even
32 if(m_data->startX > 0 && m_data->startX%2 != 0)
33 m_data->startX-=1;
34 else if(m_data->startX < 0 && m_data->startX%2 !=0)
35 m_data->startX-=1;
36 if(m_data->startY < 0) m_data->startY = 0;
37 else if(m_data->startY > 0 && m_data->startY%2 != 0)
38 m_data->startY-=1;
39 if(m_data->startZ > 0 && m_data->startZ%2 != 0)
40 m_data->startZ-=1;
41 else if(m_data->startZ < 0 && m_data->startZ%2 !=0)
42 m_data->startZ-=1;
43
44 // We want the end to be odd to have a total size that is even
45 if(m_data->endX > 0 && m_data->endX%2 == 0)
46 m_data->endX+=1;
47 else if(m_data->endX < 0 && m_data->endX%2 ==0)
48 m_data->endX+=1;
49 if(m_data->endY > Level::maxBuildHeight)
50 m_data->endY = Level::maxBuildHeight;
51 else if(m_data->endY > 0 && m_data->endY%2 == 0)
52 m_data->endY+=1;
53 else if(m_data->endY < 0 && m_data->endY%2 ==0)
54 m_data->endY+=1;
55 if(m_data->endZ > 0 && m_data->endZ%2 == 0)
56 m_data->endZ+=1;
57 else if(m_data->endZ < 0 && m_data->endZ%2 ==0)
58 m_data->endZ+=1;
59
60 wstring value = m_name.GetText();
61 if(!value.empty())
62 {
63 swprintf(m_data->name,64,L"%ls", value.c_str());
64 }
65 else
66 {
67 swprintf(m_data->name,64,L"schematic");
68 }
69
70 m_data->bSaveMobs = m_saveMobs.IsChecked();
71
72#ifdef _XBOX
73 if (m_useXboxCompr.IsChecked())
74 m_data->compressionType = Compression::eCompressionType_LZXRLE;
75 else
76#endif
77 m_data->compressionType = Compression::eCompressionType_RLE;
78
79 app.SetXuiServerAction(ProfileManager.GetPrimaryPad(), eXuiServerAction_ExportSchematic, (void *)m_data);
80
81 NavigateBack();
82 rfHandled = TRUE;
83 }
84 return S_OK;
85}
86
87HRESULT CScene_DebugSchematicCreator::OnKeyDown(XUIMessageInput* pInputData, BOOL& rfHandled)
88{
89 ui.AnimateKeyPress(pInputData->UserIndex, pInputData->dwKeyCode);
90
91 switch(pInputData->dwKeyCode)
92 {
93
94 case VK_PAD_B:
95 case VK_PAD_START:
96 case VK_PAD_BACK:
97 NavigateBack();
98
99 rfHandled = TRUE;
100
101 break;
102
103 }
104
105 return S_OK;
106}
107
108HRESULT CScene_DebugSchematicCreator::OnNotifyValueChanged( HXUIOBJ hObjSource, XUINotifyValueChanged *pNotifyValueChangedData, BOOL &bHandled)
109{
110 if(hObjSource == m_startX)
111 {
112 int iVal = 0;
113 wstring value = m_startX.GetText();
114 if(!value.empty()) iVal = _fromString<int>( value );
115
116 if( iVal >= (LEVEL_MAX_WIDTH * -16) || iVal < (LEVEL_MAX_WIDTH * 16))
117 {
118 m_data->startX = iVal;
119 }
120 }
121 else if(hObjSource == m_startY)
122 {
123 int iVal = 0;
124 wstring value = m_startY.GetText();
125 if(!value.empty()) iVal = _fromString<int>( value );
126
127 if( iVal >= (LEVEL_MAX_WIDTH * -16) || iVal < (LEVEL_MAX_WIDTH * 16))
128 {
129 m_data->startY = iVal;
130 }
131 }
132 else if(hObjSource == m_startZ)
133 {
134 int iVal = 0;
135 wstring value = m_startZ.GetText();
136 if(!value.empty()) iVal = _fromString<int>( value );
137
138 if( iVal >= (LEVEL_MAX_WIDTH * -16) || iVal < (LEVEL_MAX_WIDTH * 16))
139 {
140 m_data->startZ = iVal;
141 }
142 }
143 else if(hObjSource == m_endX)
144 {
145 int iVal = 0;
146 wstring value = m_endX.GetText();
147 if(!value.empty()) iVal = _fromString<int>( value );
148
149 if( iVal >= (LEVEL_MAX_WIDTH * -16) || iVal < (LEVEL_MAX_WIDTH * 16))
150 {
151 m_data->endX = iVal;
152 }
153 }
154 else if(hObjSource == m_endY)
155 {
156 int iVal = 0;
157 wstring value = m_endY.GetText();
158 if(!value.empty()) iVal = _fromString<int>( value );
159
160 if( iVal >= (LEVEL_MAX_WIDTH * -16) || iVal < (LEVEL_MAX_WIDTH * 16))
161 {
162 m_data->endY = iVal;
163 }
164 }
165 else if(hObjSource == m_endZ)
166 {
167 int iVal = 0;
168 wstring value = m_endZ.GetText();
169 if(!value.empty()) iVal = _fromString<int>( value );
170
171 if( iVal >= (LEVEL_MAX_WIDTH * -16) || iVal < (LEVEL_MAX_WIDTH * 16))
172 {
173 m_data->endZ = iVal;
174 }
175 }
176 return S_OK;
177}
178#endif