跳至主要內容

MerchantJS

芒果凍布丁2025年12月7日大约 2 分鐘forge-1.20neoforge-1.21

本模組是 KubeJS 的附屬,擴充其在交易系統方面的功能。

自訂額外交易

本模組允許你在任意情境發起交易:與豬交易、與終界石交易、與附魔金蘋果交易,甚至是空手發起的交易!

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,z
      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。
});

若將最大可交易次數設定為 0,該交易項目會顯示為不可用狀態。

此時可搭配本模組提供的切換交易事件:

MerchantEvents.switchTrade(event => {
  if (event.titleKey == "小飛豬卡通屋") {
    // 判斷是否為小飛豬的交易介面,原版交易也會支援!
    if (event.getOffer().getMaxUses() == 0) {
      Client.player.tell("該交易已被鎖住...");
    }
  }
});

如此即可實現選擇性開放交易,適合用於階段性玩法。

承襲原版交易機制

原版交易功能相當完整,本模組主要提供便捷的額外交易介面;補貨、經驗、需求、價格波動等機制則需由你自行實作。

至少需要一個地方儲存庫存等交易相關資料,否則每次呼叫 openMerchant 都會重新定義交易。

KubeJS 提供的 persistentData 就很方便了,剩下的關鍵在於何時觸發資料刷新。

MerchantEvents.afterTrade(event => {
  event.player.tell(`非常感謝您購買 ${event.getOffer().result.id},歡迎下次再來!`);
  event.player.addXP(event.getOffer().xp);
});

此事件在交易完成後觸發,對原版交易亦有效;若要在交易後執行額外行為,可在此處處理。

至於補貨,可於開啟交易介面時檢查時間間隔來判斷是否補貨。

後續計畫

暫無,歡迎許願。

example.png
example.png
上次編輯於: 2025/12/7 上午4:32:41
貢獻者: EvanHsieh0415