UNPKG

mineflayer-schem

Version:

A mineflayer plugin for building structures from schematic files (modern and legacy) with advanced chest and block support.

170 lines (128 loc) 4.48 kB
# mineflayer-schem This plugin extends [mineflayer](https://github.com/PrismarineJS/mineflayer) to build structures from schematic files, supporting both modern and legacy formats, recent Minecraft versions, and advanced inventory/chest management. ## Features - Support for schematic files (`.schematic`, `.schem`, `.litematic`, NBT), both modern and legacy formats. - Compatible with the latest Minecraft versions (1.8–1.20+). - Automatic construction with single or multiple bots. - Automatic item retrieval from the nearest chest. - Advanced handling of directional blocks, stairs, slabs, and special blocks. - Detailed progress tracking and events. - Configurable speed and error handling options. - Construction statistics and error logging. ## Installation ```bash npm install mineflayer-schem ``` ## Example Usage ```javascript const mineflayer = require('mineflayer'); const { pathfinder } = require('mineflayer-pathfinder'); const { Build, builder } = require('mineflayer-schem'); const { Schematic } = require('prismarine-schematic'); const fs = require('fs').promises; const path = require('path'); const bot = mineflayer.createBot({ host: 'localhost', port: 25565, username: 'BuilderBot', version: '1.20.4' // Change according to your server }); bot.loadPlugin(pathfinder); bot.loadPlugin(builder); bot.once('spawn', async () => { const schematic = await Schematic.read( await fs.readFile(path.resolve(__dirname, './schematic/house.schem')), bot.version ); while (!bot.entity.onGround) await new Promise(r => setTimeout(r, 100)); const build = new Build(schematic, bot.world, bot.entity.position.floored()); const options = { buildSpeed: 1.0, onError: 'pause', retryCount: 3, useNearestChest: true, bots: [bot] }; bot.on('builder_progress', (progress) => { const percent = Math.floor((progress.completed / progress.total) * 100); console.log(`Progress: ${percent}% (${progress.completed}/${progress.total})`); }); bot.on('builder_error', (error) => { console.error('Error:', error.message); }); bot.on('builder_finished', () => { console.log('Build finished!'); }); await bot.builder.build(build, options); }); ``` ## API ### builder(bot, options) Injects the builder plugin into the bot. - `buildSpeed`: Build speed multiplier (default: 1.0) - `onError`: Error strategy ('pause', 'cancel', 'retry', 'skip') - `retryCount`: Number of retries on failure (default: 3) - `useNearestChest`: Automatically use nearby chests for items (default: true) - `bots`: Bots collaborating on the build (default: [bot]) ### Build #### new Build(schematic, world, position, area = null) Creates a new build instance. - `schematic`: Schematic object. - `world`: Bot's world. - `position`: Vec3 where to build. - `area`: Optional area for partial builds. #### Properties - `actions`: Pending actions. - `completedActions`: Completed actions. - `properties`: Block properties. - `isPaused`: If build is paused. - `isCancelled`: If build is cancelled. #### Methods - `getAvailableActions()` - `removeAction(action)` - `pause()` - `resume()` - `cancel()` - `getProgress()` - `markActionComplete(action)` - `getItemForState(stateId)` - `getFacing(stateId, facing)` - `getPossibleDirections(stateId, pos)` - `getBuildErrors()` ### Events - `builder_progress` - `builder_error` - `builder_paused` - `builder_resumed` - `builder_cancelled` - `builder_finished` ## Supported Formats - `.schematic` classic (MCEdit) - `.schem` modern (WorldEdit/Minecraft 1.13+) - `.litematic` (Litematica) - Raw NBT ## Advanced ### Automatic Chest Support The bot detects and retrieves items from the nearest chests as needed for the schematic. ### Multi-bot Multiple bots can collaborate on the same build using the `bots` option. ### Statistics and Errors Get detailed metrics and errors during the process with `getProgress()` and `getBuildErrors()`. ## Contributing Pull requests and suggestions are welcome! ## License MIT ## Recent Changes ### 1.5.2 - Version bump to fix npm publish error. ### 1.5.1 - README update and prep for npm publish. ### 1.5.0 - Support for modern and legacy schematic formats - Automatic detection and usage of the nearest chest - Improved error handling and statistics - Support for latest Minecraft blocks and properties - Performance improvements and multi-bot support ### 1.4.x - Route optimization and new configuration options - Basic chest support