87 lines
3.2 KiB
JavaScript
87 lines
3.2 KiB
JavaScript
/* eslint-env mocha */
|
|
const assert = require('assert')
|
|
const nbt = require('prismarine-nbt')
|
|
|
|
describe('handles block entities', () => {
|
|
for (const version of ['pc_1.15.2', 'bedrock_1.18.0', '1.20']) {
|
|
const registry = require('prismarine-registry')(version)
|
|
const Block = require('prismarine-block')(registry)
|
|
|
|
it('creates a block entity on ' + version, () => {
|
|
const chest = Block.fromStateId(registry.blocksByName.chest.defaultState)
|
|
const tag = nbt.comp({
|
|
Items: nbt.list(nbt.comp([
|
|
{
|
|
Slot: nbt.int(13),
|
|
id: nbt.string('minecraft:gray_die'),
|
|
Count: nbt.int(1),
|
|
Enchantments: nbt.list(nbt.comp([{
|
|
lvl: nbt.int(3),
|
|
id: nbt.string('minecraft:unbreaking'),
|
|
display: nbt.comp({
|
|
Lore: nbt.list(nbt.string(['{"text":"Unbreaking III"}']))
|
|
})
|
|
}]))
|
|
}
|
|
]))
|
|
})
|
|
const simplified = nbt.simplify(tag)
|
|
chest.entity = tag
|
|
assert.deepEqual(simplified, chest.blockEntity)
|
|
})
|
|
|
|
describe('signs', function () {
|
|
it('Sets entity NBT correctly on ' + version, () => {
|
|
const sign = Block.fromStateId(registry.blocksByName.standing_sign?.defaultState || registry.blocksByName.oak_sign?.defaultState)
|
|
sign.setSignText(['Hello', 'World', '!', '?'])
|
|
|
|
if (registry.supportFeature('multiSidedSigns')) {
|
|
sign.setSignText(undefined, ['Back'])
|
|
|
|
assert.deepEqual(nbt.simplify(sign.entity), nbt.simplify(nbt.comp({
|
|
id: nbt.string('minecraft:sign'),
|
|
isWaxed: nbt.byte(0),
|
|
back_text: nbt.comp({
|
|
has_glowing_text: nbt.byte(0),
|
|
color: nbt.string('black'),
|
|
messages: nbt.list(nbt.string(['{"text":"Back"}']))
|
|
}),
|
|
front_text: nbt.comp({
|
|
has_glowing_text: nbt.byte(0),
|
|
color: nbt.string('black'),
|
|
messages: nbt.list(nbt.string(['{"text":"Hello"}', '{"text":"World"}', '{"text":"!"}', '{"text":"?"}']))
|
|
})
|
|
})))
|
|
} else if (registry.type === 'pc') {
|
|
assert.deepEqual(nbt.simplify(sign.entity), nbt.simplify(nbt.comp({
|
|
id: nbt.string(registry.version['>=']('1.11') ? 'minecraft:sign' : 'Sign'),
|
|
Text1: nbt.string('{"text":"Hello"}'),
|
|
Text2: nbt.string('{"text":"World"}'),
|
|
Text3: nbt.string('{"text":"!"}'),
|
|
Text4: nbt.string('{"text":"?"}')
|
|
})))
|
|
} else if (registry.type === 'bedrock') {
|
|
assert.deepEqual(nbt.simplify(sign.entity), nbt.simplify(nbt.comp({
|
|
id: nbt.string('Sign'),
|
|
Text: nbt.string('Hello\nWorld\n!\n?')
|
|
})))
|
|
}
|
|
})
|
|
|
|
it('.signText works on ' + version, () => {
|
|
const sign = Block.fromStateId(registry.blocksByName.standing_sign?.defaultState || registry.blocksByName.oak_sign?.defaultState)
|
|
sign.signText = ['Hello', 'World']
|
|
|
|
if (registry.type === 'pc') {
|
|
assert(sign.getSignText()[0] === 'Hello\nWorld')
|
|
}
|
|
|
|
if (registry.type === 'bedrock') {
|
|
assert(sign.blockEntity.Text.toString() === 'Hello\nWorld')
|
|
assert(sign.blockEntity.id === 'Sign')
|
|
}
|
|
})
|
|
})
|
|
}
|
|
})
|