介绍
MerchantJS
这是 KubeJS 的附属模组,可扩展其交易系统的功能。
随处创建自定义交易
这个模组让你可以在任何地方发起交易——和猪、末地石、附魔金苹果交易,甚至凭空交易!
// server_scripts
ItemEvents.entityInteracted(event => {
// Check if the interacted entity is a pig
if (event.getTarget().type === "minecraft:pig") {
// Create a complete trade offer
let offer0 = MerchantJSUtils.createMerchantOffer({
buy: Item.of("minecraft:potato").toNBT(),
buyB: Item.of("minecraft:bread").toNBT(),
sell: Item.of("minecraft:stone").toNBT(),
uses: 0,
maxUses: 50,
xp: 5,
priceMultiplier: 0,
demand: 0
});
// Create a simple trade offer
let offer1 = MerchantJSUtils.createMerchantOffer({
buy: Item.of("minecraft:beef").toNBT(),
sell: Item.of("minecraft:egg").toNBT()
});
// Open a custom trading GUI with the given player, title, and offers
MerchantJSUtils.openMerchant(
event.player,
Component.translatable("Little Piggy’s Cartoon House"),
[offer0, offer1]
);
}
});
上面的示例让玩家可以和猪交易,并使用完全可自定义的交易界面!
如果你需要更深入的自定义功能,请继续阅读。
选择性提供交易
先来说明每个参数的含义:
let offer0 = MerchantJSUtils.createMerchantOffer({
buy: Item.of("minecraft:potato").toNBT(), // Input item A (required)
buyB: Item.of("minecraft:bread").toNBT(), // Input item B (optional, defaults to empty)
sell: Item.of("minecraft:stone").toNBT(), // Output item (required)
uses: 0, // Number of times used (optional, default 0)
maxUses: 50, // Maximum uses (optional, default 99)
xp: 5, // Experience reward (optional, default 0)
priceMultiplier: 0, // Price fluctuation multiplier (optional, default 0)
demand: 0 // Initial demand value (optional, default 0)
});
将 maxUses 设为 0,即可让这笔交易显示为不可用。
现在将它与以下事件结合起来,动态控制交易:
// client_scripts
MerchantEvents.switchTrade(event => {
if (event.titleKey == "Little Piggy’s Cartoon House") {
// Check if it’s the pig’s trading window (works with vanilla ones too!)
if (event.getOffer().getMaxUses() == 0) {
Client.player.tell("This trade is locked...");
}
}
});
这样,你就能选择性地启用或禁用交易,非常适合基于阶段的玩法或进度系统。
兼容原版交易
原版交易已经包含许多机制。
MerchantJS 主要专注于轻松创建额外交易。
如果需要补货、经验、需求或价格波动等功能,则需要自行处理。
至少,你需要一个地方来存储交易相关数据(例如库存或存货信息),
因为每次调用 openMerchant 都会重新定义交易选项。
好在,KubeJS 的 persistentData 非常适合这一用途。
之后,只需在需要时触发数据刷新即可。
// server_scripts
MerchantEvents.afterTrade(event => {
event.player.tell(`Thank you for purchasing ${event.getOffer().result.id}! Come again soon!`);
event.player.addXP(event.getOffer().xp);
});
任何交易完成后都会触发此事件,原版交易也适用!
如果你想在交易后执行其他操作,这里就是最佳位置。
至于补货——每次打开交易窗口时,查看一下时间间隔即可。
未来计划
目前暂无——不过欢迎提出你的愿望!
常见问题
MerchantJS 支持哪些 Minecraft 版本?
MerchantJS 支持 Minecraft Java 版 1.20.1–1.21.1,共 2 个版本,可用的加载器:Forge / NeoForge。下载时注意选择和你游戏版本一致的文件。
MerchantJS 怎么安装?
先用 PCL2 或 HMCL 启动器安装对应版本的 Forge / NeoForge,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。
MerrySnow 的其他作品
查看全部 →TaCZ addon
一个为 TaCZ 提供更完善配件管理功能的扩展模组。
One Enough Lib
用于简化OE系列开发的前置库
One Enough Item
使用OEI,你可以轻松将重复物品替换为单一指定代表物品。
Moves Like Mafuyu
一款轻量级动作向模组,旨在优化探索和建造时的移动体验。
评论
登录后评论和评分