流浪商人

流浪商人

一个为流浪商人赋予职业、大量新交易以及更多内容的数据包!

Wandering Merchants 将原版流浪商人替换为 4 种新的商人类型:农业、钓鱼、采矿和宝藏。每种商人拥有不同的可能交易集合,并且生成概率相同。

与 VanillaTweaks Wandering Trades 数据包兼容。

农业商人交易

这位商人经营所有与农业相关的事物。

交易 1
10 个甜浆果 -> 1 个绿宝石 或
10 个干海带块 -> 1 个绿宝石

交易 2
5 个南瓜 -> 1 个绿宝石 或
4 个西瓜 -> 1 个绿宝石

交易 3
1 个绿宝石 -> 1 个绒球葱
1 个绿宝石 -> 1 个蓝花美耳草
1 个绿宝石 -> 1 个兰花
1 个绿宝石 -> 1 个矢车菊
1 个绿宝石 -> 1 个蒲公英
1 个绿宝石 -> 1 个铃兰
1 个绿宝石 -> 1 个橙色郁金香
1 个绿宝石 -> 1 个滨菊
1 个绿宝石 -> 1 个粉色郁金香
1 个绿宝石 -> 1 个虞美人
1 个绿宝石 -> 1 个红色郁金香
1 个绿宝石 -> 1 个白色郁金香

交易 4
1 个绿宝石 -> 3 个黑色染料
1 个绿宝石 -> 3 个蓝色染料
1 个绿宝石 -> 3 个棕色染料
1 个绿宝石 -> 3 个青色染料
1 个绿宝石 -> 3 个灰色染料
1 个绿宝石 -> 3 个绿色染料
1 个绿宝石 -> 3 个淡蓝色染料
1 个绿宝石 -> 3 个淡灰色染料
1 个绿宝石 -> 3 个黄绿色染料
1 个绿宝石 -> 3 个品红色染料
1 个绿宝石 -> 3 个橙色染料
1 个绿宝石 -> 3 个粉色染料
1 个绿宝石 -> 3 个紫色染料
1 个绿宝石 -> 3 个红色染料
1 个绿宝石 -> 3 个白色染料
1 个绿宝石 -> 3 个黄色染料

交易 5
5 个绿宝石 -> 1 个金合欢树苗
5 个绿宝石 -> 1 个白桦树苗
5 个绿宝石 -> 1 个樱花树苗
5 个绿宝石 -> 1 个深色橡树树苗
5 个绿宝石 -> 1 个丛林树苗
5 个绿宝石 -> 1 个橡树树苗
5 个绿宝石 -> 1 个云杉树苗
5 个绿宝石 -> 1 个红树胎生苗

交易 6
2 个绿宝石 -> 1 个孢子花
1 个绿宝石 -> 2 个小型垂滴叶
1 个绿宝石 -> 1 个大型垂滴叶

钓鱼商人交易

交易 1
20 个线 -> 1 个绿宝石
5 个墨囊 -> 1 个绿宝石
5 个鹦鹉螺壳 -> 1 个绿宝石

交易 2
15 条鳕鱼 -> 1 个绿宝石
13 条鲑鱼 -> 1 个绿宝石
6 条热带鱼 -> 1 个绿宝石
4 条河豚 -> 1 个绿宝石

交易 3
2 个绿宝石 -> 5 个荧光墨囊

交易 4
3 个绿宝石 -> 1 瓶幸运药水(5:00)

交易 5
2 个绿宝石 -> 1 个海泡菜
3 个绿宝石 -> 1 个脑纹珊瑚块
3 个绿宝石 -> 1 个气泡珊瑚块
3 个绿宝石 -> 1 个火珊瑚块
3 个绿宝石 -> 1 个鹿角珊瑚块
3 个绿宝石 -> 1 个管珊瑚块

交易 6
8 个绿宝石 -> 1 个河豚桶
8 个绿宝石 -> 1 个鳕鱼桶

采矿商人交易

交易 1
15 个煤炭 -> 1 个绿宝石
22 个燧石 -> 1 个绿宝石
12 个石英 -> 1 个绿宝石

交易 2
20 个石头 -> 1 个绿宝石
16 个花岗岩 -> 1 个绿宝石
16 个安山岩 -> 1 个绿宝石
16 个花岗岩 -> 1 个绿宝石

交易 3
1 个绿宝石 -> 8 个沙子

交易 4
1 个绿宝石 -> 4 个红沙

交易 5
1 个绿宝石 -> 2 个滴水石锥

交易 6
1 个绿宝石 -> 1 个陶瓦

交易 7
1 个绿宝石 -> 1 个方解石

宝藏商人交易

交易 1
4 个鳞甲 -> 1 个绿宝石
32 个腐肉 -> 1 个绿宝石
24 个羽毛 -> 1 个绿宝石

交易 2
5 个鹦鹉螺壳 -> 1 个绿宝石
22 个下界疣 -> 1 个绿宝石
24 张纸 -> 1 个绿宝石

交易 3
3 个绿宝石 -> 1 瓶附魔之瓶

交易 4
2 个绿宝石 -> 5 个荧石

交易 5
1 个绿宝石 -> 1 个火药

交易 6
2 个绿宝石 + 5 支箭 -> 5 支药箭

配置菜单

可通过 /function clgd.trader:config/menu 访问 用于配置与流浪商人生成概率相关的数值。

计划中的功能

模组制作

添加你自己的商人变体

模组制作

本节涉及即将推出的功能

流浪商人变体的数据格式如下:{Weight:1,Name:"",TradeTable:[]}

  • Weight(可选)的作用与战利品表中的权重相同,权重越高,该商人被选中的可能性越大。如果缺失,权重默认为 1
  • Name 将在宣布商人已生成时使用(“A {name} Has Spawned!”)。
  • TradeTable 是一个列表的列表,指代商人的每个交易。每个子列表是该流浪商人可能拥有的交易列表。第一个子列表是第一个交易槽位的可能交易列表,第二个子列表是第二个交易,依此类推。

交易格式如下:{Weight:1,TradeData:{}}

  • Weight(可选)的作用与前面提到的相同
  • TradeData(可选)包含要添加的交易的信息。如果你希望有几率不出现某个交易,可以将其留空。

TradeData 的内容遵循典型村民交易的格式,带有 buy 和 sell 值,以及可选的 buyB 值:
buy:{id:"minecraft:emerald",Count:32},buyB:{id:"minecraft:book",Count:1},sell:{id:"minecraft:enchanted_book",Count:1,tag:{StoredEnchantments:{id:mending,lvl:1}}}}}

  • buy 存储用于交换 sell 中物品的物品
  • buyB(可选)是用于交换的第二个物品。(这用于图书管理员交易,绿宝石 + 书 = 附魔书)。

buy、buyB 和 sell 标签各包含 3 个子标签:

  • id - 物品的字符串 id
  • Count - (可选)物品的数量。可能默认为 1
  • tag - (可选)物品上的 NBT 数据。
教程:添加你自己的商人

本节涉及即将推出的功能

尽管我已尽力解释模组制作的工作原理,但对你们中的一些人来说可能仍然令人困惑。本教程将带你逐步完成添加自定义商人的过程。

对于本教程,你必须具备如何创建数据包的基本知识。如果你不知道如何创建数据包,可以在网上找到大量资料。TODO: 找一个好的教程并在此处链接

首先,你要创建一个带有新函数的新数据包。我将我的命名为 new_merchant.mcfunction,并将其放入命名空间 mypack 中。

在 new_merchant.mcfunction 内部,我们需要初始化商人并设置其交易:

创建村民函数

#This command does the initial setup for the merchant, assigning a name, weight, and setting up the tradetable
data modify storage clgd.trader:data NewMerchant append value {Weight:1,Name:"Special Merchant",TradeTable:[]}
#         I recommend changing this value ^^^ to be something unique. If multiple packs use the same value, then there will be issues with one pack overwriting the other. 

#This adds the first set of trade options to the tradetable
data modify storage clgd.trader:data NewMerchant.TradeTable append value []

#This adds a trade option to the first set of trades
data modify storage clgd.trader:data NewMerchant.TradeTable[-1] append value {TradeData:{buy:{id:"minecraft:coal",Count:48},sell:{id:"minecraft:diamond",Count:1}}}

#The 'data modify storage clgd.trader:data NewMerchant.TradeTable[-1]' means we are modifying the last set of trade options. Since there is only 1 right now, that means we are modifying the first one.

#This adds the second set of trade options to the tradetable
data modify storage clgd.trader:data NewMerchant.TradeTable append value []

#This adds a trade option to the second set of trades
data modify storage clgd.trader:data NewMerchant.TradeTable[-1] append value {TradeData:{buy:{id:"minecraft:diamond",Count:1},sell:{id:"minecraft:emerald",Count:2}}}

#Add a second trade option to the second set of trades
data modify storage clgd.trader:data NewMerchant.TradeTable[-1] append value {TradeData:{buy:{id:"minecraft:coal_block",Count:5},sell:{id:"minecraft:emerald",Count:2}}}

#Now that there are 2 trades, the 'data modify storage clgd.trader:data NewMerchant.TradeTable[-1]' refers to the second set of trades

此函数将为一位拥有 2 个交易的新商人创建数据。第一个交易将始终是 48 个煤炭 -> 1 个钻石,第二个交易将是 1 个钻石 -> 2 个绿宝石 或 5 个煤炭块 -> 1 个绿宝石

运行函数

现在我们已经编写了创建村民的函数,我们要确保该函数会被运行以初始化交易。这可以通过创建一个名为 clgd.trader 的新命名空间来实现,然后在该命名空间内创建一个名为 tags 的新文件夹,再创建一个名为 functions 的子文件夹,然后创建一个名为 set_default_trades.json 的文件。你还需要创建另一个名为 update_trades.json 的文件

所以你的文件夹结构应该看起来像: clgd.trader -> tags -> functions -> set_default_trades.json

set_default_trades.json 应该看起来像这样

{
  "values": [
    "mypack:new_merchant"
  ]
}