From f489c5f4776993187138c487e4dad039fb6ae9f4 Mon Sep 17 00:00:00 2001 From: Max Lee Date: Fri, 4 Jul 2025 14:33:36 +0000 Subject: [PATCH 01/13] fix: skin from textures property would not show (#385) --- pnpm-lock.yaml | 14 ++++---- renderer/viewer/three/entities.ts | 1 + src/entities.ts | 60 ++++++++++++++----------------- 3 files changed, 35 insertions(+), 40 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 291cec39..c37e0510 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -136,7 +136,7 @@ importers: version: 4.17.21 mcraft-fun-mineflayer: specifier: ^0.1.23 - version: 0.1.23(encoding@0.1.13)(mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/2cd1e3da257a0c0415e9dc5524fb14bd5844f0d8(encoding@0.1.13)) + version: 0.1.23(encoding@0.1.13)(mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/3daf1f4bdc6afad0dedd87b879875f3dbb7b0980(encoding@0.1.13)) minecraft-data: specifier: 3.92.0 version: 3.92.0 @@ -341,7 +341,7 @@ importers: version: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/89c33d396f3fde4804c71f4be3c203ade1833b41(@types/react@18.3.18)(react@18.3.1) mineflayer: specifier: github:zardoy/mineflayer#gen-the-master - version: https://codeload.github.com/zardoy/mineflayer/tar.gz/2cd1e3da257a0c0415e9dc5524fb14bd5844f0d8(encoding@0.1.13) + version: https://codeload.github.com/zardoy/mineflayer/tar.gz/3daf1f4bdc6afad0dedd87b879875f3dbb7b0980(encoding@0.1.13) mineflayer-mouse: specifier: ^0.1.11 version: 0.1.11 @@ -6678,8 +6678,8 @@ packages: resolution: {integrity: sha512-GtW4hkijyZbSu5LKYYD89xZu+XY7OoP7IkrCnNEn6EdPm0+vr2THoJgFGKrlze9/81+T+P3E4qvJXNFiU/zeJg==} engines: {node: '>=22'} - mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/2cd1e3da257a0c0415e9dc5524fb14bd5844f0d8: - resolution: {tarball: https://codeload.github.com/zardoy/mineflayer/tar.gz/2cd1e3da257a0c0415e9dc5524fb14bd5844f0d8} + mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/3daf1f4bdc6afad0dedd87b879875f3dbb7b0980: + resolution: {tarball: https://codeload.github.com/zardoy/mineflayer/tar.gz/3daf1f4bdc6afad0dedd87b879875f3dbb7b0980} version: 4.30.0 engines: {node: '>=22'} @@ -16956,12 +16956,12 @@ snapshots: maxrects-packer: '@zardoy/maxrects-packer@2.7.4' zod: 3.24.2 - mcraft-fun-mineflayer@0.1.23(encoding@0.1.13)(mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/2cd1e3da257a0c0415e9dc5524fb14bd5844f0d8(encoding@0.1.13)): + mcraft-fun-mineflayer@0.1.23(encoding@0.1.13)(mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/3daf1f4bdc6afad0dedd87b879875f3dbb7b0980(encoding@0.1.13)): dependencies: '@zardoy/flying-squid': 0.0.49(encoding@0.1.13) exit-hook: 2.2.1 minecraft-protocol: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/6c2204a813690ead420e2b8c7f0ef32ca357d176(patch_hash=a8726e6981ddc3486262d981d1e2030f379901c055ac9c4bf3036b4149e860e0)(encoding@0.1.13) - mineflayer: https://codeload.github.com/zardoy/mineflayer/tar.gz/2cd1e3da257a0c0415e9dc5524fb14bd5844f0d8(encoding@0.1.13) + mineflayer: https://codeload.github.com/zardoy/mineflayer/tar.gz/3daf1f4bdc6afad0dedd87b879875f3dbb7b0980(encoding@0.1.13) prismarine-item: 1.16.0 ws: 8.18.1 transitivePeerDependencies: @@ -17379,7 +17379,7 @@ snapshots: - encoding - supports-color - mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/2cd1e3da257a0c0415e9dc5524fb14bd5844f0d8(encoding@0.1.13): + mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/3daf1f4bdc6afad0dedd87b879875f3dbb7b0980(encoding@0.1.13): dependencies: '@nxg-org/mineflayer-physics-util': 1.8.10 minecraft-data: 3.92.0 diff --git a/renderer/viewer/three/entities.ts b/renderer/viewer/three/entities.ts index 414b0279..c05aac99 100644 --- a/renderer/viewer/three/entities.ts +++ b/renderer/viewer/three/entities.ts @@ -486,6 +486,7 @@ export class Entities { .some(channel => channel !== 0) } + // todo true/undefined doesnt reset the skin to the default one // eslint-disable-next-line max-params async updatePlayerSkin (entityId: string | number, username: string | undefined, uuidCache: string | undefined, skinUrl: string | true, capeUrl: string | true | undefined = undefined) { if (uuidCache) { diff --git a/src/entities.ts b/src/entities.ts index 3dac51ce..79602aa5 100644 --- a/src/entities.ts +++ b/src/entities.ts @@ -198,46 +198,40 @@ customEvents.on('gameLoaded', () => { } }) - // Texture override from packet properties - bot._client.on('player_info', (packet) => { - const applySkinTexturesProxy = (url: string) => { - const { appConfig } = miscUiState - if (appConfig?.skinTexturesProxy) { - return url?.replace('http://textures.minecraft.net/', appConfig.skinTexturesProxy) - .replace('https://textures.minecraft.net/', appConfig.skinTexturesProxy) - } - return url + const applySkinTexturesProxy = (url: string | undefined) => { + const { appConfig } = miscUiState + if (appConfig?.skinTexturesProxy) { + return url?.replace('http://textures.minecraft.net/', appConfig.skinTexturesProxy) + .replace('https://textures.minecraft.net/', appConfig.skinTexturesProxy) } + return url + } - for (const playerEntry of packet.data) { - if (!playerEntry.player && !playerEntry.properties) continue - let textureProperty = playerEntry.properties?.find(prop => prop?.name === 'textures') - if (!textureProperty) { - textureProperty = playerEntry.player?.properties?.find(prop => prop?.key === 'textures') - } - if (textureProperty) { - try { - const textureData = JSON.parse(Buffer.from(textureProperty.value, 'base64').toString()) - const skinUrl = applySkinTexturesProxy(textureData.textures?.SKIN?.url) - const capeUrl = applySkinTexturesProxy(textureData.textures?.CAPE?.url) + // Texture override from packet properties + const updateSkin = (player: import('mineflayer').Player) => { + if (!player.uuid || !player.username || !player.skinData) return - // Find entity with matching UUID and update skin - let entityId = '' - for (const [entId, entity] of Object.entries(bot.entities)) { - if (entity.uuid === playerEntry.uuid) { - entityId = entId - break - } - } - // even if not found, still record to cache - void getThreeJsRendererMethods()?.updatePlayerSkin(entityId, playerEntry.player?.name, playerEntry.uuid, skinUrl, capeUrl) - } catch (err) { - console.error('Error decoding player texture:', err) + try { + const skinUrl = applySkinTexturesProxy(player.skinData.url) + const capeUrl = applySkinTexturesProxy((player.skinData as any).capeUrl) + + // Find entity with matching UUID and update skin + let entityId = '' + for (const [entId, entity] of Object.entries(bot.entities)) { + if (entity.uuid === player.uuid) { + entityId = entId + break } } + // even if not found, still record to cache + void getThreeJsRendererMethods()?.updatePlayerSkin(entityId, player.username, player.uuid, skinUrl ?? true, capeUrl) + } catch (err) { + console.error('Error decoding player texture:', err) } + } - }) + bot.on('playerJoined', updateSkin) + bot.on('playerUpdated', updateSkin) bot.on('teamUpdated', (team: Team) => { for (const entity of Object.values(bot.entities)) { From fa56d479b1f06c3f2c699d60e7b6f08ba5df34b1 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Fri, 4 Jul 2025 18:04:24 +0300 Subject: [PATCH 02/13] feat: add report bug button --- config.mcraft-only.json | 3 ++- src/appConfig.ts | 1 + src/react/PauseScreen.tsx | 56 ++++++++++++++++++++++++++++++++++----- src/utils.ts | 2 +- 4 files changed, 54 insertions(+), 8 deletions(-) diff --git a/config.mcraft-only.json b/config.mcraft-only.json index 51b6eee6..7d9a7b59 100644 --- a/config.mcraft-only.json +++ b/config.mcraft-only.json @@ -1,3 +1,4 @@ { - "alwaysReconnectButton": true + "alwaysReconnectButton": true, + "reportBugButtonWithReconnect": true } diff --git a/src/appConfig.ts b/src/appConfig.ts index b8c1e219..ae9851b6 100644 --- a/src/appConfig.ts +++ b/src/appConfig.ts @@ -56,6 +56,7 @@ export type AppConfig = { defaultUsername?: string skinTexturesProxy?: string alwaysReconnectButton?: boolean + reportBugButtonWithReconnect?: boolean } export const loadAppConfig = (appConfig: AppConfig) => { diff --git a/src/react/PauseScreen.tsx b/src/react/PauseScreen.tsx index 4bdd2974..12748b54 100644 --- a/src/react/PauseScreen.tsx +++ b/src/react/PauseScreen.tsx @@ -32,7 +32,7 @@ import Screen from './Screen' import styles from './PauseScreen.module.css' import { DiscordButton } from './DiscordButton' import { showNotification } from './NotificationProvider' -import { appStatusState, reconnectReload } from './AppStatusProvider' +import { appStatusState, lastConnectOptions, reconnectReload } from './AppStatusProvider' import NetworkStatus from './NetworkStatus' import PauseLinkButtons from './PauseLinkButtons' import { pixelartIcons } from './PixelartIcon' @@ -265,7 +265,7 @@ export default () => {
- + {singleplayer ? (
} - {(noConnection || appConfig?.alwaysReconnectButton) && ( - + {(true) && ( +
+ + {true && ( +
)}
diff --git a/src/utils.ts b/src/utils.ts index d48fbbc3..3ccc7fc4 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -163,7 +163,7 @@ export const reloadChunks = async () => { } export const openGithub = (addUrl = '') => { - window.open(`${process.env.GITHUB_URL}${addUrl}`, '_blank') + window.open(`${process.env.GITHUB_URL?.replace(/\/$/, '')}${addUrl}`, '_blank') } export const resolveTimeout = async (promise, timeout = 10_000) => { From 2f93c08b1e66a8410f3f4ad327921d717381b814 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Fri, 4 Jul 2025 18:05:26 +0300 Subject: [PATCH 03/13] fix lint --- src/react/PauseScreen.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/react/PauseScreen.tsx b/src/react/PauseScreen.tsx index 12748b54..3036aa4b 100644 --- a/src/react/PauseScreen.tsx +++ b/src/react/PauseScreen.tsx @@ -294,12 +294,12 @@ export default () => { {fsState.inMemorySave && !fsState.syncFs && !fsState.isReadonly ? 'Save & Quit' : 'Disconnect & Reset'} } - {(true) && ( + {(noConnection || appConfig?.alwaysReconnectButton) && (
- - {true && ( + {appConfig?.reportBugButtonWithReconnect && (