Skip to content

Commit fa68808

Browse files
zardoycursoragent
andauthored
Forbid problematic connection versions (#448)
Add version check to prevent unsupported Minecraft versions Co-authored-by: Cursor Agent <cursoragent@cursor.com>
1 parent 09435c2 commit fa68808

2 files changed

Lines changed: 32 additions & 1 deletion

File tree

src/index.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ import { tryHandleBuiltinCommand } from './builtinCommands'
9898
import { loadingTimerState } from './react/LoadingTimer'
9999
import { loadPluginsIntoWorld } from './react/CreateWorldProvider'
100100
import { getCurrentProxy, getCurrentUsername } from './react/ServersList'
101+
import { versionToNumber } from 'mc-assets/dist/utils'
101102
import { isPlayground } from './playgroundIntegration'
102103
import { appLoadBackend } from './appViewerLoad'
103104

@@ -395,6 +396,19 @@ export async function connect (connectOptions: ConnectOptions) {
395396

396397
let finalVersion = connectOptions.botVersion || (singleplayer ? serverOptions.version : undefined)
397398

399+
// Check for forbidden versions (>= 1.21.7) due to critical world display issues
400+
const checkForbiddenVersion = (version: string | undefined) => {
401+
if (!version) return
402+
const FORBIDDEN_VERSION_THRESHOLD = '1.21.7'
403+
const versionNum = versionToNumber(version)
404+
const thresholdNum = versionToNumber(FORBIDDEN_VERSION_THRESHOLD)
405+
if (versionNum >= thresholdNum) {
406+
throw new UserError(`Version ${version} is not supported due to critical world display issues. Please use version 1.21.6 or earlier.`)
407+
}
408+
}
409+
410+
checkForbiddenVersion(finalVersion)
411+
398412
if (connectOptions.worldStateFileContents) {
399413
try {
400414
localReplaySession = startLocalReplayServer(connectOptions.worldStateFileContents)
@@ -403,6 +417,7 @@ export async function connect (connectOptions: ConnectOptions) {
403417
throw new UserError(`Failed to start local replay server: ${err}`)
404418
}
405419
finalVersion = localReplaySession.version
420+
checkForbiddenVersion(finalVersion)
406421
}
407422

408423
if (singleplayer) {
@@ -465,6 +480,7 @@ export async function connect (connectOptions: ConnectOptions) {
465480
const autoVersionSelect = await getServerInfo(server.host, server.port ? Number(server.port) : undefined, versionAutoSelect)
466481
wrapped.end()
467482
finalVersion = autoVersionSelect.version
483+
checkForbiddenVersion(finalVersion)
468484
}
469485
initialLoadingText = `Connecting to server ${server.host}:${server.port ?? 25_565} with version ${finalVersion}`
470486
} else if (connectOptions.viewerWsConnect) {
@@ -513,6 +529,7 @@ export async function connect (connectOptions: ConnectOptions) {
513529
console.log('Latency:', Date.now() - time, 'ms')
514530
// const version = '1.21.1'
515531
finalVersion = version
532+
checkForbiddenVersion(finalVersion)
516533
await downloadMcData(version)
517534
setLoadingScreenStatus(`Connecting to WebSocket server ${connectOptions.viewerWsConnect}`)
518535
clientDataStream = (await getWsProtocolStream(connectOptions.viewerWsConnect)).clientDuplex

src/supportedVersions.mjs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,18 @@ const versionsFromProtocol = Object.values(postNettyVersionsByProtocolVersion.pc
77

88
export const notTestedVersions = '1.19.3 1.20 1.19.1 1.19 1.18.1 1.15.1 1.14.1'.split(' ')
99

10-
export default versionsFromProtocol.filter(x => x !== '1.7' && !x.startsWith('1.7.'))
10+
// Versions >= 1.21.7 are forbidden due to critical world display issues
11+
const FORBIDDEN_VERSION_THRESHOLD = '1.21.7'
12+
const versionToNumber = (ver) => {
13+
const [x, y = '0', z = '0'] = ver.split('.')
14+
return +`${x.padStart(2, '0')}${y.padStart(2, '0')}${z.padStart(2, '0')}`
15+
}
16+
17+
const forbiddenVersionThresholdNum = versionToNumber(FORBIDDEN_VERSION_THRESHOLD)
18+
19+
export default versionsFromProtocol.filter(x => {
20+
if (x === '1.7' || x.startsWith('1.7.')) return false
21+
// Filter out versions >= 1.21.7
22+
const versionNum = versionToNumber(x)
23+
return versionNum < forbiddenVersionThresholdNum
24+
})

0 commit comments

Comments
 (0)