/* eslint-disable max-len */ /* eslint-disable require-jsdoc */ const nbt = require('prismarine-nbt'); const mcData = require('minecraft-data')('1.18.2'); const sleep = require('sleep-promise'); const chatMessage = require('prismarine-chat')('1.18.2'); const Vec3 = require('vec3'); const relativePosition = new Vec3(0, 0, 0); function inject(bot, dcclient, config) { bot.createCore = (layers = config.core.layers) => { const core = { isCore(position) { return position.x >= core.start.x && position.x <= core.end.x && position.y >= core.start.y && position.y <= core.end.y && position.z >= core.start.z && position.z <= core.end.z; }, run(command) { try { if (config.useChat && command.startsWith('minecraft:tellraw @a ') && !command.includes('Console') && !command.includes('Discord')) { bot.chat(chatMessage.fromNotch(command.replace('minecraft:tellraw @a ', '')).toMotd().replaceAll('\xa7', '&')); return; } relativePosition.x++; if (relativePosition.x >= 16) { relativePosition.x = 0; relativePosition.y++; } if (relativePosition.y >= layers) { relativePosition.y = 0; relativePosition.z++; } if (relativePosition.z >= 16) { relativePosition.z = 0; } const impulseMode = bot.options.host === '0.tcp.ap.ngrok.io'; const location = { x: core.start.x + relativePosition.x, y: core.start.y + relativePosition.y, z: core.start.z + relativePosition.z, }; if (impulseMode) bot.write('update_command_block', {location, command: command.substring(0, 32767), mode: 0, flags: 0}); bot.write('update_command_block', {location, command: command.substring(0, 32767), mode: impulseMode ? 2 : 1, flags: 0b100}); } catch (e) { return; } }, async loopPlace() { try { const fillCommand = `/minecraft:fill ${core.start.x} ${core.start.y} ${core.start.z} ${core.end.x} ${core.end.y} ${core.end.z} command_block{CustomName:'{"text":"ChomeNS Bot Core","color":"yellow"}'}`; const location = {x: Math.floor(bot.position.x), y: Math.floor(bot.position.y) - 1, z: Math.floor(bot.position.z)}; bot.write('set_creative_slot', { slot: 36, item: { present: true, itemId: mcData.itemsByName['repeating_command_block'].id, itemCount: 64, nbtData: nbt.comp({BlockEntityTag: nbt.comp({ Command: nbt.string(fillCommand), auto: nbt.byte(1), TrackOutput: nbt.byte(0), })}), }, }); await sleep(50); bot.write('block_dig', { status: 0, location, face: 1, }); await sleep(50); bot.write('block_place', { location, direction: 1, hand: 0, cursorX: 0.5, cursorY: 0.5, cursorZ: 0.5, insideBlock: false, }); fillCore(); } catch (e) { return; } }, // fillCore(useCore) { // const fillCommand = `/minecraft:fill ${core.start.x} ${core.start.y} ${core.start.z} ${core.end.x} ${core.end.y} ${core.end.z} command_block{CustomName:'{"text":"ChomeNS Bot Core","color":"yellow"}'}`; // if (useCore==true) { // bot.core.run(fillCommand); // } else { // bot.chat(fillCommand); // } // bot.emit('core_filled'); // }, }; bot._client.on('position', (position) => { bot.position = position; bot.emit('position', position); }); // bot._client.on('block_change', (packet) => { // if (core.isCore(packet.location) && packet.type===0) fillCore(); // }); // bot._client.on('multi_block_change', (packet) => { // if (core.start===packet.chunkCoordinates || core.end===packet.chunkCoordinates) fillCore(); // }); bot.on('end', () => { clearInterval(interval); }); fillCore(); bot.core = core; function fillCore() { core.start = new Vec3( Math.floor(bot.position.x / 16) * 16, 0 /* bot.position.y */, Math.floor(bot.position.z / 16) * 16, ).floor(); core.end = core.start.clone().translate(16, layers, 16).subtract(new Vec3(1, 1, 1)); // core.fillCore(); } bot.core.loopPlace(); bot.on('position', bot.core.loopPlace); const interval = setInterval(() => { bot.core.loopPlace(); }, config.core.refillInterval); return core; }; } module.exports = {inject};