-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathlang.js
62 lines (54 loc) · 1.75 KB
/
lang.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
'use strict'
const fs = require('fs-extra')
const path = require('path')
const getMinecraftFiles = require('./get_minecraft_files')
if (process.argv.length !== 5) {
console.log('Usage : node lang.js <version1,version2,...> <output_dir> <temporary_dir>')
process.exit(1)
}
const minecraftVersions = process.argv[2].split(',')
const outputDir = path.resolve(process.argv[3])
const temporaryDir = path.resolve(process.argv[4])
minecraftVersions.forEach(minecraftVersion => {
extract(minecraftVersion, outputDir + '/' + minecraftVersion, temporaryDir, function (err) {
if (err) {
console.log(err.stack)
return
}
console.log('done ' + minecraftVersion + '!')
})
})
function copyLang (unzippedFilesDir, outputDir) {
try {
fs.copySync(unzippedFilesDir + '/assets/minecraft/lang/en_US.lang', outputDir + '/en_us.lang')
} catch (err) {
try {
fs.copySync(unzippedFilesDir + '/assets/minecraft/lang/en_us.lang', outputDir + '/en_us.lang')
} catch (err) {
fs.copySync(unzippedFilesDir + '/assets/minecraft/lang/en_us.json', outputDir + '/en_us.json')
}
}
}
function parseLang (outputDir) {
if (fs.existsSync(outputDir + '/en_us.json')) {
return
}
const lang = {}
fs.readFileSync(outputDir + '/en_us.lang', 'utf8').split('\n').forEach(function (l) {
const c = l.split(/=(.+)/)
if (c.length === 3) lang[c[0]] = c[1]
})
fs.writeFileSync(outputDir + '/en_us.json', JSON.stringify(lang, null, 2))
}
function extract (minecraftVersion, outputDir, temporaryDir, cb) {
getMinecraftFiles(minecraftVersion, temporaryDir, function (err, unzippedFilesDir) {
if (err) {
cb(err)
return
}
fs.mkdirpSync(outputDir)
copyLang(unzippedFilesDir, outputDir)
parseLang(outputDir)
cb()
})
}