# KubeJS 6 基礎教學 KubeJS是流行於1.16.5級以上版本的遊戲魔改模組(也有1.12.2),支援Forge和Fabric,可以使用javascript來改變物品的製作方式,或是修改一些有的沒的遊戲內容。 更詳細的內容請查看[官方wiki](https://wiki.latvian.dev/books/kubejs)。 **此教學適用於KubeJS 6+,Minecraft 1.19.2+。**(1.18.2及以下版本的部分語法不同) 在編輯javascript程式碼時,建議可以使用[Visual Studio Code](https://code.visualstudio.com/)來編輯。 需要安裝的模組: * [KubeJS](https://www.curseforge.com/minecraft/mc-mods/kubejs) * [Architectury API](https://www.curseforge.com/minecraft/mc-mods/architectury-api)(前置模組) * [Rhino](https://www.curseforge.com/minecraft/mc-mods/rhino)(前置模組) * [ProbeJS](https://www.curseforge.com/minecraft/mc-mods/probejs) * vscode延伸模組ProbeJS 啟動遊戲後,輸入指令`/probejs dump`並等待文件生成就可以使用ProbeJS的功能了 接下來使用vscode打開.minecraft資料夾中的kubejs資料夾 ![image](https://hackmd.io/_uploads/rJXZJWU9a.png) 裡面會有這些文件 ![image](https://hackmd.io/_uploads/Hy5zZb8cp.png) JS腳本主要存放在 server_scripts、startup_scripts 和 client_scripts 這三個資料夾中。如果腳本數量較多,建議使用資料夾進行組織,或者使用不同的文件名進行細分。 * server_scripts : 每次伺服器資源重新加載時加載的腳本,用於修改配方、標籤、戰利品表以及處理伺服器事件(可以使用 ```/reload``` 重新加載) * startup_scripts : 在遊戲啟動期間僅加載一次的腳本,用於添加物品等只能在遊戲加載時進行的事情(可以使用 ```/kubejs reload_startup_scripts``` 重新加載,但可能不起作用) * client_scripts : 每次客戶端資源重新加載時加載的腳本,用於 JEI 事件、工具提示和其他客戶端方面的事務(可以使用 F3+T 重新加載) --- # 物品配方 (server_scripts) KubeJS 可以刪除、新增、編輯物品的合成配方。 程式碼需要寫在`ServerEvents.recipes((event) => {})`的大括號中 ```javascript= ServerEvents.recipes((event) => { //寫在這裡面 }) ``` ## 物品配方刪除 使用語法`event.remove()`來刪除合成配方。 而他還有多種刪除條件: * output * input * mod * id * type 以下是官方wiki的範例: ```javascript= // 移除所有配方(明顯不推薦使用空條件): event.remove({}) // 移除所有輸出為石鎬的配方: event.remove({ output: 'minecraft:stone_pickaxe' }) // 移除所有輸出包含羊毛標籤的配方: event.remove({ output: '#minecraft:wool' }) // 移除所有包含紅石粉標籤的任何輸入的配方: event.remove({ input: '#forge:dusts/redstone' }) // 移除所有屬於 Farmer's Delight 的配方: event.remove({ mod: 'farmersdelight' }) // 移除所有營火烹飪的配方: event.remove({ type: 'minecraft:campfire_cooking' }) // 移除掉所有提供石頭但不包括熔煉配方的配方: event.remove({ not: { type: 'minecraft:smelting' }, output: 'stone' }) // 移除掉所有輸出為烤雞且在營火上烹飪的配方: event.remove({ output: 'minecraft:cooked_chicken', type: 'minecraft:campfire_cooking' }) // 移除任何高爐或熔爐配方且輸出為 minecraft:iron_ingot 的配方: event.remove([{ type: 'minecraft:smelting', output: 'minecraft:iron_ingot' }, { type: 'minecraft:blasting', output: 'minecraft:iron_ingot' }]) // 依據ID移除一個配方,例如 data/minecraft/recipes/glowstone.json: // 注意:配方ID和輸出是不同的! event.remove({ id: 'minecraft:glowstone' }) ``` ## 新增物品配方 ### 有序合成 需要特定的排列方式才能合成的物品,例如鎬子 ```javascript= event.shaped("10x minecraft:netherite_pickaxe", [ //設定要製作的物品以及數量 "AAA", " B ", //依這工作台的九宮格排列 " B " ], { A: "minecraft:netherite_block", //設定用來製作的物品 B: "minecraft:nether_star" }); ``` 也可以讓九宮格變成一行: ```javascript= event.shaped("3x minecraft:stone", ["AAA", " B ", "AAA"], { A: "minecraft:dirt", B: "minecraft:glass" }); ``` ### 無序合成 不需要特定排列方式就能合成出物品,例如書 ```javascript= event.shapeless("64x fire_charge", [ "8x minecraft:egg",//拿火焰彈當範例,新增了一個只要8顆雞蛋跟一個火藥就能和出64顆火焰彈的配方 "minecraft:gunpowder" ]) ``` ### 新增模組的特殊配方 有些模組的物品不是透過工作檯合成,而如果想要幫這些物品新增合成方式,可以利用`event.custom({})`語法以及json來新增合成表。 安裝[winrar](https://www.rarlab.com/)或[7-zip](https://7-zip.org/)。 對模組的jar檔案點右鍵,並選擇開啟方式 ![image](https://hackmd.io/_uploads/S1mbegUqp.png) 進入到`\data\<模組名>\recipes`之後,就可以看到所有物品的合成方式。 比如我想要更改這個手槍的合成。 ![image](https://hackmd.io/_uploads/SyIublUqp.png) 從`recipes`資料夾中找到 ![image](https://hackmd.io/_uploads/HJk6-eUqp.png) 打開檔案後,把裡面的內容複製起來 ```json= { "type": "cgm:workbench", "materials": [ { "count": 14, "tag": "forge:ingots/iron" } ], "result": { "item": "cgm:pistol" } } ``` 把這些內容貼到`event.custom()`中 ```javascript= event.custom({ "type": "cgm:workbench", "materials": [ { "count": 14, "tag": "forge:ingots/iron" } ], "result": { "item": "cgm:pistol" } }); ``` 並更改`materials`中的內容 ```javascript= event.custom({ "type": "cgm:workbench", //使用的工作檯 "materials": [ //材料 {"item":"minecraft:iron_ingot", "count":64}, //64個鐵錠 {"item":"minecraft:oak_log", "count":10} // 10個橡木原木 ], "result": { //合成出手槍 "item": "cgm:pistol" } }); ``` ![image](https://hackmd.io/_uploads/r1ZMalUcp.png) 其他模組的做法也一樣,把合成表複製下來,然後把材料改掉就可以了。 ### 熔煉(熔爐、高爐、煙燻爐、營火) 熔爐 : `event.smelting()` 高爐 : `event.blasting()` 煙燻爐 : `event.smoking()` 營火 : `event.campfireCooking()` 官方wiki範例: ```javascript= //在熔爐裡把一顆石頭燒成三個礫石 event.smelting("3x minecraft:gravel", "minecraft:stone") //在高爐裡把一個鐵錠燒成十個鐵粒 event.blasting("10x minecraft:iron_nugget", "minecraft:iron_ingot") //在煙燻爐裡把一個玻璃燒成遮光玻璃 event.smoking("minecraft:tinted_glass", "minecraft:glass") //在營火上把木棒燒成火把 event.campfireCooking("minecraft:torch", "minecraft:stick") ``` #### 切石機 跟上面的語法基本上一樣,使用以下語法: ```javascript event.stonecutting("9x minecraft:redstone", "minecraft:redstone_block") ``` 前者為輸出項(9個紅石粉),後者為輸入項(紅石磚) ### 輔助函式 有時候會遇到合成表的排列方式相同的情況,為了減少不必要的重複程式碼,可以使用函式來簡化程式碼。 ```javascript= let example = (output, materials1, materials2) => { //建立一個函式,名稱可以自訂,這個函式有三個變數,變數名稱也都可以自訂,變數數量也都可以自行增加 event.shaped(output, [ //這行的output要對應到上面建立的第1個變數 "BCB", " B ", //合成表 " C " ], { B: materials1, //對應到materials1 C: materials2 //對應到materials2 }); } example("minecraft:netherite_pickaxe", "minecraft:netherite_block", "minecraft:nether_star"); /*先呼叫函式example,在括號中依序輸入 合成出來的物品(第一項)、materials1(第二項)、materials2(第二項), * 所以這行程式的意思就是 輸出獄髓鎬, materials1(B)為獄髓磚, materials2(C)為地獄之星*/ example('minecraft:blast_furnace', 'minecraft:furnace', "cgm:mini_gun"); //輸出高爐, materials1(B)為熔爐, materials2(C)為mini gun ``` # 自訂方塊、物品 (startup_scripts) 此功能的程式碼需要放置在startup_script資料夾,透過重新開啟遊戲來載入新內容。 可以使用`/kubejs reload startup_scripts`重新載入(可能不起作用) ## 物品 一個簡單的自訂物品: ```javascript= StartupEvents.registry("item", (event) => { event.create("test_item") }) ``` ## 方塊 一個簡單的自訂方塊: ```javascript= StartupEvents.registry("block", (event) => { event.create("example_block") }); ``` ![image](https://hackmd.io/_uploads/r17CWg5ca.png) 這串程式會創建一個名叫`Example Block`的方塊,方塊id為`example_block`。由於沒有指定顯示名稱,在遊戲裡顯式的方塊名稱會跟方塊id一樣,只是底線變成空格。 外觀可以放在kubejs中的assets資料夾中。 如果想要更改方塊資訊,可以在下一行加上"方法(Method)" 如果想指定顯示名稱,可以加上`.displayName()` ```javascript= StartupEvents.registry("block", (event) => { event.create("example_block") .displayName("範例方塊") }); ``` 如果還想設定其他方塊資訊,只要在下面一行再加上其他的方法就好了 [其他的方法](https://wiki.latvian.dev/link/106#bkmrk-all-block-builder-me) ![image](https://hackmd.io/_uploads/BkkICyq9p.png) # tags(標籤) # 擴充模組 ## [MoreJS](https://www.curseforge.com/minecraft/mc-mods/morejs) MoreJS在KubeJS的基礎上增加了更多的事件。 主要是村民以及附魔還有NBT結構加載。 --- ## [KubeJS Create](https://www.curseforge.com/minecraft/mc-mods/kubejs-create) --- ## [KubeJS Thermal](https://www.curseforge.com/minecraft/mc-mods/kubejs-thermal) --- ## [KubeJS Mekanism](https://www.curseforge.com/minecraft/mc-mods/kubejs-mekanism) --- ## [KubeJS Immersive Engineering](https://www.curseforge.com/minecraft/mc-mods/kubejs-immersive-engineering) --- ## [KubeJS Blood Magic](https://www.curseforge.com/minecraft/mc-mods/kubejs-blood-magic) --- ## [KubeJS Tinkers Construct](https://www.curseforge.com/minecraft/mc-mods/kubejs-tinkers-construct) --- ## [Ponder for KubeJS](https://www.curseforge.com/minecraft/mc-mods/ponder) 未完成