From 7284d88ae96caaf9ae36a8bb58f389d4026d3d16 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Tue, 5 Nov 2024 13:37:30 +0300 Subject: [PATCH 1/9] update npm banner to a working one --- README.NPM.MD | 2 +- docs-assets/npm-banner.jpeg | Bin 0 -> 98022 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 docs-assets/npm-banner.jpeg diff --git a/README.NPM.MD b/README.NPM.MD index 9c4bf17f0..dc2c7c72b 100644 --- a/README.NPM.MD +++ b/README.NPM.MD @@ -6,7 +6,7 @@ Minecraft UI components for React extracted from [mcraft.fun](https://mcraft.fun pnpm i minecraft-react ``` -![demo](https://github-production-user-asset-6210df.s3.amazonaws.com/46503702/346295584-80f3ed4a-cab6-45d2-8896-5e20233cc9b1.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAVCODYLSA53PQK4ZA%2F20240706%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240706T195400Z&X-Amz-Expires=300&X-Amz-Signature=5b063823a57057c4042c15edd1db3edd107e00940fd0e66a2ba1df4e564a2809&X-Amz-SignedHeaders=host&actor_id=46503702&key_id=0&repo_id=432411890) +![demo](./docs-assets/npm-banner.jpeg) ## Usage diff --git a/docs-assets/npm-banner.jpeg b/docs-assets/npm-banner.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..95de07b8f77567dae537de44326190b48b63f8ea GIT binary patch literal 98022 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 M{^eiXu%G?^2kKcO)Bpeg literal 0 HcmV?d00001 From c303a0e0d581ced6481046754f5e8aad29a5dcb2 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Thu, 7 Nov 2024 19:09:17 +0300 Subject: [PATCH 2/9] feat: allow singleplayer mode to be triggered by 'sp=1' query parameter along with `singleplayer=1` --- README.MD | 2 +- src/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.MD b/README.MD index 9b07bdb56..6756d3505 100644 --- a/README.MD +++ b/README.MD @@ -139,7 +139,7 @@ Server specific: Single player specific: - `?loadSave=` - Load the save on load with the specified folder name (not title) -- `?singleplayer=1` - Create empty world on load. Nothing will be saved +- `?singleplayer=1` or `?sp=1` - Create empty world on load. Nothing will be saved - `?version=` - Set the version for the singleplayer world (when used with `?singleplayer=1`) - `?noSave=true` - Disable auto save on unload / disconnect / export whenever a world is loaded. Only manual save with `/save` command will work. - `?serverSetting=:` - Set local server [options](https://github.com/zardoy/space-squid/tree/everything/src/modules.ts#L51). For example `?serverSetting=noInitialChunksSend:true` will disable initial chunks loading on the loading screen. diff --git a/src/index.ts b/src/index.ts index 637e0655c..437dca3c8 100644 --- a/src/index.ts +++ b/src/index.ts @@ -932,7 +932,7 @@ watchValue(miscUiState, async s => { const qs = new URLSearchParams(window.location.search) const moreServerOptions = {} as Record if (qs.has('version')) moreServerOptions.version = qs.get('version') - if (qs.get('singleplayer') === '1') { + if (qs.get('singleplayer') === '1' || qs.get('sp') === '1') { loadSingleplayer({}, { worldFolder: undefined, ...moreServerOptions From 574cdfc5319a3bd9213aaa3d4577f65e836f354a Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sat, 9 Nov 2024 11:19:40 +0300 Subject: [PATCH 3/9] docs: add deploy to Koyeb button --- Dockerfile | 2 +- README.MD | 6 ++++-- scripts/dockerPrepare.mjs | 5 +++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2e43ad8aa..a5f6ac062 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,7 +17,7 @@ RUN pnpm i # ENTRYPOINT ["pnpm", "run", "run-all"] # only for prod -RUN pnpm run build +RUN GITHUB_REPOSITORY=zardoy/minecraft-web-client pnpm run build # ---- Run Stage ---- FROM node:18-alpine diff --git a/README.MD b/README.MD index 6756d3505..77f680323 100644 --- a/README.MD +++ b/README.MD @@ -38,11 +38,13 @@ Whatever offline mode you used (zip, folder, just single player), you can always ![docs-assets/singleplayer-future-city-1-10-2.jpg](./docs-assets/singleplayer-future-city-1-10-2.jpg) -### Servers +### Servers & Proxy You can play almost on any Java server, vanilla servers are fully supported. See the [Mineflayer](https://github.com/PrismarineJS/mineflayer) repo for the list of supported versions (should support majority of versions). -There is a builtin proxy, but you can also host your one! Just clone the repo, run `pnpm i` (following CONTRIBUTING.MD) and run `pnpm prod-start`, then you can specify `http://localhost:8080` in the proxy field. +There is a builtin proxy, but you can also host your one! Just clone the repo, run `pnpm i` (following CONTRIBUTING.MD) and run `pnpm prod-start`, then you can specify `http://localhost:8080` in the proxy field. Or you can deploy it to the cloud service: + +[![Deploy to Koyeb](https://www.koyeb.com/static/images/deploy/button.svg)](https://app.koyeb.com/deploy?name=minecraft-web-client&type=git&repository=zardoy%2Fminecraft-web-client&branch=next&builder=dockerfile&env%5B%5D=&ports=8080%3Bhttp%3B%2F) Proxy servers are used to connect to Minecraft servers which use TCP protocol. When you connect connect to a server with a proxy, websocket connection is created between you (browser client) and the proxy server located in Europe, then the proxy connects to the Minecraft server and sends the data to the client (you) without any packet deserialization to avoid any additional delays. That said all the Minecraft protocol packets are processed by the client, right in your browser. diff --git a/scripts/dockerPrepare.mjs b/scripts/dockerPrepare.mjs index fd3680b4d..ff009168e 100644 --- a/scripts/dockerPrepare.mjs +++ b/scripts/dockerPrepare.mjs @@ -2,6 +2,11 @@ import fs from 'fs' import path from 'path' import { fileURLToPath } from 'url' +import { execSync } from 'child_process' + +// write release tag +const commitShort = execSync('git rev-parse --short HEAD').toString().trim() +fs.writeFileSync('./assets/release.json', JSON.stringify({ latestTag: `${commitShort} (docker)` }), 'utf8') const packageJson = JSON.parse(fs.readFileSync('./package.json', 'utf8')) delete packageJson.optionalDependencies From 32931efef0b541998f77895ca5bc5b2e77b8db85 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sat, 9 Nov 2024 13:01:37 +0300 Subject: [PATCH 4/9] feat: implement experimental clipWorldBelowY setting for testing --- prismarine-viewer/viewer/lib/mesher/shared.ts | 3 ++- prismarine-viewer/viewer/lib/worldrendererCommon.ts | 6 +++++- src/optionsStorage.ts | 7 ++++--- src/watchOptions.ts | 6 ++++++ 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/prismarine-viewer/viewer/lib/mesher/shared.ts b/prismarine-viewer/viewer/lib/mesher/shared.ts index 07b667471..11988db22 100644 --- a/prismarine-viewer/viewer/lib/mesher/shared.ts +++ b/prismarine-viewer/viewer/lib/mesher/shared.ts @@ -7,7 +7,8 @@ export const defaultMesherConfig = { smoothLighting: true, outputFormat: 'threeJs' as 'threeJs' | 'webgpu', textureSize: 1024, // for testing - debugModelVariant: undefined as undefined | number[] + debugModelVariant: undefined as undefined | number[], + clipWorldBelowY: undefined as undefined | number } export type MesherConfig = typeof defaultMesherConfig diff --git a/prismarine-viewer/viewer/lib/worldrendererCommon.ts b/prismarine-viewer/viewer/lib/worldrendererCommon.ts index ea90da372..65546de4f 100644 --- a/prismarine-viewer/viewer/lib/worldrendererCommon.ts +++ b/prismarine-viewer/viewer/lib/worldrendererCommon.ts @@ -321,6 +321,10 @@ export abstract class WorldRendererCommon console.log('texture loaded') } + get worldMinYRender () { + return Math.floor(Math.max(this.worldConfig.minY, this.mesherConfig.clipWorldBelowY ?? -Infinity) / 16) * 16 + } + addColumn (x: number, z: number, chunk: any, isLightUpdate: boolean) { if (!this.active) return if (this.workers.length === 0) throw new Error('workers not initialized yet') @@ -330,7 +334,7 @@ export abstract class WorldRendererCommon // todo optimize worker.postMessage({ type: 'chunk', x, z, chunk }) } - for (let y = this.worldConfig.minY; y < this.worldConfig.worldHeight; y += 16) { + for (let y = this.worldMinYRender; y < this.worldConfig.worldHeight; y += 16) { const loc = new Vec3(x, y, z) this.setSectionDirty(loc) if (this.neighborChunkUpdates && (!isLightUpdate || this.mesherConfig.smoothLighting)) { diff --git a/src/optionsStorage.ts b/src/optionsStorage.ts index 01610cf2f..c97dadc17 100644 --- a/src/optionsStorage.ts +++ b/src/optionsStorage.ts @@ -52,6 +52,7 @@ const defaultOptions = { // antiAliasing: false, + clipWorldBelowY: undefined as undefined | number, // will be removed showChunkBorders: false, // todo rename option frameLimit: false as number | false, alwaysBackupWorldBeforeLoading: undefined as boolean | undefined | null, @@ -157,7 +158,7 @@ subscribe(options, () => { localStorage.options = JSON.stringify(saveOptions) }) -type WatchValue = >(proxy: T, callback: (p: T) => void) => void +type WatchValue = >(proxy: T, callback: (p: T, isChanged: boolean) => void) => void export const watchValue: WatchValue = (proxy, callback) => { const watchedProps = new Set() @@ -166,10 +167,10 @@ export const watchValue: WatchValue = (proxy, callback) => { watchedProps.add(p.toString()) return Reflect.get(target, p, receiver) }, - })) + }), false) for (const prop of watchedProps) { subscribeKey(proxy, prop, () => { - callback(proxy) + callback(proxy, true) }) } } diff --git a/src/watchOptions.ts b/src/watchOptions.ts index 3ea170636..2996a2e1c 100644 --- a/src/watchOptions.ts +++ b/src/watchOptions.ts @@ -58,6 +58,12 @@ export const watchOptionsAfterViewerInit = () => { watchValue(options, o => { viewer.world.displayStats = o.renderDebug === 'advanced' }) + watchValue(options, (o, isChanged) => { + viewer.world.mesherConfig.clipWorldBelowY = o.clipWorldBelowY + if (isChanged) { + (viewer.world as WorldRendererThree).rerenderAllChunks() + } + }) viewer.world.mesherConfig.smoothLighting = options.smoothLighting subscribeKey(options, 'smoothLighting', () => { From d32f5107448ed3cd4536f2d2b463a314c949e80f Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sun, 10 Nov 2024 11:44:29 +0300 Subject: [PATCH 5/9] fix: Error messages were not displayed after unsuccessful Microsoft auth. Fixed all error messages. --- src/index.ts | 2 +- src/microsoftAuthflow.ts | 56 +++++++++++++++++-------------- src/react/ServersListProvider.tsx | 2 +- 3 files changed, 32 insertions(+), 28 deletions(-) diff --git a/src/index.ts b/src/index.ts index 437dca3c8..184db177c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -457,7 +457,7 @@ async function connect (connectOptions: ConnectOptions) { flyingSquidEvents() } - if (connectOptions.authenticatedAccount) username = 'not-used' + if (connectOptions.authenticatedAccount) username = 'you' let initialLoadingText: string if (singleplayer) { initialLoadingText = 'Local server is still starting' diff --git a/src/microsoftAuthflow.ts b/src/microsoftAuthflow.ts index cdfcfc77e..00f4e6754 100644 --- a/src/microsoftAuthflow.ts +++ b/src/microsoftAuthflow.ts @@ -31,6 +31,7 @@ export default async ({ tokenCaches, proxyBaseUrl, setProgressText = (text) => { const authFlow = { async getMinecraftJavaToken () { setProgressText('Authenticating with Microsoft account') + if (!window.crypto && !isPageSecure()) throw new Error('Crypto API is available only in secure contexts. Be sure to use https!') let result = null await fetch(authEndpoint, { method: 'POST', @@ -43,22 +44,29 @@ export default async ({ tokenCaches, proxyBaseUrl, setProgressText = (text) => { connectingServer, connectingServerVersion: connectingVersion }), - }).then(async response => { - if (!response.ok) { - throw new Error(`Auth server error (${response.status}): ${await response.text()}`) - } + }) + .catch(e => { + throw new Error(`Failed to connect to auth server (network error): ${e.message}`) + }) + .then(async response => { + if (!response.ok) { + throw new Error(`Auth server error (${response.status}): ${await response.text()}`) + } - const reader = response.body!.getReader() - const decoder = new TextDecoder('utf8') + const reader = response.body!.getReader() + const decoder = new TextDecoder('utf8') - const processText = ({ done, value = undefined as Uint8Array | undefined }) => { - if (done) { - return - } + const processText = ({ done, value = undefined as Uint8Array | undefined }) => { + if (done) { + return + } - const processChunk = (chunkStr) => { - try { - const json = JSON.parse(chunkStr) + const processChunk = (chunkStr) => { + let json: any + try { + json = JSON.parse(chunkStr) + } catch (err) {} + if (!json) return if (json.user_code) { onMsaCodeCallback(json) // this.codeCallback(json) @@ -66,26 +74,22 @@ export default async ({ tokenCaches, proxyBaseUrl, setProgressText = (text) => { if (json.error) throw new Error(json.error) if (json.token) result = json if (json.newCache) setCacheResult(json.newCache) - } catch (err) { } - } - const strings = decoder.decode(value) + const strings = decoder.decode(value) - for (const chunk of strings.split('\n\n')) { - processChunk(chunk) - } + for (const chunk of strings.split('\n\n')) { + processChunk(chunk) + } + return reader.read().then(processText) + } return reader.read().then(processText) - } - return reader.read().then(processText) - }) - if (!window.crypto && !isPageSecure()) throw new Error('Crypto API is available only in secure contexts. Be sure to use https!') + }) const restoredData = await restoreData(result) - if (!restoredData?.certificates?.profileKeys?.privatePEM) { - throw new Error(`Authentication server issue: it didn't return auth data. Most probably because the auth request was rejected by the end authority and retrying won't help until the issue is resolved.`) + if (restoredData?.certificates?.profileKeys?.privatePEM) { + restoredData.certificates.profileKeys.private = restoredData.certificates.profileKeys.privatePEM } - restoredData.certificates.profileKeys.private = restoredData.certificates.profileKeys.privatePEM return restoredData } } diff --git a/src/react/ServersListProvider.tsx b/src/react/ServersListProvider.tsx index 250a819a2..4260dcf49 100644 --- a/src/react/ServersListProvider.tsx +++ b/src/react/ServersListProvider.tsx @@ -195,7 +195,7 @@ const Inner = () => { }) } } - void update() + void update().catch((err) => {}) }, [serversListSorted]) const isEditScreenModal = useIsModalActive('editServer') From c8c4e3267d6126f59ce6335edb8c02bb01aa930d Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Mon, 11 Nov 2024 17:49:33 +0300 Subject: [PATCH 6/9] feat: auto save worlds in singleplayer every 2 seconds since crashes might happen. still possible to cancel this behavior via new setting or ?noSave=true feat: add setting for debugging to disable signs text rendering --- prismarine-viewer/viewer/lib/mesher/models.ts | 2 +- prismarine-viewer/viewer/lib/mesher/shared.ts | 3 ++- src/flyingSquidEvents.ts | 14 ++++++++++++++ src/optionsStorage.ts | 2 ++ src/watchOptions.ts | 1 + 5 files changed, 20 insertions(+), 2 deletions(-) diff --git a/prismarine-viewer/viewer/lib/mesher/models.ts b/prismarine-viewer/viewer/lib/mesher/models.ts index 555efd80c..91c0cf40f 100644 --- a/prismarine-viewer/viewer/lib/mesher/models.ts +++ b/prismarine-viewer/viewer/lib/mesher/models.ts @@ -484,7 +484,7 @@ export function getSectionGeometry (sx, sy, sz, world: World) { } } if (invisibleBlocks.has(block.name)) continue - if (block.name.includes('_sign') || block.name === 'sign') { + if ((block.name.includes('_sign') || block.name === 'sign') && !world.config.disableSignsMapsSupport) { const key = `${cursor.x},${cursor.y},${cursor.z}` const props: any = block.getProperties() const facingRotationMap = { diff --git a/prismarine-viewer/viewer/lib/mesher/shared.ts b/prismarine-viewer/viewer/lib/mesher/shared.ts index 11988db22..b08a2bd76 100644 --- a/prismarine-viewer/viewer/lib/mesher/shared.ts +++ b/prismarine-viewer/viewer/lib/mesher/shared.ts @@ -8,7 +8,8 @@ export const defaultMesherConfig = { outputFormat: 'threeJs' as 'threeJs' | 'webgpu', textureSize: 1024, // for testing debugModelVariant: undefined as undefined | number[], - clipWorldBelowY: undefined as undefined | number + clipWorldBelowY: undefined as undefined | number, + disableSignsMapsSupport: false } export type MesherConfig = typeof defaultMesherConfig diff --git a/src/flyingSquidEvents.ts b/src/flyingSquidEvents.ts index fb5b00e3c..7231dd276 100644 --- a/src/flyingSquidEvents.ts +++ b/src/flyingSquidEvents.ts @@ -1,4 +1,7 @@ +import { saveServer } from './flyingSquidUtils' +import { watchUnloadForCleanup } from './gameUnload' import { showModal } from './globalState' +import { options } from './optionsStorage' import { chatInputValueGlobal } from './react/Chat' import { showNotification } from './react/NotificationProvider' @@ -10,4 +13,15 @@ export default () => { showModal({ reactType: 'chat' }) }) }) + + if (options.singleplayerAutoSave) { + const autoSaveInterval = setInterval(() => { + if (options.singleplayerAutoSave) { + void saveServer(true) + } + }, 2000) + watchUnloadForCleanup(() => { + clearInterval(autoSaveInterval) + }) + } } diff --git a/src/optionsStorage.ts b/src/optionsStorage.ts index c97dadc17..53deb927f 100644 --- a/src/optionsStorage.ts +++ b/src/optionsStorage.ts @@ -53,6 +53,8 @@ const defaultOptions = { // antiAliasing: false, clipWorldBelowY: undefined as undefined | number, // will be removed + disableSignsMapsSupport: false, + singleplayerAutoSave: false, showChunkBorders: false, // todo rename option frameLimit: false as number | false, alwaysBackupWorldBeforeLoading: undefined as boolean | undefined | null, diff --git a/src/watchOptions.ts b/src/watchOptions.ts index 2996a2e1c..4b69726c9 100644 --- a/src/watchOptions.ts +++ b/src/watchOptions.ts @@ -60,6 +60,7 @@ export const watchOptionsAfterViewerInit = () => { }) watchValue(options, (o, isChanged) => { viewer.world.mesherConfig.clipWorldBelowY = o.clipWorldBelowY + viewer.world.mesherConfig.disableSignsMapsSupport = o.disableSignsMapsSupport if (isChanged) { (viewer.world as WorldRendererThree).rerenderAllChunks() } From e28608f86e4e529671fca99eb05cef7af9dbef9f Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Mon, 11 Nov 2024 18:04:54 +0300 Subject: [PATCH 7/9] also cache manifest.json into offline --- scripts/build.js | 1 + src/index.ts | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/build.js b/scripts/build.js index 9b8a85a55..d3703eea2 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -52,6 +52,7 @@ exports.getSwAdditionalEntries = () => { '*.png', '*.woff', 'mesher.js', + 'manifest.json', 'worldSaveWorker.js', `textures/entity/squid/squid.png`, // everything but not .map diff --git a/src/index.ts b/src/index.ts index 184db177c..5bd29e149 100644 --- a/src/index.ts +++ b/src/index.ts @@ -402,7 +402,9 @@ async function connect (connectOptions: ConnectOptions) { setLoadingScreenStatus(`Loading data for ${version}`) if (!document.fonts.check('1em mojangles')) { // todo instead re-render signs on load - await document.fonts.load('1em mojangles').catch(() => { }) + await document.fonts.load('1em mojangles').catch(() => { + console.error('Failed to load font, signs wont be rendered correctly') + }) } await window._MC_DATA_RESOLVER.promise // ensure data is loaded await downloadSoundsIfNeeded() From a0a2c628b40644111d4bb2d88e69881ae7865060 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Thu, 14 Nov 2024 13:41:28 +0300 Subject: [PATCH 8/9] fix: preserve server selection after going back to the servers list (eg from edit modal) fix: was not possible to remove saved MS account by clicking on the profile picture fix: highlight active zone for interaction to avoid UI confusion fix: save the proxy to memory immedieately after editing it in the servers list screen --- src/react/AddServerOrConnect.tsx | 8 +- src/react/SelectOption.tsx | 17 +++- src/react/ServersList.tsx | 37 ++++++++- src/react/ServersListProvider.tsx | 129 ++++++++++++++++-------------- src/react/Singleplayer.tsx | 38 ++++++--- 5 files changed, 150 insertions(+), 79 deletions(-) diff --git a/src/react/AddServerOrConnect.tsx b/src/react/AddServerOrConnect.tsx index 06f4fcd72..d98a74b85 100644 --- a/src/react/AddServerOrConnect.tsx +++ b/src/react/AddServerOrConnect.tsx @@ -22,7 +22,7 @@ interface Props { initialData?: BaseServerInfo parseQs?: boolean onQsConnect?: (server: BaseServerInfo) => void - defaults?: Pick + placeholders?: Pick accounts?: string[] authenticatedAccounts?: number versions?: string[] @@ -30,7 +30,7 @@ interface Props { const ELEMENTS_WIDTH = 190 -export default ({ onBack, onConfirm, title = 'Add a Server', initialData, parseQs, onQsConnect, defaults, accounts, versions, authenticatedAccounts }: Props) => { +export default ({ onBack, onConfirm, title = 'Add a Server', initialData, parseQs, onQsConnect, placeholders, accounts, versions, authenticatedAccounts }: Props) => { const qsParams = parseQs ? new URLSearchParams(window.location.search) : undefined const qsParamName = qsParams?.get('name') const qsParamIp = qsParams?.get('ip') @@ -111,8 +111,8 @@ export default ({ onBack, onConfirm, title = 'Add a Server', initialData, parseQ /> - setProxyOverride(value)} placeholder={defaults?.proxyOverride} /> - setUsernameOverride(value)} placeholder={defaults?.usernameOverride} /> + setProxyOverride(value)} placeholder={placeholders?.proxyOverride} /> + setUsernameOverride(value)} placeholder={placeholders?.usernameOverride} />