跳至主要內容

6.1 (1.19.2)

芒果凍布丁2025年3月29日大约 6 分鐘

給腳本和模組包開發者

  • 計劃事件現在接受持續時間(尤其是像 '200 t' 這樣的字符串作為刻持續時間)作為延遲!
  • NetworkEvents.fromServerNetworkEvents.fromClient 已合併為 NetworkEvents.dataReceived,它將根據腳本類型處理來自相應端的傳入數據。
  • 註冊:event.custom(T) 現在是 event.createCustom(() => T),它接受接口而不是直接對象,以避免可能的其他註冊元素的早期加載。請注意,自訂仍然存在,但由於這個原因強烈不建議使用!
  • 事件 .cancel() 現在會退出事件 - 這可能是一個小變化,但可能會影響一些腳本。以前它只會標記事件為取消並且不做任何事情,但現在它也會作為 return; 調用。
  • 添加了事件結果! 您現在可以更細粒度地控制事件的工作方式,更接近 Architectury / Minecraft 的處理方式。例如:
    ItemEvents.rightClicked('minecraft:stick', event => {
      //(請注意,這些中的每一個都會立即返回,因此一次只能工作一個!)
      event.cancel() // 取消事件並防止點擊通過
      event.success() // 取消事件並強制點擊通過
      event.exit() // 取消事件而不設置結果
      // 在支持自訂結果(如物品堆疊)的事件中,您還可以這樣做:
      event.success('minecraft:apple') // 成功 + 結果是一個蘋果 🍎
    })

目前,這個新系統僅在物品右鍵點擊事件中積極使用,但隨著時間的推移將擴展到更多事件(顯然不會破壞腳本,只需使用 event.cancel() 仍然可以正常工作)!

  • 大規模後端重寫,性能大大提高 - Lat 再次對配方事件進行了檢查,重新設計了配方的解析方式,並修復了異步配方操作,因此如果一切按預期工作,您應該會注意到重新加載時間的減少!在某些情況下,配方現在應該比僅使用原版更快地加載!
  • 不再需要標籤變通方法!(希望如此) - 我們已經修復了在第一次世界加載期間解析標籤成分的問題,並且普遍改進了配方過濾器的工作方式,因此您不再需要使用臨時的雙重重新加載變通方法(請停止使用它們)
  • 修復了 Forge 和 Fabric 上的註冊問題 - 我們已經解決了註冊事件的一些問題,因此您現在應該可以再次正確註冊流體、模組註冊等。
  • 將 kubejs/logs 文件從 .txt 重命名為 .log - 因此您現在可以在 VSCode 等中進行格式化。
  • 修復了資源包和數據包的順序 - 用戶添加的資源包和數據包現在將位於 KubeJS 生成的包之上,因此您應該可以使用它們更改紋理和其他內容。
  • 添加了從 kubejs/data 和 kubejs/assets 加載 .zip 文件的功能 - 您只需將 .zip 文件放入該文件夾,它將強制加載(在 KubeJS 之上,位於用戶包之下)
  • 將 debugInfo 配置從 kubejs/config/common.properties 移動到 local/kubejsdev.properties。不知道為什麼它最初在 common.properties 中,這是一個開發者的調試配置。
  • 改進了 Platform.mods.modid.name = 'Custom Name' - 它現在應該可以在 REI 和 ModNameTooltip 上使用自訂模組 ID。對於不存在的模組,您應該使用 Platform.getInfo('custom_mod_id').name = 'Custom Name'
  • 與 ProbeJS 的配方集成更好 - 由於 KJS 中的新架構系統,探針能夠更好地顯示成分的位置,使用更少的臨時方法!
  • **.stage(string) 配方函數不再需要配合 配方階段 運作。
  • 修復了 Fabric 上的流體紋理問題 和其他流體相關問題。
  • 修復了日誌中錯誤過長的問題 - 相信或不相信,KubeJS 本不應該為每個配方吐出 150 行錯誤。
  • 添加了一個新的包裝器 FluidAmounts 用於... 流體量! 對於那些不記得需要多少粒、錠和方塊來製作一桶的人,或者只是想要他們的腳本具有跨平台腳本兼容性的人(因為 Fabric 使用 "81000 滴" 而不是 "1000 mB" 來進行更精確的流體測量)
  • 添加了自訂吐司通知 - 您可以使用 player.notify(title), (title, subtitle)(Notification.make(...))
  • 添加了 /kubejs reload 配置命令 - 您不再需要重新啟動遊戲來更新配置!
  • 添加了 /kubejs packmode [mode] 命令 - 與上述相同,但您完全不需要處理文件。
  • 添加了 /kubejs help 命令 - 遊戲內的有用鏈接。
  • 刪除了 /kjs_hand 命令 - 改為添加了 /kjs hand(帶空格)重定向。有些人可能會討厭這個變化,但 _ 比空格難以觸及得多,我相信您會很快習慣並喜歡它。
  • 修復了流體註冊 .tag() - 現在標籤流動流體。
  • 您現在可以替換和匹配流體 - 您必須使用 Fluid.of('minecraft:water') 而不是純字符串,但您可以在 {input: Fluid.of('minecraft:water')} 配方過濾器和 event.replaceInput('*', Fluid.of('minecraft:water'), Fluid.of('minecraft:lava')) 替換函數中使用它來支持的配方類型。

給擴充模組開發者

  • 配方系統的完全重寫 - 配方現在使用配方架構,一個新的系統,幾乎完全取代了舊的 RecipeJS 對象。更多內容請參見 Discord 公告
  • 事件現在有結果 用於更精確地控制返回值,我們還添加了一個 hasListeners() 檢查以提高性能。對您來說,最明顯的變化是您的自訂事件將需要返回 EventResult
  • 修復了數據生成問題 - KJS 不應再在開發環境中阻止數據生成關閉遊戲。我們真的是生活在一個奇蹟的時代!

配方架構

來自公告:

這是大事。配方架構完全改變了在 KubeJS 中註冊自訂配方處理器的方式,並且應該希望意味著將來更少的樣板代碼。每個配方現在由包含一組配方組件的架構定義,這些組件充當底層值的“編解碼器”。對您來說,這意味著以下內容:

  • 與主要使用 RecipeJS 子類不同,您現在需要定義 RecipeSchema
  • 每個架構使用一組 RecipeKeys,這些是具有一些附加屬性(如可選的默認值和自動構造函數和方法生成設置)的命名 RecipeComponents
  • RecipeComponent 是配方元素(如輸入/輸出物品、流體,甚至只是數值)的可重用定義,具有角色(輸入、輸出、其他)、描述(用於附加模組如 ProbeJS)並包含(反)序列化和批量配方操作(即配方過濾和替換)的邏輯。在 dev.latvian.mods.kubejs.recipe.component 包中提供了許多標準組件,包括方塊、物品和流體、通用組和邏輯組件(數組、映射、和、或)以及各種原語(包括專門的數字範圍和字符)
  • 雖然配方架構將默認生成構造函數,但您可以通過使用 constructor(factory, keys) 自行定義來覆蓋此行為。請注意,這將停止默認構造函數的生成,因此如果您想保留它,您將需要再次自行定義它。(複雜自訂配方構造函數的好例子是 ShapedRecipeSchema)
  • 雖然架構在 Java 端取代 RecipeJS,但在 JS 端,創建後仍會向用戶傳遞 RecipeJS 對象,並為每個組件自動生成額外的“構建器”方法,以允許用戶在配方創建後設置例如可選值(例如 event.smelting(...).xp(20).cookingTime(100))。您還可以通過完全覆蓋配方工廠來添加更多屬性或進行額外的加載後驗證!
上次編輯於: 2025/3/29 上午5:04:42
貢獻者: Mango