跳到正文

MerchantJS

这是一个 KubeJS 附属模组,可扩展交易系统的功能。

收藏

介绍

介绍由机器翻译自 CurseForge 原页面,仅供参考。

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 的其他作品

查看全部 →