
MerchantJS
这个模组是KubeJS的附属,扩展了其在交易系统中的功能。
MerchantJS
这个模组是 KubeJS 的一个附属模组,扩展了其在交易系统中的功能。
随时随地创建自定义交易
该模组允许你在任何地方发起交易——与猪交易、用末地石交易、用附魔金苹果交易,甚至凭空交易!
// server_scripts
ItemEvents.entityInteracted(event => {
// 检查交互的实体是否为猪
if (event.getTarget().type === "minecraft:pig") {
// 创建一个完整的交易选项
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
});
// 创建一个简单的交易选项
let offer1 = MerchantJSUtils.createMerchantOffer({
buy: Item.of("minecraft:beef").toNBT(),
sell: Item.of("minecraft:egg").toNBT()
});
// 使用指定的玩家、标题和交易选项打开自定义交易界面
MerchantJSUtils.openMerchant(
event.player,
Component.translatable("小猪的卡通屋"),
[offer0, offer1]
);
}
});
上面的示例让玩家可以与猪交易,并且交易界面是完全可自定义的!
如果你需要更深度的自定义——请继续阅读。
选择性交易开关
首先来解释每个参数的含义:
let offer0 = MerchantJSUtils.createMerchantOffer({
buy: Item.of("minecraft:potato").toNBT(), // 输入物品A(必填)
buyB: Item.of("minecraft:bread").toNBT(), // 输入物品B(可选,默认为空)
sell: Item.of("minecraft:stone").toNBT(), // 输出物品(必填)
uses: 0, // 已使用次数(可选,默认为0)
maxUses: 50, // 最大使用次数(可选,默认为99)
xp: 5, // 经验奖励(可选,默认为0)
priceMultiplier: 0, // 价格波动倍数(可选,默认为0)
demand: 0 // 初始需求值(可选,默认为0)
});
将 maxUses 设置为 0 会使交易显示为不可用。
现在将这个事件与动态交易控制结合起来:
// client_scripts
MerchantEvents.switchTrade(event => {
if (event.titleKey == "小猪的卡通屋") {
// 检查是否为猪的交易窗口(也适用于原版交易!)
if (event.getOffer().getMaxUses() == 0) {
Client.player.tell("这笔交易已被锁定...");
}
}
});
这样你就可以有选择地启用或禁用交易,非常适合基于阶段或进度的游戏机制。
原版交易兼容性
原版交易已经有很多机制。 MerchantJS 主要专注于轻松创建额外的交易。 至于补货、经验、需求或价格波动等功能——你需要自行处理。
至少,你需要一个地方来存储与交易相关的数据(如库存或货物信息),
因为每次调用 openMerchant 都会重新定义交易选项。
幸运的是,KubeJS 的 persistentData 非常适合这个用途。
然后,剩下的就是在需要时触发数据刷新。
// server_scripts
MerchantEvents.afterTrade(event => {
event.player.tell(`感谢购买 ${event.getOffer().result.id}!欢迎再次光临!`);
event.player.addXP(event.getOffer().xp);
});
该事件在每次交易完成后触发——对原版交易同样有效! 如果你想在交易后触发额外操作,这里就是正确的位置。
至于补货——只需在打开交易界面时检查时间间隔即可。
未来计划
目前暂无计划——但欢迎提出建议!
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。