ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Mineflayer 版本演进全史:从 0.0.2 到 4.39.0 的功能与架构变迁

Mineflayer 版本演进全史:从 0.0.2 到 4.39.0 的功能与架构变迁 游戏开发【免费下载链接】mineflayerCreate Minecraft bots with a powerful, stable, and high level JavaScript API.项目地址https://gitcode.com/gh_mirrors/mi/mineflayer点击查看免费下载Mineflayer 是 PrismarineJS 社区维护的 Minecraft Bot 高级 JavaScript API用 Node.js 驱动一个可编程的机器人玩家。本指南以仓库 docs/history.md 的完整变更日志为主干结合 lib/loader.js、lib/version.js 与 lib/plugins 等源码系统梳理从 0.0.2 到 4.39.0 的功能演进、破坏性变更与架构重构脉络。读完本文你将理解 Mineflayer 的插件化架构如何形成、Promise 化与 Windows API 统一为何是 3.x/4.x 的分水岭、以及每一代 Minecraft 版本支持背后的工程成本从而在升级依赖、排查兼容性问题时更有把握。一、阅读变更日志的正确姿势版本号与支持范围Mineflayer 的变更日志采用## x.y.z的分节结构版本号遵循语义化版本SemVer主版本号Major提升伴随破坏性变更次版本号Minor通常对应一个新的 Minecraft 版本支持或一组新特性补丁号Patch则是修复。当前仓库 package.json 中的版本为4.39.0lib/version.js 给出了经过测试的完整支持列表const testedVersions [1.8.8, 1.9.4, 1.10.2, 1.11.2, 1.12.2, 1.13.2, 1.14.4, 1.15.2, 1.16.5, 1.17.1, 1.18.2, 1.19, 1.19.2, 1.19.3, 1.19.4, 1.20.1, 1.20.2, 1.20.4, 1.20.6, 1.21.1, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.8, 1.21.9, 1.21.11, 26.1] module.exports { testedVersions, latestSupportedVersion: testedVersions[testedVersions.length - 1], oldestSupportedVersion: testedVersions[0] }从最早支持1.8.8到最新的26.1跨度横跨十余个 Minecraft 大版本——这正是 history.md 背后那条漫长演进线。在 lib/loader.js 的createBot中版本校验逻辑会读取服务器版本若高于latestSupportedVersion或低于oldestSupportedVersion则直接抛出明确错误这是 4.x 版本中显式支持版本策略的落地。二、0.0.x 时代Minecraft 1.5.2 → 1.8.3从零搭建核心能力0.0.x 阶段是 Mineflayer 的功能打地基期几乎每个版本都在新增一个核心子系统其演进顺序本身就是一个 Minecraft Bot 的能力全景图。2.1 最早期游戏状态感知0.0.2 ~ 0.0.70.0.2加入了bot.game.spawnPoint、spawn/rain 支持、被踢kick事件处理、settings 支持、经验experience支持、床bed支持、生命值感知与实体追踪 API。0.0.3加入bot.blockAt(point)、mineflayer.blocks/biomes/items枚举、chunk事件以及经典的 chatterbox 示例。0.0.4对外暴露Block、Biome、Entity三个核心类。0.0.5修复维度切换时的 chunk 卸载保证blockAt始终准确。0.0.6引入了懂得重力的物理引擎新增 jumper 示例有人聊天就跳并加入respawn事件同时把bot.game.spawnPoint迁移到bot.spawnPoint。0.0.7提供bot.time.day/age与time事件、bot.entities实体地图、bot.look(yaw, pitch, force)与bot.lookAt(point, force)。从源码结构看这些早期能力今天依然以独立插件形式存在于 lib/plugins 中spawn_point.js、rain.js、health.js、experience.js、bed.js、time.js、entities.js、settings.js等一一对应。这一每个能力一个插件文件的组织方式正是后来插件化架构的原型。2.2 交互能力聊天、移动、挖掘、建造0.0.8 ~ 0.0.130.0.8chat事件不再抑制自己的发言支持上/下坐骑与攻击修复草丛/枯灌木被当作实心方块的问题新增告示牌支持block.signText、bot.updateSign。0.0.9加入疾跑sprint、message事件所有消息都会触发、bot.tell(username, message)。0.0.10 ~ 0.0.11修复 Z 轴行走过慢的物理 bugcreateBot可以不传参数默认名为 Player。0.0.12一次性加入三块拼图——物品栏Item类、bot.inventory、bot.equip、bot.tossStack、挖掘bot.startDigging、bot.canDigBlock、blockUpdate:(x,y,z)事件与建造bot.placeBlock(referenceBlock, faceVector)此外还有画Painting与经验球orb支持。0.0.13新增mineflayer.recipes枚举修复高空挖掘崩溃。挖掘是历史文档中反复打磨的能力。对照当前 lib/plugins/digging.jsbot.dig的完整链路包括计算digTime结合手持物品、附魔、头盔上的 Aqua Affinity、是否在水中/空中、按block_dig协议包发起挖掘status 0、按挖掘时间setTimeout发送完成包status 2、期间每 350ms 摆臂并监听对应坐标的blockUpdate事件确认服务器侧的方块状态更新同时支持bot.stopDigging()中途取消status 1并触发diggingAborted事件——这些细节都可以在 0.0.x 时代的条目里找到雏形。2.3 容器与合成窗口系统的萌芽0.0.14 ~ 0.0.200.0.14是早期最重要的版本之一加入合成bot.craft(recipe, count, craftingTable)、bot.recipesFor(...)、mineflayer.windows、mineflayer.Recipebot.inventory变为InventoryWindow实例新增windowOpen/windowClose事件与bot.unequip、bot.toss、bot.activateBlockblockUpdate事件签名统一为(oldBlock, newBlock)。0.0.15修复bot.sleep完全不可用的问题新增bot.isSleeping、sleep/wake事件参数从sleep(bedPoint)改为sleep(bedBlock)。0.0.16加入箱子支持mineflayer.Chest、bot.openChestblock.meta/item.meta重命名为metadata。0.0.17被recalled撤回未发布有效内容。0.0.19加入熔炉与发射器支持bot.equip(itemType, ...)改为bot.equip(item, ...)升级 minecraft-protocol 0.7.0 后createBot不再接收email参数改为username 可选password——不留密码时以离线模式直连服务器若服务器开启正版验证则会被踢。0.0.20完善发射器支持mineflayer.Dispenser、bot.openDispenser。窗口与容器体系在此阶段开始成形。值得注意的是 0.0.14 引入的windowOpen/windowClose事件与Window.count(itemType, [metadata])方法在后来的 3.0.0 中被彻底重构见后文而 0.0.19 中正版验证的行为说明直到今天仍适用于离线/正版两种服务器。2.4 功能补全与稳定性收尾0.0.21 ~ 0.0.350.0.21宣布与旧版 C/Qt 实现的 mineflayer 功能对齐新增bot.activateItem()、bot.deactivateItem()、bot.useOn(targetEntity)。0.0.22 ~ 0.0.23bot.tell更名为bot.whisper与whisper事件一致加入附魔台支持。0.0.24 ~ 0.0.29修复挖掘树叶不回调bot.dig(block, [timeout], [callback])简化为bot.dig(block, [callback])新增bot.digTime(block)、block.material、block.harvestTools、window.emptySlotCount()所有方块/物品拥有无歧义的name与displayName暴露mineflayer.materials枚举mineflayer.Location帮助定位 chunk 边界。0.0.30 ~ 0.0.35挖掘速度更快、bug 更少挖掘被中断时抛出的错误带错误码创造性模式下挖掘时间为 0装备动作把快捷栏当作简易 LRU 缓存以缓解挖掘后立即换工具的竞态刚挖完方块后点击窗口会稍作等待修复交易被拒绝的竞态。这一阶段收尾为 1.0.0 积累了完整的最小功能集也为后面每个版本新增一个 Minecraft 版本支持打下了协议层基础。三、1.x 时代1.6.2 → 1.8.3协议升级与自动化测试1.0.0minecraft-protocol 升级到 0.11支持 Minecraft 1.6.2chat/whisper/message事件参数有小幅调整。1.1.0支持 1.8.3把枚举数据迁入 minecraft-data引入基于 vanilla 服务器的 Circle CI 自动化测试示例全部支持 argv 参数位置体系变更——y坐标始终表示机器人脚底位置。1.2.0新增ContainerWindow以兼容非原版插件并给出/invsee示例bot.look/bot.lookAt支持回调挖掘时立即摆臂新增forcedMove事件。1.3.0 ~ 1.4.0放置方块时摆臂并看向方块中心placeBlock使用lookAt后放置并带回调修复灵魂沙速度修复下界天光。1.5.0createBot新增checkTimeoutInterval使用 prismarine-item新增多机器人示例uuid变为带连字符的字符串。1.6.0记分板功能物理从 50 tps 调整为 20 tps与服务器 tick 对齐bot.setCommandBlock。1.7.0 ~ 1.8.0登录阶段监听 disconnect修复multi_block_change去掉聊天过滤器以支持 UTF-8新增actionBar事件与村民交易支持。1.x 时代的核心贡献是协议与数据层开始独立成库minecraft-data、prismarine-recipe、prismarine-windows、prismarine-item这为 2.0.0 的跨版本能力埋下伏笔。四、2.x 时代1.8 → 1.16跨版本支持与架构分水岭4.1 2.0.0首次跨版本BREAKING2.0.0 是历史文档中第一个明确标注 BREAKING 的版本支持 1.8、1.9、1.10、1.11 四个版本新增箱子支持破坏性变更Block、Entity、Recipe等 prismarine 类不再挂载在mineflayer.X下必须自行 requireminecraft-data也不再作为mineflayer.blocks暴露。这一变更的本质是让数据与实现分层使得同一套代码可以按服务器版本加载不同的数据描述这是跨版本支持的架构前提。今天 lib/loader.js 中的bot.registry require(prismarine-registry)(serverPingVersion)与bot.supportFeature bot.registry.supportFeature正是这条路的延续——按需实例化版本化注册表并用supportFeature特性开关处理版本差异该机制在 2.13.0 引入 feature flags 时成型。4.2 2.x 中后期能力大爆发2.4.0 ~ 2.19.02.4.0自动版本检测无需手动指定版本。2.7.0支持末地维度新增title事件、bot.getControlStates、潜行控制。2.8.0大量新特性——方块实体、方块视野block in sight、进食、Tab 补全、钓鱼、更好的告示牌文本、repl 示例、记分板修复。2.9.0 ~ 2.10.0通用聊天模式适配更多聊天插件挖掘前增加更多校验、bot.swingArm()、TPS 插件、chunk 卸载正确处理。2.11.0 ~ 2.12.0暴露columns与blockEntities新增 discord.js 示例支持 1.13。2.13.0 ~ 2.14.0支持 1.14更多测试、窗口重构、feature flags睡眠时检测周围是否有怪物支持 1.15俄语翻译。2.15.0 ~ 2.16.0TypeScript 类型定义index.d.ts自此成为一等公民protodef 编译器副手off-hand支持。2.17.0物理引擎重构并更新 mcdata 以更好支持 1.14/1.15。2.19.0findBlock大幅提速Milliseconds to find any block成为 README 卖点。4.3 2.x 末期Promise 化前夜2.20.0 ~ 2.41.02.22.0digTime计算改进暴露blockEntity.raw改用 prismarine-physics 作为物理引擎从 2.17.0 的重构走向依赖独立物理库。2.23.0支持 1.16修复音符盒。2.26.0使用并暴露 prismarine-world 作为bot.world新增itemDrop事件解析实体元数据判断潜行。2.28.0 ~ 2.35.0nearestEntity、heldItemChanged事件、blockAtCursorblockInSight进入弃用流程。2.36.0里程碑——所有异步方法同时返回 Promise 并接受回调。2.37.0村民与 Trader 全面 Promise 化保护 action id 不超过 32767。2.38.0bot.game.serverBrand属性hideErrors默认改为 true。2.39.0 ~ 2.41.0bot.chat支持数字挖掘时可保持头部不动waitForTicks支持 1.16.5。从 2.36.0 起历史文档频繁出现Promise 化字样——这是 3.x 时代大规模破坏性变更的前奏。五、3.x 时代1.17 → 1.18Windows API 统一与回调终结5.1 3.0.0Windows API 的破坏性重构3.0.0 是 history.md 中信息量最大的条目之一其 BREAKING 变更奠定了今天所有容器交互的形态移除Chest、EnchantmentTable、Furnace、Dispenser、Villager五个类它们统一为Window发射器、漏斗hopper与普通容器走同一套代码槽位更新事件收敛为两个Window类的updateSlot与updateSlot:slotId此前在 3 个不同的 EventEmitter 上存在setSlot、setSlot:windowId、windowUpdate、updateSlot四种信号且并非全部工作正常所有窗口现在与将来都具备withdraw与deposit方法。在 lib/plugins/chest.js、lib/plugins/furnace.js 等文件中可以看到openContainer/openBlock统一返回一个Window实例后续的存款取款、槽位监听都在这一抽象上进行。README 与 API 文档docs/api.md也同步把openChest更名/统一为openContainer4.4.0 中进一步落实。5.2 3.x 的功能线3.1.0 ~ 3.18.03.1.0 ~ 3.4.0dig增加face参数placeBlock修复 once 泄漏支持雨中/雷暴中睡觉交易与附魔修复。3.5.0index.js的大部分逻辑迁入 lib/loader.js——插件加载器架构正式成型。3.6.0bot.addChatPattern()与bot.addChatPatternSet()加入chatAddPattern进入弃用4.34.0 教程中最终替换掉。3.7.0bot.removeChatPattern()、bot.awaitMessage()、插件示例、允许把nmpclientminecraft-protocol 客户端作为选项传入createBot。3.8.0资源包支持氧气水下呼吸管理placeEntity()bot.quit更名为bot.end附魔台测试与 anvil 测试。3.10.0中文翻译由 Nyaasu66 提供docs/zh 目录即由此而来队伍team支持waitForChunksToLoad移除轮询与递归。3.11.0支持 1.17.1新增bot.usingHeldItem。3.12.0blockAtEntityCursor绕过检测灵敏度的反作弊look支持俯仰速度pitch speed默认关闭聊天模式开关。3.13.0记分板displayName动态计算SkinsRestorer 修复放置方块时摆臂。3.14.0 ~ 3.15.0prismarine-entity 版本化支持 1.18。3.16.0改用 prismarine-chunk 处理方块实体。3.17.0 ~ 3.18.0回调全面标记弃用并打印警告最终从类型与文档中移除所有回调。3.17.0 → 3.18.0 → 4.0.0 构成一条清晰的回调退出三部曲社区也因此有了足够长的迁移窗口。六、4.x 时代1.18.2 → 26.1现代化、测试驱动与版本矩阵6.1 4.0.0Promise 化收尾与新阶段开启4.0.0BREAKING——移除所有回调只保留 Promise同时useEntity保持潜行状态。4.1.0支持 1.18.2withdraw/deposit增加nbt选项。4.2.0全面迁移到 prismarine-registrybot.creative.clearSlot/clearInventory只用openContainer开箱。4.3.0 ~ 4.4.0minecraft-data 3.0.0entityAtCursoractivateBlock/openBlock支持方向参数循环与链式命令方块支持末影箱加入箱子类型攻击者检测加入实体受伤事件。6.2 版本矩阵快速跟进4.5.0 ~ 4.25.04.x 时代的次版本号几乎与 Minecraft 版本号一一对应且间隔明显加快4.5.01.19 支持示例改用bot.registry。4.7.0 / 4.8.01.19.2 / 1.19.3聊天解析更新。4.9.01.19.4修复重生包导致的世界高度不更新player_info包属性持久化自动重生变为可开关respawn选项默认 true见 lib/loader.js。4.10.01.20 支持未知元数据实体处理。4.11.0更多窗口点击模式useChests测试扩展新增下界nether外部测试。4.12.0物理重构prismarine-physics 独立演进。4.13.0 ~ 4.15.0鞘翅elytra飞行与烟花火箭支持entity.displayName切换村民交易多处修复bot.heldItem与bot.entity.equipment修复fireworkRocketDuration计算修复entityAtCursor补进类型。4.18.01.20.2bot.respawnmaxCatchupTicks选项。4.19.0bot.tabComplete()支持超时补bot.teams类型。4.20.0 / 4.20.11.20.4记分板删除时从ScoreBoard.positions移除取消挖掘时修复硬编码挖掘面。4.21.0 ~ 4.25.01.20.6pitchSpeed类型、1.21、1.21.3、1.21.4。6.3 4.x 中后期测试可靠性与不睡死工程4.26.0 ~ 4.39.04.26.0 之后历史文档的重心明显转向测试基础设施与可靠性这与 test/externalTests 下数十个真实服务器测试文件fishing.js、bed.js、useChests.js、title.js、sound.js、bossBar.js、nether.js等相互印证。4.26.0CI 使用 Node 22修复setTimeout传 Infinity 的问题switchWorld中移除事件监听器时的 TypeErrorBunJS 场景修复坐骑在载具消失后不卸载。4.28.0新增 title、experience、time 三个外部测试EntityHurt事件可检测攻击者。4.29.0 / 4.30.0新增 sound、boss bar 测试player_info处理更新文档链接从 wiki.vg 迁移到 minecraft.wiki。4.31.0 ~ 4.36.01.21.5 / 1.21.6 / 1.21.8 / 1.21.9-1.21.10 / 1.21.11 陆续跟进CI 升级 Node 24npm 发布切换为 OIDC 可信发布。4.37.0交易测试改为每次存款一整组使每次转移都成为拾取-放置placeBlock在服务器拒绝放置时立即 reject关闭窗口后同步服务器端物品栏pre-1.17player_info相关修复暴露披风 URLskinData粒子状态发送给服务器。4.37.1同步实体位置处理中的 yaw/pitch 转换把 1.21.9 的 velocity 字段变更回移植到旧版本修复死亡处理器中的挖掘崩溃与坏 skin JSON 解析崩溃heldItemChanged触发修复。4.38.0支持 26.1Minecraft 版本号进入年.月命名纪元健康模块在生成时发送player_loaded使 1.21.4 服务器立即接受交互大量测试改为等待条件而非固定 sleep。4.39.0新增blockEntityData与signOpen事件用于下界测试isRaining在雨量过零时翻转测试可用LEVEL_SEED固定服务器种子用spawn_entity的速度字段验证activateItem熔炉外部测试通过快进CookTime提速。值得一提的是 4.39.0 的blockEntityData/signOpen事件——它们在 lib/plugins/block_actions.js 与相关协议处理中落地是方块实体协议从被动读取走向主动事件的体现也被 test/externalTests/nether.js 用作断言依据。七、纵向观察四条贯穿历史的演进主线7.1 数据层独立minecraft-data / prismarine-registry从 1.x 迁入 minecraft-data到 2.0.0 不再挂载mineflayer.blocks再到 4.2.0 全面使用 prismarine-registry——版本数据彻底从业务代码中剥离。lib/loader.js 中bot.registry、bot.majorVersion、bot.supportFeature的赋值以及 lib/version.js 的 testedVersions 数组共同构成按版本加载数据 特性开关的架构这也是 1.8.8 到 26.1 二十余个版本能共存的根本原因。7.2 插件化架构从单体 index.js 到插件加载器3.5.0把 index.js 移入 lib/loader.js是明确的分界。如今 lib/loader.js 维护一个包含 40 内部插件的注册表从bed、chat、digging、physics到particle、villager、anvil、place_entity通过pluginLoader(bot, options)注入并支持options.plugins覆盖/禁用内部插件、追加外部插件。这与 2.6.1 的plugins选项可禁用内部插件、3.7.0 的插件示例一脉相承。内置插件列表正是历史文档中各能力条目的现在时形态。7.3 异步模型回调 → 双轨 → 纯 Promise0.0.x 时代全是回调bot.dig(block, [timeout], [callback])2.36.0 双轨并存3.17.0 打印弃用警告3.18.0 从类型和文档移除4.0.0 彻底删除。今天的 API 文档docs/api.md与类型定义index.d.ts中已看不到回调签名。7.4 测试体系从 Circle CI 到版本矩阵 外部测试1.1.0 首次引入 vanilla 服务器自动测试2.13.0更多测试4.x 阶段外部测试test/externalTests覆盖了交易、箱子、熔炉、床、钓鱼、标题、音效、BossBar、下界、鞘翅等场景且测试写法从固定 sleep演变为等待条件/事件如isRaining读雨量、交易测试等 4.39.0 条目所示并配套 test/common/durationsReporter.js 这类耗时报告器。CI 层面则经历 Node 18 → 22 → 24、每次 4 个 MC 版本并行、超 1.5 倍变慢即失败的演进。八、结语如何用这份历史文档对普通开发者history.md 是升级指南每次升级先查看对应版本的 BREAKING 条目3.0.0 的 Windows 统一、4.0.0 的 Promise 化是最大的两次再结合 docs/api.md 确认签名变化。对插件作者它是能力地图任何出现在日志里的功能都能在 lib/plugins 找到对应实现文件在 test/externalTests 找到真实服务器的验证用例。对想要贡献的人它是工程文化的缩影从 0.0.2 的先能用到 4.39.0 的测试不睡死、版本矩阵全覆盖Mineflayer 用十余年的迭代证明了协议解耦 数据分层 插件化这一路线在 Minecraft Bot 领域的可行性——这也是它今天能横跨 1.8.8 到 26.1 的底气所在。赞分享游戏开发【免费下载链接】mineflayerCreate Minecraft bots with a powerful, stable, and high level JavaScript API.项目地址https://gitcode.com/gh_mirrors/mi/mineflayer点击查看免费下载相关推荐mineflayer 更新历史全解读从 0.0.2 到 3.14.0 的 API 演进与版本里程碑mineflayer 更新历史全解读从 0.0.2 到 3.14.0 的 API 演进与版本里程碑 本文以仓库中 docs/zh/history.md htt游戏开发google_maps_flutter 版本演进全景从 0.0.2 预览版到 2.18.0 的功能、API 与迁移指南google_maps_flutter 版本演进全景从 0.0.2 预览版到 2.18.0 的功能、API 与迁移指南 导读 本文以 Flutter 官方维护跨平台移动开发UI组件开发工具Ripple 编译器 tsrx/ripple 版本演进全解从 0.0.2 到 0.1.64 的技术变更史Ripple 编译器 tsrx/ripple 版本演进全解从 0.0.2 到 0.1.64 的技术变更史 tsrx/ripple 是 Ripple 框架的前端Web框架SSR上一篇Flutter Deer接口设计RESTful API最佳实践下一篇EmotiVoice极速部署指南Docker镜像一键启动3分钟体验情感TTS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表