我的世界1.20.1命令方块自定义村民交易
Play熊猫
2025年06月29日 10:50

之前自己做着玩发现网上大多都是旧版本的了,直接引用到1.20.1会有名字(customname)失效显示“无业”名字或者药水物品什么的指令里面改动了交易界面不改动,所以自己用NBT复制重新解析了一下算是

—————————————————————————————————————

话不多说,咱直接上个例子,带有(模组属性)的是我mod带的属性,实际运用中不修改的部分都可以不输入,但是要注意各个环节的大括号(括号的正确使用最大影响了指令结构不出错),所以建议手打一个指令后面的复制过去修修改改

/summon minecraft:villager 46.50 83.50 4.50 { #此处为生成村民以及坐标

# ===== 基础属性 =====

Brain: {memories: {}}, #清空AI记忆

 HurtByTimestamp: 0,  #最近受伤时间戳(0表示未受伤)

 ForgeData: {},     #Forge模组数据(空)

  #这三项一般不用管,有特殊需要可以自行研究

# ===== 实体属性 =====该部分为实体通用数值,按需要研究更改即可

 Attributes: [

  {Base: 0.5d, Name: "minecraft:generic.movement_speed"},  // 移动速度

  {Base: 20.0d, Name: "minecraft:generic.max_health"},   // 最大生命值(20心)

  {Base: 0.1d, Name: "caelus:fall_flying"},         // 鞘翅飞行相关(模组属性)

 {Base: 0.0d, Name: "reach-entity-attributes:attack_range"}, // 攻击距离(模组)

  {Base: 0.0d, Name: "minecraft:generic.knockback_resistance"}, // 击退抗性

  {Base: 0.0d, Name: "obscure_api:regeneration"},      // 生命恢复(模组)

  {Base: 2.0d, Name: "minecraft:generic.attack_damage"},   // 攻击伤害

  {Base: 0.0d, Name: "minecraft:generic.armor"},      // 护甲值

  {Base: 0.0d, Name: "reach-entity-attributes:reach"}    // 交互距离(模组)

 ],

  

 // ===== 状态标记 =====该部分为实体通用数值,按需要研究更改即可

 FoodLevel: 0b,     // 饥饿值(村民无用)

 Invulnerable: 0b,    // 是否无敌(0=false),如使用这项切记添加标签,否则无法通过常规方法清除该实体

 FallFlying: 0b,     // 是否正在滑翔(鞘翅)

 ForcedAge: 0,      // 强制年龄(繁殖用),这项很鸡肋,自定义村民不存在需要繁殖的说法

 Gossips: [],      // 村民 gossip 数据(空)(这项是什么八卦闲聊属性)

 PortalCooldown: 0,   // 传送门冷却

 AbsorptionAmount: 0.0f, // 伤害吸收护盾值

 LastRestock: 0L,    // 上次补货时间(长整型)一般用来做交易直接0L

 FallDistance: 0.0f,   // 掉落距离

 CanUpdate: 1b,     // 是否可更新(1=true)

 DeathTime: 0s,     // 死亡时间(0=存活)

 Xp: 12,         // 当前经验值(12点)

 LastGossipDecay: 22119811L, // 上次 gossip 衰减时间

  

 // ===== 模组兼容性数据 =====该部分为模组需要联动才做修改,自行研究

如不需要只保留ForgeCaps: {}或者取消这项均可

 ForgeCaps: {

  "illageandspillage:webbed": {webbed: 0b}, // 是否被蛛网缠住(模组)

  "cataclysm:hook_cap": {hasHook: 0b},   // 钩爪相关(模组)

  ...(其他模组数据省略)...

 },

  

 // ===== 物品相关 =====该部分为实体通用数值,按需要研究更改即可

 HandDropChances: [0.0f, 0.0f], // 手中物品掉落概率,这个一般用于生成怪物实体

 PersistenceRequired: 1b,    // 是否永久存在(1=true)

 ASLoaded: 1b,         // 是否已加载(存档标记)

 Tags: ["ctrlHealthM76"],    // 自定义标签(用于识别),如果选用了无敌,可以利用kill @e[tag=.......]的方法杀死这个实体

  

 // ===== 实体状态 =====该部分为实体通用数值,按需要研究更改即可

 Age: 0,            // 年龄(0=成年)

 BalmData: {},         // 药水数据(空){}内按照实体药水效果填写即可

 Motion: [0.0d, 0.0d, 0.0d],  // 移动速度向量(静止)

 YouthPotion: 0b,        // 是否喝下青春药水

 Health: 20.0f,         // 当前生命值(20心)

 LeftHanded: 0b,        // 是否左撇子

 Air: 300s,           // 剩余氧气值

 OnGround: 0b,         // 是否在地面(0=空中)这项一般不用改,0b下NoAI开启情况实体会锁定在生成坐标

// ===== 交易系统 =====本次的主要环节

 Offers: {

  Recipes: [

   // 交易1:20绿宝石 → 附魔金苹果(例证纯原版交易)

   {

    maxUses: 9999999,    // 交易次数

    buy: {id: "minecraft:emerald", Count: 20b}, // 消耗20绿宝石

    sell: {id: "minecraft:enchanted_golden_apple", Count: 1b}, // 获得1附魔金苹果

    xp: 1,          // 提供1点交易经验

    uses: 12,        // 已交易次数(12次)初始是0,这里是因为我试验用过

    rewardExp: 1b      // 是否奖励经验(1=true)

   },

   // 交易2:1王国银票 → 3个猎兽场传送石(添加NBT和注释例证)

   {

    maxUses: 9999999,

    buy: {id: "minecraft:paper", Count: 1b, //一张纸(王国银票)

tag: {  // 自定义NBT

      display: {

       Lore: ['{"text":"等同 绿宝石×64 的凭证"}'],// 注释

       Name: '{"text":"王国银票"}'//物品名字

      }//display项结束

     }//tag项结束

    },//消耗项结束

    sell: {id: "minecraft:flint", Count: 3b, //三个燧石(猎兽场传送石)

     tag: { 

      display: {

       Lore: ['{"text":"使用后传送进入猎兽场"}'],

       Name: '{"text":"猎兽场传送石"}'

      }

     }

    },//获得项结束

    xp: 1,

    uses: 0, // 当前交易次数(0次)

    rewardExp: 1b

   }

//交易二结束

  ]

 },

  

 // ===== 村民特性 =====

 NoAI: 1b, // 禁用AI(静止不动)

 Rotation: [0.0f, 0.0f], // 朝向角度(水平0°,垂直0°)

 HandItems: [{}, {}],   // 手中物品(空)

 RestocksToday: 0,    // 今日补货次数

 ArmorDropChances: [0.0f, 0.0f, 0.0f, 0.0f], // 护甲掉落概率

 CustomName: '{"text":"黑市商人","color":"#FFFFFF"}', // 显示名称(白色)

CustomNameVisible: 1b,//名称永远显示

 Fire: 0s,        // 燃烧时间(0=未燃烧)

 ArmorItems: [{}, {}, {}, {}], // 护甲槽(空)

 CanPickUpLoot: 1b,    // 可拾取物品(1=true)

 VillagerData: {

  profession: "minecraft:none", // 职业(无职业)

  level: 1,           // 交易等级(1级)

  type: "minecraft:plains"    // 村民类型(平原)

 },

 HurtTime: 0s,      // 受伤无敌帧(0=未受伤)

 Inventory: []      // 背包物品(空)

}

至此一个自定义村民交易就结束了,红色部分作为主要修改项,绿色部分按需要修改即可,一般来说绿色部分不需要做改动,具体的改动项其实各个版本相差不大,只是这个模板下的生成指令更完善,不会出现物品或村民的名称失效的情况,整体来说各个版本的实体生成指令在小项上都没什么大区别。

最后在这里我给出最省事省力的偷懒方法:在AI的对话框中复制本文链接,按“.......根据这个网页的内容给我生成一个叫XXX的村民,第一项交易为X个注释为X的名为X购买Y个注释为Y的名为Y,第二项交易.....”以此内推,有其他的需求可以加在里面输出给AI,最后AI输出的指令去掉注释照着输入命令方块就行。