chore: initial commit
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import {EventEmitter} from 'node:events';
|
||||
import {createRequire} from 'node:module';
|
||||
import test from 'node:test';
|
||||
import {tsImport} from 'tsx/esm/api';
|
||||
|
||||
const {create_function_manager} = await tsImport('../bot/function/init.ts', import.meta.url);
|
||||
const require = createRequire(import.meta.url);
|
||||
const mf = createRequire(require.resolve('@wp2508/mineflayer'));
|
||||
const {Vec3} = mf('vec3');
|
||||
|
||||
test('manager fills omitted need_look defaults and preserves explicit values', async () => {
|
||||
const bot = new EventEmitter();
|
||||
bot.entity = {id: 1, position: new Vec3(0, 0, 0), eyeHeight: 1.62, height: 1.8};
|
||||
bot._client = {};
|
||||
bot.entities = {2: {id: 2, name: 'cow', position: new Vec3(2, 0, 0), width: 1, height: 2}};
|
||||
let looks = 0;
|
||||
let attacks = 0;
|
||||
bot.lookAt = async () => { looks++; };
|
||||
bot.attack = () => { attacks++; };
|
||||
const block = {name: 'stone', type: 1, position: new Vec3(2, 1, 0)};
|
||||
bot.blockAt = () => block;
|
||||
bot.activateBlock = async (_block, _face, _delta, forceLook) => assert.equal(forceLook, 'ignore');
|
||||
const manager = await create_function_manager({bot_instance: bot, bot_status: 'online'});
|
||||
try {
|
||||
for (const category of manager.get_function_list().filter(category => ['entity', 'block'].includes(category.path))) {
|
||||
for (const fn of category.function_list) {
|
||||
assert.equal(fn.args.at(-1).name, 'need_look');
|
||||
assert.equal(fn.args.at(-1).default, false);
|
||||
}
|
||||
}
|
||||
assert.equal(await manager.run('entity', 'attack_nearest_entity', ['cow', 3, true]), true);
|
||||
assert.equal(looks, 0);
|
||||
assert.equal(await manager.run('entity', 'attack_nearest_entity', ['cow', 3, true, false]), true);
|
||||
assert.equal(looks, 0);
|
||||
assert.equal(await manager.run('entity', 'attack_nearest_entity', ['cow', 3, true, true]), true);
|
||||
assert.equal(looks, 1);
|
||||
assert.equal(attacks, 3);
|
||||
assert.equal(await manager.run('block', 'use_position_block', [2, 1, 0, 1]), true);
|
||||
assert.equal(looks, 1);
|
||||
assert.equal(await manager.run('block', 'use_position_block', [2, 1, 0, 1, true]), true);
|
||||
assert.equal(looks, 2);
|
||||
for (const args of [['cow', 3], ['cow', 3, true, null], ['cow', 3, true, 'true']])
|
||||
await assert.rejects(manager.run('entity', 'attack_nearest_entity', args));
|
||||
} finally { manager.dispose(); }
|
||||
});
|
||||
Reference in New Issue
Block a user