|
27 | 27 | </div> |
28 | 28 |
|
29 | 29 | <div class="main-wrapper"> |
30 | | - <div class="sidebar"> |
31 | | - <div class="sidebar-title">PATCH NOTES</div> |
| 30 | + <div class="sidebar collapsed" id="main-sidebar"> |
| 31 | + <div class="sidebar-title" onclick="toggleSidebar()"> |
| 32 | + <span id="sidebar-title-text">PATCH NOTES</span> |
| 33 | + <span id="sidebar-toggle-icon" title="Expand Patch Notes">▶</span> |
| 34 | + </div> |
32 | 35 | <div id="updates-list"> |
33 | 36 | <div class="update-item">Loading updates...</div> |
34 | 37 | </div> |
35 | 38 | </div> |
36 | 39 |
|
37 | | - <div class="content-area"> |
38 | | - <div class="relative"> |
39 | | - <img src="minecraftlogo.png" class="mc-logo-img" alt="Minecraft Logo"> |
40 | | - <div id="splash-text" class="splash-text">Splash!</div> |
41 | | - </div> |
42 | | - |
43 | | - <div id="btn-play-main" class="btn-mc btn-play nav-item" onclick="launchGame()" tabindex="0">PLAY</div> |
44 | | - |
45 | | - <div class="version-row"> |
46 | | - <span class="version-label">Version:</span> |
47 | | - <div id="version-select-box" class="version-select-box nav-item" tabindex="0"> |
48 | | - <span id="current-version-display">Loading...</span> |
49 | | - <div class="select-arrow">▼</div> |
50 | | - <select id="version-select" class="hidden-select" onchange="updateSelectedRelease()"> |
51 | | - <option>Loading...</option> |
52 | | - </select> |
| 40 | + <div class="content-area" style="flex-direction: row; align-items: stretch; padding: 0;"> |
| 41 | + |
| 42 | + <!-- Left Side: Main Menu --> |
| 43 | + <div class="menu-column" style="flex: 2; display: flex; flex-direction: column; align-items: center; justify-content: center; position: relative; z-index: 5;"> |
| 44 | + <div class="relative"> |
| 45 | + <img src="minecraftlogo.png" class="mc-logo-img" alt="Minecraft Logo"> |
| 46 | + <div id="splash-text" class="splash-text">Splash!</div> |
| 47 | + </div> |
| 48 | + |
| 49 | + <div id="btn-play-main" class="btn-mc btn-play nav-item" onclick="launchGame()" tabindex="0">PLAY</div> |
| 50 | + |
| 51 | + <div class="version-row"> |
| 52 | + <span class="version-label">Version:</span> |
| 53 | + <div id="version-select-box" class="version-select-box nav-item" tabindex="0"> |
| 54 | + <span id="current-version-display">Loading...</span> |
| 55 | + <div class="select-arrow">▼</div> |
| 56 | + <select id="version-select" class="hidden-select" onchange="updateSelectedRelease()"> |
| 57 | + <option>Loading...</option> |
| 58 | + </select> |
| 59 | + </div> |
| 60 | + <div id="btn-check-update" class="btn-mc btn-mini nav-item" onclick="checkForUpdatesManual()" title="Check for Updates" tabindex="0"> |
| 61 | + <img src="restart.png" alt="Update"> |
| 62 | + </div> |
53 | 63 | </div> |
54 | | - <div id="btn-check-update" class="btn-mc btn-mini nav-item" onclick="checkForUpdatesManual()" title="Check for Updates" tabindex="0"> |
55 | | - <img src="restart.png" alt="Update"> |
| 64 | + |
| 65 | + <div class="flex gap-4 w-[500px] max-w-[90%]"> |
| 66 | + <div class="btn-mc flex-grow nav-item" id="btn-instances" onclick="toggleInstances(true)" tabindex="0" style="font-size: 18px;">INSTANCES</div> |
| 67 | + <div class="btn-mc flex-grow nav-item" id="btn-profile" onclick="toggleProfile(true)" tabindex="0" style="font-size: 18px;">PROFILE</div> |
| 68 | + <div class="btn-mc flex-grow nav-item" id="btn-servers" onclick="toggleServers(true)" tabindex="0" style="font-size: 18px;">SERVERS</div> |
| 69 | + <div class="btn-mc flex-grow nav-item" id="btn-options" onclick="toggleOptions(true)" tabindex="0" style="font-size: 18px;">OPTIONS</div> |
56 | 70 | </div> |
57 | 71 | </div> |
58 | | - |
59 | | - <div class="flex gap-4 w-[500px] max-w-[90%]"> |
60 | | - <div class="btn-mc flex-grow nav-item" id="btn-profile" onclick="toggleProfile(true)" tabindex="0">PROFILE</div> |
61 | | - <div class="btn-mc flex-grow nav-item" id="btn-servers" onclick="toggleServers(true)" tabindex="0">SERVERS</div> |
62 | | - <div class="btn-mc flex-grow nav-item" id="btn-options" onclick="toggleOptions(true)" tabindex="0">OPTIONS</div> |
| 72 | + |
| 73 | + <!-- Right Side: Skin Viewer --> |
| 74 | + <div class="skin-column" style="flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; position: relative; min-width: 300px; padding-right: 0px;"> |
| 75 | + <div id="main-skin-viewer" style="width: 100%; height: 500px; cursor: grab; display: flex; align-items: center; justify-content: center;"></div> |
| 76 | + |
| 77 | + <div class="btn-mc nav-item" onclick="openSkinManager()" style="width: 250px; height: 48px; font-size: 20px; margin-top: -20px; z-index: 10; margin-left: auto; margin-right: auto;" tabindex="0"> |
| 78 | + CHANGE SKIN |
| 79 | + </div> |
63 | 80 | </div> |
64 | 81 |
|
65 | 82 | <div class="progress-container" id="progress-container"> |
|
103 | 120 | </div> |
104 | 121 | </div> |
105 | 122 |
|
| 123 | + <div class="modal-overlay" id="instances-modal"> |
| 124 | + <div class="modal-box" style="max-width: 900px;"> |
| 125 | + <div class="modal-title">GAME INSTANCES</div> |
| 126 | + |
| 127 | + <div id="instances-list-container" class="w-full max-h-[400px] overflow-y-auto mb-6 border-2 border-[#555] bg-black p-2"> |
| 128 | + <!-- Instances will be listed here --> |
| 129 | + <div class="text-center text-gray-400 py-4">No instances found.</div> |
| 130 | + </div> |
| 131 | + |
| 132 | + <div class="flex gap-4 w-full"> |
| 133 | + <div class="btn-mc flex-grow nav-item" onclick="createNewInstance()" tabindex="0">ADD INSTANCE</div> |
| 134 | + <div class="btn-mc flex-grow nav-item" onclick="toggleInstances(false)" tabindex="0">DONE</div> |
| 135 | + </div> |
| 136 | + </div> |
| 137 | + </div> |
| 138 | + |
| 139 | + <div class="modal-overlay" id="add-instance-modal"> |
| 140 | + <div class="modal-box" style="max-width: 600px;"> |
| 141 | + <div class="modal-title" style="font-size: 32px;">NEW INSTANCE</div> |
| 142 | + |
| 143 | + <div class="mc-input-group"> |
| 144 | + <label class="mc-label">Instance Name:</label> |
| 145 | + <input type="text" id="new-instance-name" class="mc-input nav-item" placeholder="My Instance" tabindex="0"> |
| 146 | + </div> |
| 147 | + |
| 148 | + <div class="mc-input-group"> |
| 149 | + <label class="mc-label">GitHub Repo (user/repo):</label> |
| 150 | + <input type="text" id="new-instance-repo" class="mc-input nav-item" placeholder="smartcmd/MinecraftConsoles" tabindex="0"> |
| 151 | + </div> |
| 152 | + |
| 153 | + <div class="flex gap-4 w-full mt-4"> |
| 154 | + <div class="btn-mc flex-grow nav-item" onclick="saveNewInstance()" tabindex="0">CREATE</div> |
| 155 | + <div class="btn-mc flex-grow nav-item" onclick="toggleAddInstance(false)" tabindex="0">CANCEL</div> |
| 156 | + </div> |
| 157 | + </div> |
| 158 | + </div> |
| 159 | + |
106 | 160 | <div class="modal-overlay" id="options-modal"> |
107 | 161 | <div class="modal-box"> |
108 | 162 | <div class="modal-title">LAUNCHER OPTIONS</div> |
|
168 | 222 |
|
169 | 223 | <div class="mc-input-group"> |
170 | 224 | <label class="mc-label">In-Game Username:</label> |
171 | | - <input type="text" id="username-input" class="mc-input nav-item" placeholder="Steve" tabindex="0"> |
| 225 | + <input type="text" id="username-input" class="mc-input nav-item" placeholder="Steve" tabindex="0" maxlength="16"> |
172 | 226 | </div> |
173 | 227 |
|
174 | 228 | <div class="mc-input-group mt-4"> |
|
194 | 248 | </div> |
195 | 249 | </div> |
196 | 250 |
|
| 251 | + <div class="modal-overlay" id="skin-modal" style="display: none;"> |
| 252 | + <div class="modal-box" style="max-width: 900px; background: var(--mc-gui-bg); border: 4px solid #000; padding: 30px; box-shadow: inset 4px 4px 0 #fff;"> |
| 253 | + <div class="modal-title" style="margin-bottom: 25px;">SKIN UPLOADER</div> |
| 254 | + |
| 255 | + <div id="drop-zone" class="nav-item" style="width: 100%; height: 120px; display: flex; align-items: center; justify-content: center; background: #000; border: 2px solid #555; cursor: pointer; margin-bottom: 20px;" tabindex="0"> |
| 256 | + <input type="file" id="skin-input" accept=".png" class="absolute inset-0 w-full h-full opacity-0 cursor-pointer" /> |
| 257 | + <div id="upload-prompt" class="text-center"> |
| 258 | + <p class="text-xl text-white" style="text-shadow: 2px 2px 0 #000;">CLICK OR DRAG SKIN HERE</p> |
| 259 | + <p class="text-xs text-gray-400 mt-1 uppercase font-bold" style="letter-spacing: 2px;">64x32 or 64x64 PNG</p> |
| 260 | + </div> |
| 261 | + </div> |
| 262 | + |
| 263 | + <div id="preview-container" class="hidden flex flex-col items-center w-full"> |
| 264 | + <div class="flex flex-row gap-6 items-stretch w-full justify-center mb-6" style="height: 400px;"> |
| 265 | + <!-- 3D Preview Panel --> |
| 266 | + <div class="relative bg-black rounded-none border-2 border-[#555] flex flex-col items-center overflow-hidden w-1/2"> |
| 267 | + <div id="skin-viewer-container" class="w-full h-full"></div> |
| 268 | + <div style="position: absolute; bottom: 10px; left: 10px; color: #55ff55; font-size: 14px; text-shadow: 1px 1px 0 #000; z-index: 5;">3D PREVIEW</div> |
| 269 | + </div> |
| 270 | + |
| 271 | + <!-- info/2D Panel --> |
| 272 | + <div class="flex-1 w-1/2 flex flex-col gap-4"> |
| 273 | + <div class="bg-black p-4 border-2 border-[#555] flex flex-col items-center flex-1 justify-center"> |
| 274 | + <div class="relative" style="margin-bottom: 15px;"> |
| 275 | + <canvas id="skin-canvas" width="64" height="32" class="pixelated" style="width: 256px; height: 128px; image-rendering: pixelated; border: 2px solid #555;"></canvas> |
| 276 | + </div> |
| 277 | + <div style="color: #aaa; font-size: 14px; text-align: center; text-transform: uppercase;">LEGACY OUTPUT (64x32)</div> |
| 278 | + <div id="status-message" style="margin-top: 10px; font-size: 18px;"></div> |
| 279 | + </div> |
| 280 | + |
| 281 | + <div style="background: rgba(0,0,0,0.3); padding: 15px; border: 2px solid #555; color: #eee; font-size: 16px;"> |
| 282 | + <div style="display: flex; justify-content: space-between; border-bottom: 2px solid #555; padding-bottom: 8px; margin-bottom: 8px;"> |
| 283 | + <span>DETECTED:</span> |
| 284 | + <span id="format-label" style="color: #fff;">--</span> |
| 285 | + </div> |
| 286 | + <div style="display: flex; justify-content: space-between;"> |
| 287 | + <span>TARGET:</span> |
| 288 | + <span style="color: #888; font-size: 14px;">Common/res/mob/char.png</span> |
| 289 | + </div> |
| 290 | + </div> |
| 291 | + </div> |
| 292 | + </div> |
| 293 | + |
| 294 | + <div id="save-skin-btn" class="btn-mc w-full nav-item" tabindex="0">SAVE SKIN</div> |
| 295 | + </div> |
| 296 | + |
| 297 | + <div class="flex justify-center w-full mt-6"> |
| 298 | + <div id="btn-close-skin" class="btn-mc nav-item !mb-0" onclick="closeSkinManager()" tabindex="0">DONE</div> |
| 299 | + </div> |
| 300 | + </div> |
| 301 | + </div> |
| 302 | + |
197 | 303 | <div id="toast">NOTIFICATION</div> |
198 | 304 |
|
199 | 305 | <div id="music-toggle" class="music-btn nav-item" onclick="toggleMusic()" title="Toggle Music" tabindex="0"> |
200 | 306 | <span id="music-icon">♪</span> |
201 | 307 | </div> |
202 | 308 |
|
| 309 | + <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script> |
| 310 | + <script src="skin_manager.js"></script> |
203 | 311 | <script src="renderer.js"></script> |
204 | 312 | </body> |
205 | 313 | </html> |
0 commit comments