From b7d317825f1f32a03b235249a2f403e9584d3a82 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sat, 11 May 2024 21:15:51 +0300 Subject: [PATCH 1/8] fix lighting in playround for pre-flat versions --- prismarine-viewer/examples/playground.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/prismarine-viewer/examples/playground.ts b/prismarine-viewer/examples/playground.ts index 295cc47d..223fc6f2 100644 --- a/prismarine-viewer/examples/playground.ts +++ b/prismarine-viewer/examples/playground.ts @@ -138,6 +138,7 @@ async function main () { viewer.entities.onSkinUpdate = () => { viewer.render() } + viewer.world.mesherConfig.enableLighting = false viewer.listen(worldView) // Load chunks From 54a7e52cff8c6d372ca93f921188a17399955758 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sat, 11 May 2024 21:20:30 +0300 Subject: [PATCH 2/8] add light test utils --- .../viewer/lib/mesher/test/mesherTester.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/prismarine-viewer/viewer/lib/mesher/test/mesherTester.ts b/prismarine-viewer/viewer/lib/mesher/test/mesherTester.ts index a665db6b..6103a3d4 100644 --- a/prismarine-viewer/viewer/lib/mesher/test/mesherTester.ts +++ b/prismarine-viewer/viewer/lib/mesher/test/mesherTester.ts @@ -38,8 +38,22 @@ export const setup = (version, initialBlocks: [number[], string][]) => { } reload() + const getLights = () => { + return Object.fromEntries(getGeometry().faces.map(({ face, light }) => ([face, light * 15 - 2]))) + } + + const setLight = (x: number, y: number, z: number, val = 0) => { + // create columns first + chunk1.setBlockLight(pos.offset(x, y, z), 15) + chunk1.setSkyLight(pos.offset(x, y, z), 15) + chunk1.setBlockLight(pos.offset(x, y, z), val) + chunk1.setSkyLight(pos.offset(x, y, z), 0) + } + return { mesherWorld, + setLight, + getLights, getGeometry, pos, mcData, From 02fb4c93940ec995ccf89dca52d28c8b44c49781 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Mon, 13 May 2024 02:15:58 +0300 Subject: [PATCH 3/8] fix different width in server menu --- src/react/singleplayer.module.css | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/react/singleplayer.module.css b/src/react/singleplayer.module.css index fef43b76..c7ec49f6 100644 --- a/src/react/singleplayer.module.css +++ b/src/react/singleplayer.module.css @@ -23,7 +23,7 @@ .world_root { height: 40px; - width: 300px; + width: 308px; border: 1px solid transparent; display: flex; outline: none; @@ -43,6 +43,7 @@ flex-direction: column; font-size: 11px; white-space: nowrap; + width: 100%; } .world_info_formatted { font-size: 10px; From ef146f7a28c5105f47810d50db6b6995db120924 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Mon, 13 May 2024 03:42:31 +0300 Subject: [PATCH 4/8] fix(hud): fix safe bottom area for iOS devices when clicked "Hide Toolbar" https://forums.developer.apple.com/forums/thread/716552 chore: add new experiment for demo --- experiments/ios-safe-area-bottom-bug.html | 15 +++++++++++++++ package.json | 2 +- src/react/HotbarRenderApp.tsx | 2 +- src/react/SharedHudVars.tsx | 6 ++++-- 4 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 experiments/ios-safe-area-bottom-bug.html diff --git a/experiments/ios-safe-area-bottom-bug.html b/experiments/ios-safe-area-bottom-bug.html new file mode 100644 index 00000000..53d867f5 --- /dev/null +++ b/experiments/ios-safe-area-bottom-bug.html @@ -0,0 +1,15 @@ + +
+ bottom: env(safe-area-inset-bottom) +
diff --git a/package.json b/package.json index 11324549..92de17cf 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "lint": "eslint \"{src,cypress}/**/*.{ts,js,jsx,tsx}\"", "storybook": "storybook dev -p 6006", "build-storybook": "storybook build && node scripts/build.js moveStorybookFiles", - "start-experiments": "vite --config experiments/vite.config.ts", + "start-experiments": "vite --config experiments/vite.config.ts --host", "watch-other-workers": "echo NOT IMPLEMENTED", "watch-mesher": "node prismarine-viewer/buildMesherWorker.mjs -w", "run-playground": "run-p watch-mesher watch-other-workers playground-server watch-playground", diff --git a/src/react/HotbarRenderApp.tsx b/src/react/HotbarRenderApp.tsx index 5b32e3cc..3b50f49b 100644 --- a/src/react/HotbarRenderApp.tsx +++ b/src/react/HotbarRenderApp.tsx @@ -211,7 +211,7 @@ export default () => { justifyContent: 'center', zIndex: hasModals ? 1 : 8, pointerEvents: 'none', - bottom: 'env(safe-area-inset-bottom)' + bottom: 'var(--hud-bottom-raw)' }} /> diff --git a/src/react/SharedHudVars.tsx b/src/react/SharedHudVars.tsx index 9a9392fd..6cc0c54e 100644 --- a/src/react/SharedHudVars.tsx +++ b/src/react/SharedHudVars.tsx @@ -8,10 +8,12 @@ export default ({ children }): React.ReactElement => { // 1. Don't inline long data URLs for better DX in elements tab // 2. Easier application to globally override icons with custom image (eg from resourcepacks) const css = /* css */` - :root { + html { --widgets-gui-atlas: url(${widgets}); --gui-icons: url(${icons}), url(${icons}); - --safe-area-inset-bottom: calc(env(safe-area-inset-bottom) / 2); + --hud-bottom-max: 0px; + --hud-bottom-raw: max(env(safe-area-inset-bottom), var(--hud-bottom-max)); + --safe-area-inset-bottom: calc(var(--hud-bottom-raw) / 2); } ` const style = document.createElement('style') From 0a1b97857c4c464da0fc306154420b577e9dad9c Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Mon, 13 May 2024 03:43:10 +0300 Subject: [PATCH 5/8] feat: add a way to specify version from quick connect e.g. test.com:1.18.2 or 192.168.0.100:25566:1.17.1 --- src/react/ServersList.tsx | 12 ++++++++++-- src/react/ServersListProvider.tsx | 7 +++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/react/ServersList.tsx b/src/react/ServersList.tsx index 2fbbd349..f6b89452 100644 --- a/src/react/ServersList.tsx +++ b/src/react/ServersList.tsx @@ -60,14 +60,22 @@ export default ({ initialProxies, updateProxies: updateProxiesProp, joinServer, return { e.preventDefault() - joinServer(serverIp, { + let ip = serverIp + let version + const parts = ip.split(':') + if (parts.length > 1 && parts.at(-1)!.includes('.')) { + version = parts.at(-1)! + ip = parts.slice(0, -1).join(':') + } + joinServer(ip, { shouldSave: save, + versionOverride: version, }) }} >
{/* todo history */} - setServerIp(value)} /> + setServerIp(value)} />
- ) : null } + ) : null} {level > 0 && level < 256 ? (
{level + 1}
- ) : null } + ) : null} } @@ -56,7 +56,7 @@ const indicatorIcons: Record = { readonlyFiles: 'file-off', } -export default ({ indicators, effects }: {indicators: typeof defaultIndicatorsState, effects: readonly EffectType[]}) => { +export default ({ indicators, effects }: { indicators: typeof defaultIndicatorsState, effects: readonly EffectType[] }) => { const effectsRef = useRef(effects) useEffect(() => { effectsRef.current = effects diff --git a/src/reactUi.tsx b/src/reactUi.tsx index 94ea6b88..9a79de34 100644 --- a/src/reactUi.tsx +++ b/src/reactUi.tsx @@ -36,6 +36,7 @@ import Crosshair from './react/Crosshair' import ButtonAppProvider from './react/ButtonAppProvider' import ServersListProvider from './react/ServersListProvider' import GamepadUiCursor from './react/GamepadUiCursor' +import HeldMapUi from './react/HeldMapUi' const RobustPortal = ({ children, to }) => { return createPortal({children}, to) @@ -85,6 +86,12 @@ const GameHud = ({ children }) => { return gameLoaded ? children : null } +const InGameComponent = ({ children }) => { + const { gameLoaded } = useSnapshot(miscUiState) + if (!gameLoaded) return null + return children +} + const InGameUi = () => { const { gameLoaded } = useSnapshot(miscUiState) if (!gameLoaded) return @@ -135,6 +142,14 @@ const WidgetDisplay = ({ name, Component }) => { const App = () => { return
+ +
+ + + +
+
+
@@ -151,6 +166,7 @@ const App = () => { */} + {/* todo correct mounting! */}
diff --git a/src/styles.css b/src/styles.css index fa57e51d..139996e9 100644 --- a/src/styles.css +++ b/src/styles.css @@ -134,7 +134,7 @@ body { -ms-interpolation-mode: nearest-neighbor; } -.overlay-top-scaled { +.overlay-top-scaled, .overlay-bottom-scaled { position: fixed; inset: 0; transform-origin: top left; @@ -146,6 +146,10 @@ body { pointer-events: none; } +.overlay-bottom-scaled { + z-index: 1; +} + #viewer-canvas { position: fixed; top: 0; diff --git a/src/worldInteractions.ts b/src/worldInteractions.ts index c3263f2f..2e20de29 100644 --- a/src/worldInteractions.ts +++ b/src/worldInteractions.ts @@ -197,7 +197,7 @@ class WorldInteraction { 'minecart', 'boat', 'tnt_minecart', 'chest_minecart', 'hopper_minecart', 'command_block_minecart', 'armor_stand', 'lead', 'name_tag', // - 'writable_book', 'written_book', 'compass', 'clock', 'filled_map', 'empty_map', + 'writable_book', 'written_book', 'compass', 'clock', 'filled_map', 'empty_map', 'map', 'shears', 'carrot_on_a_stick', 'warped_fungus_on_a_stick', 'spawn_egg', 'trident', 'crossbow', 'elytra', 'shield', 'turtle_helmet', ].includes(bot.heldItem.name) @@ -219,10 +219,10 @@ class WorldInteraction { bot.lookAt = oldLookAt }).catch(console.warn) } - this.lastBlockPlaced = 0 } else { bot.activateItem() // todo offhand } + this.lastBlockPlaced = 0 } // Stop break From 3329d0e75eaffca181d652f0fb80df96a8e3b90c Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Mon, 13 May 2024 04:14:16 +0300 Subject: [PATCH 8/8] fix: held item display was not updated after server/window GUI manipulation on inventory --- src/index.ts | 9 +++++++++ src/react/HeldMapUi.tsx | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index 69886b3b..8dbc46cf 100644 --- a/src/index.ts +++ b/src/index.ts @@ -547,6 +547,15 @@ async function connect (connectOptions: ConnectOptions) { window.Vec3 = Vec3 window.pathfinder = pathfinder + // patch mineflayer + // todo move to mineflayer + bot.inventory.on('updateSlot', (index) => { + if ((index as unknown as number) === bot.quickBarSlot + bot.inventory.hotbarStart) { + //@ts-expect-error + bot.emit('heldItemChanged') + } + }) + miscUiState.gameLoaded = true miscUiState.loadedServerIndex = connectOptions.serverIndex ?? '' customEvents.emit('gameLoaded') diff --git a/src/react/HeldMapUi.tsx b/src/react/HeldMapUi.tsx index 242cba03..9187c98b 100644 --- a/src/react/HeldMapUi.tsx +++ b/src/react/HeldMapUi.tsx @@ -20,13 +20,14 @@ export default () => { return canvas.toDataURL('image/png') }) + // TODO delete maps! const updateHeldMap = () => { setDataUrl(null) if (!bot.heldItem || !['filled_map', 'map'].includes(bot.heldItem.name)) return // setDataUrl(true) const mapNumber = (bot.heldItem?.nbt?.value as any)?.map?.value // if (!mapNumber) return - setDataUrl(bot.mapDownloader.maps[mapNumber] as unknown as string) + setDataUrl(bot.mapDownloader.maps?.[mapNumber] as unknown as string) } bot.on('heldItemChanged' as any, () => {