LookAtMySuitBot/js/node_modules/prismarine-block/test/entity.test.js

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')
}
})
})
}
})