Files
ZoteCoreLoader/tools/rebuild-numeric-ids.ts
T
MaXFeeD 159e82e3aa feat: Обновлены идентификаторы VanillaItem/Block/TileID
- Задействуются легаси идентификаторы, использующиеся на стороне сервера.
- Модификации, не использующие встроенные карты идентификаторов, должны быть обновлены.
- В обновлении нуждаются динамические идентификаторы из последних версий.
2023-12-02 17:04:01 +03:00

110 lines
3.8 KiB
TypeScript

import { readFileSync as readFile, writeFileSync as writeFile, existsSync as exists } from 'fs'
let legacyItemIds = JSON.parse(readFile('legacy_item_ids.json', { encoding: "utf-8" }))
let numericIdsPath = 'numeric_ids.json'
let numericIds = JSON.parse(readFile(numericIdsPath, { encoding: "utf-8" }))
for (const key of Object.keys(legacyItemIds).slice()) {
let colonIndex = key.indexOf(":")
let untokenizedKey = key.replace(/\./g, '_')
legacyItemIds[
colonIndex != -1 ? untokenizedKey.substring(colonIndex + 1) : untokenizedKey
] = legacyItemIds[key]
delete legacyItemIds[key]
}
let legacyItemIdsRaw = Object.assign({}, legacyItemIds)
let legacyItemIdsInline = {}
for (const key in legacyItemIds) {
legacyItemIdsInline[key.replace(/_/g, '')] = key
}
const rebuildNumericIds = numericIds => {
let changes = 0
for (const key of Object.keys(numericIds.blocks)) {
let targetKey = 'item_' + key
if (!(targetKey in legacyItemIdsRaw)) {
targetKey = key.replace('stone_', 'stone_block_')
if (!(targetKey in legacyItemIdsRaw)) {
if (key in legacyItemIdsInline) {
targetKey = legacyItemIdsInline[key]
}
if (!(targetKey in legacyItemIdsRaw)) {
targetKey = key
}
}
}
let prefix = ' '.repeat(4) + 'block/' + targetKey
if (prefix.length > 57) {
prefix = prefix.substring(0, 54) + '...'
} else {
prefix = prefix + ' '.repeat(57 - prefix.length)
}
if (targetKey in legacyItemIds && legacyItemIds[targetKey] < 256) {
let replacementId = legacyItemIds[targetKey] < 0 ? 255 - legacyItemIds[targetKey] : legacyItemIds[targetKey]
delete legacyItemIds[targetKey]
if (replacementId == numericIds.blocks[key]) {
continue
}
console.debug(prefix + numericIds.blocks[key] + ' -> ' + replacementId)
numericIds.blocks[key] = replacementId
changes++
} else if (!(targetKey in legacyItemIdsRaw)) {
console.log(prefix + numericIds.blocks[key])
}
}
for (const key of Object.keys(numericIds.items)) {
let prefix = ' '.repeat(4) + 'item/' + key
if (prefix.length > 57) {
prefix = prefix.substring(0, 54) + '...'
} else {
prefix = prefix + ' '.repeat(57 - prefix.length)
}
if (key in legacyItemIds && legacyItemIds[key] >= 256) {
let replacementId = legacyItemIds[key]
delete legacyItemIds[key]
if (replacementId == numericIds.items[key]) {
continue
}
console.debug(prefix + numericIds.items[key] + ' -> ' + replacementId)
numericIds.items[key] = replacementId
changes++
} else if (!(key in legacyItemIdsRaw)) {
console.log(prefix + numericIds.items[key])
}
}
return changes
}
console.info('Merging numeric ids with legacy...')
let numericIdsChanges = rebuildNumericIds(numericIds)
if (numericIdsChanges > 0) console.info(`Merged ${numericIdsChanges} rebuilt ids!`)
writeFile(numericIdsPath, JSON.stringify(numericIds, null, ' '.repeat(4)))
let index = 0, numericIdsOverridePath
while (exists(numericIdsOverridePath = `numeric_ids_override_${index}.json`)) {
console.info(`Merging numeric ids overrides ${index} with legacy...`)
let numericIdsOverride = JSON.parse(readFile(numericIdsOverridePath, { encoding: "utf-8" }))
let numericIdsOverrideChanges = rebuildNumericIds(numericIdsOverride)
if (numericIdsOverrideChanges > 0) console.info(`Merged overriden ${numericIdsOverrideChanges} rebuilt ids!`)
writeFile(numericIdsOverridePath, JSON.stringify(numericIdsOverride, null, ' '.repeat(4)))
index++
}
let unexpectedIds = { blocks: {}, items: {} }, unexpected = 0
for (const key in legacyItemIds) {
if (legacyItemIds[key] >= 256) {
unexpectedIds.items[key] = legacyItemIds[key]
} else {
unexpectedIds.blocks[key] = legacyItemIds[key] < 0 ? 255 - legacyItemIds[key] : legacyItemIds[key]
}
unexpected++
}
if (unexpected > 0) {
console.info(`Flushing missing ${unexpected} numeric legacy ids...`)
writeFile(numericIdsOverridePath, JSON.stringify(unexpectedIds, null, ' '.repeat(4)))
}