Fix minecraft-data as proper submodule
This commit is contained in:
@@ -1,126 +0,0 @@
|
||||
const fs = require('fs')
|
||||
const { join } = require('path')
|
||||
|
||||
const rootPath = join(__dirname, '..', '..')
|
||||
const data = join(__dirname, '..', '..', 'data')
|
||||
|
||||
function getJSON (path) {
|
||||
return JSON.parse(fs.readFileSync(path, 'utf-8'))
|
||||
}
|
||||
|
||||
function writeJSON (path, data) {
|
||||
fs.writeFileSync(path, JSON.stringify(data, null, 2), 'utf-8')
|
||||
}
|
||||
|
||||
// Reads and updates the JSON after processing in callback
|
||||
function alterJSON (path, callback) {
|
||||
const jsonContents = getJSON(path)
|
||||
if (callback(jsonContents) !== false) {
|
||||
writeJSON(path, jsonContents)
|
||||
}
|
||||
}
|
||||
|
||||
function bumpReadmeVersion (edition, version) {
|
||||
const readmePath = join(rootPath, 'README.md')
|
||||
let readmeContents = fs.readFileSync(readmePath, 'utf-8')
|
||||
if (!readmeContents.includes(version)) {
|
||||
if (edition === 'pc') readmeContents = readmeContents.replace('\n<!--NEXT PC-->', `, ${version}\n<!--NEXT PC-->`)
|
||||
if (edition === 'bedrock') readmeContents = readmeContents.replace('\n<!--NEXT BEDROCK-->', `, ${version}\n<!--NEXT BEDROCK-->`)
|
||||
}
|
||||
fs.writeFileSync(readmePath, readmeContents, 'utf-8')
|
||||
}
|
||||
|
||||
function updateProtocol (edition, version, protocolVersionNumber) {
|
||||
const dataRoot = join(data, edition)
|
||||
const protocolVersionsPath = join(dataRoot, 'common', 'protocolVersions.json')
|
||||
const versionsPath = join(dataRoot, 'common', 'versions.json')
|
||||
const versionPath = join(dataRoot, version, 'version.json')
|
||||
|
||||
const protocolVersionsEntry = {
|
||||
version: parseInt(protocolVersionNumber),
|
||||
minecraftVersion: version,
|
||||
majorVersion: version.split('.').slice(0, 2).join('.'),
|
||||
releaseType: 'release'
|
||||
}
|
||||
|
||||
let didUpdateProtocol = false
|
||||
|
||||
// Move the latest/proto.yml to its associated folder defined in the !version meta field
|
||||
const latestProtoPath = join(dataRoot, 'latest', 'proto.yml')
|
||||
const protoYml = fs.readFileSync(latestProtoPath, 'utf-8')
|
||||
const oldProtoVersion = protoYml.match(/!version: ([0-9.]+)/)[1]
|
||||
// Check if $oldVersion/proto.yml already exists
|
||||
const oldProtoPath = join(dataRoot, oldProtoVersion, 'proto.yml')
|
||||
if (fs.existsSync(oldProtoPath)) {
|
||||
console.log(`Can't move ${latestProtoPath} to ${oldProtoPath} because the file already exists.`)
|
||||
} else {
|
||||
fs.copyFileSync(latestProtoPath, oldProtoPath)
|
||||
if (edition === 'bedrock') {
|
||||
fs.copyFileSync(join(dataRoot, 'latest', 'types.yml'), join(dataRoot, oldProtoVersion, 'types.yml'))
|
||||
}
|
||||
didUpdateProtocol = true
|
||||
// Update references to the old version in the dataPaths.json file
|
||||
alterJSON(join(data, 'dataPaths.json'), dataPaths => {
|
||||
let latestVersionData
|
||||
for (const v in dataPaths[edition]) {
|
||||
const e = dataPaths[edition][v]
|
||||
// if .proto points to latest, update it to the old version
|
||||
if (e.proto === `${edition}/latest`) {
|
||||
e.proto = `${edition}/${oldProtoVersion}`
|
||||
}
|
||||
latestVersionData = structuredClone(e) // eslint-disable-line
|
||||
}
|
||||
if (!dataPaths[edition][version]) {
|
||||
dataPaths[edition][version] = latestVersionData
|
||||
}
|
||||
latestVersionData.proto = `${edition}/latest`
|
||||
latestVersionData.protocol = `${edition}/${version}`
|
||||
latestVersionData.version = `${edition}/${version}`
|
||||
})
|
||||
}
|
||||
|
||||
// Update commons/protocolVersions.json (pc does this auto with cron)
|
||||
alterJSON(protocolVersionsPath, protoVers => {
|
||||
if (!protoVers.find(v => v.version === protocolVersionsEntry.version)) {
|
||||
protoVers.unshift(protocolVersionsEntry)
|
||||
}
|
||||
})
|
||||
// Update commons/version.json
|
||||
alterJSON(versionsPath, versions => {
|
||||
if (!versions.includes(version)) {
|
||||
versions.push(version)
|
||||
}
|
||||
})
|
||||
|
||||
// Update the $version/version.json file
|
||||
fs.mkdirSync(join(dataRoot, version), { recursive: true })
|
||||
if (!fs.existsSync(versionPath)) {
|
||||
writeJSON(versionPath, protocolVersionsEntry)
|
||||
}
|
||||
|
||||
// Update the '!version' meta field in the latest/proto.yml
|
||||
if (didUpdateProtocol) {
|
||||
const protoYmlUpdate = protoYml.replace(/!version: [0-9.]+/, `!version: ${version}`)
|
||||
fs.writeFileSync(join(dataRoot, 'latest', 'proto.yml'), protoYmlUpdate, 'utf-8')
|
||||
}
|
||||
}
|
||||
|
||||
const platforms = {
|
||||
bedrock: updateProtocol,
|
||||
pc: updateProtocol
|
||||
}
|
||||
|
||||
if (process.argv.length !== 5) {
|
||||
console.log(`Usage: npm run version <${Object.keys(platforms).join('|')}> {version} {protocol_version}`)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
const [,, platform, version, protocol] = process.argv
|
||||
|
||||
if (platforms[platform] === undefined) {
|
||||
console.log(`Received platform "${platform}", expected one of (${Object.keys(platforms).join(', ')})`)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
platforms[platform](platform, version, protocol)
|
||||
bumpReadmeVersion(platform, version)
|
||||
Reference in New Issue
Block a user