minecraft-data
Version:
Provide easy access to minecraft data in node.js
137 lines (124 loc) • 4.37 kB
JavaScript
/* eslint-env mocha */
const fs = require('fs')
const path = require('path')
const assert = require('assert')
// counts the number of recipes with a shape, without one and with an outShape
function getIfExist (path) {
if (fs.existsSync(path)) {
return require(path)
} else {
return null
}
}
require('./version_iterator')(function (p, versionString) {
describe('audit recipes ' + versionString, function () {
it('audit recipes', function () {
let recipes
const pFile = path.join(p, 'recipes.json')
if (fs.existsSync(pFile)) {
recipes = require(pFile)
} else {
console.log('No recipes for version ' + versionString)
}
if (recipes) {
let shapeCount = 0
let shapelessCount = 0
let outShapeCount = 0
Object.keys(recipes).forEach(key => {
const list = recipes[key]
for (let i = 0; i < list.length; ++i) {
const recipe = list[i]
if (recipe.inShape != null) {
shapeCount += 1
} else if (recipe.ingredients != null) {
shapelessCount += 1
} else {
console.log('inShape or ingredients required:', key)
}
if (recipe.outShape) outShapeCount += 1
}
})
console.log('normal recipes:', shapeCount)
console.log('shapeless recipes:', shapelessCount)
console.log('how many have an outShape:', outShapeCount)
}
})
it('pickaxe not upside-down', () => {
const recipes = getIfExist(path.join(p, 'recipes.json'))
const items = getIfExist(path.join(p, 'items.json'))
if (recipes && items) {
const pickaxe = items.find(x => x.name === 'diamond_pickaxe')
const stick = items.find(x => x.name === 'stick')
const diamond = items.find(x => x.name === 'diamond')
const recipe = recipes[pickaxe.id]
// Uncomment to fix upside-down recipes
/* if (recipe[0].inShape[0][0] !== diamond.id) {
for (const item of Object.values(recipes)) {
for (const rep of item) {
if (rep.inShape) rep.inShape.reverse()
}
}
fs.writeFileSync(path.join(p, 'recipes.json'), JSON.stringify(recipes, null, 2))
} */
// Those 2 versions doesnt contain diamond pickaxe recipe, to be fixed...
if (versionString === 'pc 1.9' || versionString === 'pc 1.10' || !recipe[0]) return
assert.deepStrictEqual(recipe[0].inShape, [
[
diamond.id,
diamond.id,
diamond.id
],
[
null,
stick.id,
null
],
[
null,
stick.id,
null
]
])
}
})
it('iron door not rotated', () => {
const recipes = getIfExist(path.join(p, 'recipes.json'))
const items = getIfExist(path.join(p, 'items.json'))
if (recipes && items) {
const ironDoor = items.find(x => x.name === 'iron_door')
const iron = items.find(x => x.name === 'iron_ingot')
const recipe = recipes[ironDoor.id]
if (!recipe[0]) return
assert.deepStrictEqual(recipe[0].inShape, [
[
iron.id,
iron.id
],
[
iron.id,
iron.id
],
[
iron.id,
iron.id
]
])
}
})
it('crafting benches has multiple recipes', () => {
const recipes = getIfExist(path.join(p, 'recipes.json'))
const items = getIfExist(path.join(p, 'items.json'))
if (recipes && items) {
const craftingTable = items.find(x => x.name === 'crafting_table')
const oakPlanks = items.find(x => x.name === 'oak_planks')
if (!oakPlanks) return // Bail if version doesn't have seperately defined planks, this prevents the test failing on versions that use metadata
const recipe = recipes[craftingTable.id]
if (!recipe[0]) return
// remove the if after fixing https://github.com/PrismarineJS/minecraft-data/issues/917
if (versionString !== 'pc 1.20.5' && versionString !== 'pc 1.20.6') {
assert.notEqual(recipe.length, 1) // Check that crafting table has multiple recipes.
}
}
})
})
})