预设

召唤预设

Minecraft 自定义村民交易命令

自定义村民交易之所以复杂,是因为真正有用的数据藏在 Offers 中。本文在你复制召唤命令之前,把商店构想、村民身份、交易价格、要卖出的物品、最大使用次数以及 Tag 都集中在同一处。

预设结果

一条稳定持久的村民商店预设,包含两笔可编辑的交易以及供后续 Command Pack 逻辑使用的稳定 Tag。

输出

村民交易 Summon 输出

/summon minecraft:villager ~ ~ ~ {CustomName:{text:"Relic Trader",color:"gold"},CustomNameVisible:1b,PersistenceRequired:1b,VillagerData:{profession:"minecraft:librarian",level:5,type:"minecraft:plains"},Offers:{Recipes:[{buy:{id:"minecraft:emerald",count:12},sell:{id:"minecraft:enchanted_book",count:1,components:{"minecraft:stored_enchantments":{"minecraft:mending":1}}},maxUses:999999,rewardExp:0b},{buy:{id:"minecraft:diamond",count:3},sell:{id:"minecraft:player_head",count:1,components:{"minecraft:custom_name":{text:"Relic Token",color:"aqua",italic:false}}},maxUses:64,rewardExp:0b}]},Tags:["relic_trader"]}
Too long for Minecraft chat

The longest command line is 616 characters, 360 over the 256-character chat input limit. Pasting it into chat can truncate the line and make Minecraft report a syntax error even when the generated command is valid.

  • Use a Command Block: run /give @s command_block, place it, then paste this command into the block command field.
  • Use a .mcfunction for a reusable datapack: save the line without the leading slash at saves/<world>/datapacks/<pack>/data/<ns>/function/<name>.mcfunction with a minimal pack.mcmeta, run /reload, then run /function <ns>:<name>. Do not paste .mcfunction content into chat.

预设截图

本文使用的 NBTForge Workbench 状态,包含可见的控件以及生成的输出。

构建预设

  1. 打开 Summon,选择 villager 作为实体。
  2. 先设置 VillagerData,让职业、生物群系类型与等级与商店角色相匹配。
  3. 在 Offers.Recipes 中,把每一笔交易都写成一对 buy 和 sell。
  4. 添加 PersistenceRequired 和一个 Tag,让后续命令可以找到或保护这个商店。

交易数据是嵌套结构

村民交易命令很难调试,因为物品数据可能出现在 buy、buyB 或 sell 里。请先保留一笔最简单的交易并让它正常工作,再逐步添加其他配方。

NBTForge 在这里很有用,因为这条命令可以紧挨相关的物品预设。先把要卖出的物品做好,再把它粘贴或重建为 sell 堆叠。

  • 永久商店请使用 maxUses。
  • 如果交易不应让村民升级,请使用 rewardExp:0b。
  • 用 Tag 处理清理、保护或区域逻辑。

地图经济的工作流

村民商店通常属于更大的 Command Pack。请把召唤命令与区域设置、标题提示,或测试用村民的备用清除命令一起搭配使用。

保持交易价格的可读性。如果商店需要稀有货币,请先把货币本身做成独立的 Give 预设。

把预设落地到真实的 Project

请把 Minecraft 自定义村民交易命令当成一个已经过测试的起点,而不仅仅是一段可以复制的字符串。当输出第一次正常工作之后,请用清晰的 Project 名字保存它,记下目标 Minecraft 版本,并把这条预设和相关的设置命令(例如记分板、Boss 血条、战利品表或重置命令)放在一起。

在把预设正式应用到地图、服务器或 Command Pack 之前,请优先用复制出来的命令实体去执行,而不是直接依赖当前还开着的 Workbench。这样可以发现缺失的依赖、过期的选择器、错误的版本选择,以及那些只因为本地测试状态恰好存在才碰巧能跑的命令。

  • 通过共享命令保留所选的 Edition 与 Version。
  • 在使用伤害、击杀、清除或传送之前,先用无害命令测试选择器。
  • 把长命令搬到 Project 或函数风格的流程里,不要直接粘进聊天框。
  • 在修改实体、物品组件、坐骑乘客或数据包资源之后,务必再次检查警告。

FAQ

村民交易里能卖出带自定义名称的物品吗?

可以。要卖出的物品可以携带物品组件或 NBT,具体取决于所选的 Java 版本系列。

为什么我做的自定义村民会消失?

请加上 PersistenceRequired,并在目标难度与对应区域里测试命令。同时保留一个 Tag,以便后续能找到这个商店实体。

这条预设什么时候应该成为 Command Pack 的一部分?

当输出依赖于初始化命令、重置命令、战利品资源、记分板状态或反复测试时,就把它作为 Command Pack 条目;一次性、无害的单条命令依然可以直接从输出里复制。

打开这个工作流

从相关 Summon 工作台开始,然后按你的世界调整预设字段。