Skip to content

Commit 4a64609

Browse files
committed
Stop asserting that all chat is in JSON format.
1 parent bc0d628 commit 4a64609

File tree

4 files changed

+17
-5
lines changed

4 files changed

+17
-5
lines changed

src/minecraft/chatToJsx.tsx

+8
Original file line numberDiff line numberDiff line change
@@ -224,4 +224,12 @@ const ChatToJsxNonMemo = ({
224224
// Memoisation means this is only re-rendered if the props changed.
225225
export const ChatToJsx = React.memo(ChatToJsxNonMemo)
226226

227+
export const parseValidJson = (text: string) => {
228+
try {
229+
return JSON.parse(text)
230+
} catch (e) {
231+
return text
232+
}
233+
}
234+
227235
export default parseChatToJsx

src/minecraft/pingServer.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import { Buffer } from 'buffer'
33

44
import { makeBasePacket, concatPacketData, parsePacket, Packet } from './packet'
55
import { toggleEndian, padBufferToLength, resolveHostname } from './utils'
6+
import { parseValidJson, PlainTextChat } from './chatToJsx'
67
import { readVarInt, writeVarInt } from './packetUtils'
7-
import { PlainTextChat } from './chatToJsx'
88

99
export interface LegacyPing {
1010
ff: number
@@ -136,7 +136,7 @@ export const modernPing = async (opts: { host: string; port: number }) => {
136136
const json = responsePacket.data
137137
.slice(varIntLength, varIntLength + jsonLength)
138138
.toString('utf8')
139-
const response = JSON.parse(json)
139+
const response = parseValidJson(json)
140140

141141
resolve({
142142
ping: (timeReceived - timeSent) / 2,

src/screens/ChatScreen.tsx

+4-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import SettingsContext from '../context/settingsContext'
1515
import ConnectionContext from '../context/connectionContext'
1616
import {
1717
ChatToJsx,
18+
parseValidJson,
1819
mojangColorMap,
1920
lightColorMap,
2021
MinecraftChat,
@@ -127,7 +128,9 @@ const ChatScreen = ({ navigation }: { navigation: ChatNavigationProp }) => {
127128
.toString('utf8')
128129
const position = packet.data.readInt8(chatVarIntLength + chatLength)
129130
// TODO: Support position 2 and sender.
130-
if (position === 0 || position === 1) addMessage(JSON.parse(chatJson))
131+
if (position === 0 || position === 1) {
132+
addMessage(parseValidJson(chatJson))
133+
}
131134
} catch (e) {
132135
createErrorHandler(colorMap.dark_red, addMessage, parseMessageErr)(e)
133136
}

src/screens/ServerScreen.tsx

+3-2
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ import initiateConnection from '../minecraft/connection'
3232
import {
3333
ChatToJsx,
3434
lightColorMap,
35-
mojangColorMap
35+
mojangColorMap,
36+
parseValidJson
3637
} from '../minecraft/chatToJsx'
3738
import useDarkMode from '../context/useDarkMode'
3839

@@ -176,7 +177,7 @@ const ServerScreen = () => {
176177
if (newConn.disconnectReason) {
177178
setDisconnectReason({
178179
server,
179-
reason: JSON.parse(newConn.disconnectReason)
180+
reason: parseValidJson(newConn.disconnectReason)
180181
})
181182
}
182183
}

0 commit comments

Comments
 (0)