[Day18] Minecraft玩家一定要會的- 合成 - iT 邦幫忙

文章推薦指數: 80 %
投票人數:10人

今天開始來說說配方(recipe)的功能。

在Minecraft世界內,有三種不同類型的配方:. 合成(Crafting):分為有形配方(shaped)與無形配方(shapeless),用來產生新的物品或 ... 第11屆iThome鐵人賽 DAY 18 2 SoftwareDevelopment [Minecraft-當個創世神]從玩遊戲到設計遊戲系列第 18篇 [Day18]Minecraft玩家一定要會的-合成 11th鐵人賽 softwaredevelopment 遊戲設計 山姆大叔 團隊DJS組一團 2019-10-0310:05:311424瀏覽 今天開始來說說配方(recipe)的功能。

在Minecraft世界內,有三種不同類型的配方: 合成(Crafting):分為有形配方(shaped)與無形配方(shapeless),用來產生新的物品或方塊 燒煉(Smelting):將一個物品或方塊變成另一個物品或方塊 釀造(Brewing):用來製作藥水 我們先從合成開始吧! 合成 合成是在Minecraft世界中要生存一定要學會的技能。

我們在[第二天]有提到樹木可以用來合成工作台,而合成得到的工作台就是利用配方(其實是有形配方)並且使用合成類型。

我們這邊就從工作台的配方來說明我們要如何製作新的合成配方。

在Forge的原始程式碼內,net.minecraft.item.crafting套件下有一個RecipesCrafting類別,這裡定義了一些基礎的合成配方,在其中有一個工作台的合成配方程式碼: p_77589_1_.addRecipe( newItemStack(Blocks.crafting_table), newObject[]{"##","##",'#',Blocks.planks} ); p_77589_1_代表的是CraftingManager物件,不是重點我們先不要管它。

我們看addRecipe()提供的兩個參數: ItemStack:由這個配方所產生的物品堆(ItemStack),這邊定義了這個合成配方所摻生的物品是什麼(只會有一個物品,但可以是複數);我們這邊定義這個配方產生的東西是Blocks.crafting_table,即工作台方塊這個物件。

recipeComponents:配方定義的內容。

這邊會使用一個Java物件陣列包裝,這個物件陣列的內容格式我用Regex正則表達式來說明: 第一部分:(\".{1,3}\"){1,3} 第二部分:\'\S\' 第三部分:Item、Block或ItemStack物件 a.第一部分用來描述這個合成配方會使用的位置對應,規定每一個字串都需要用雙引號"包起來。

舉例來說: "XXX","XXX","XXX":表示合成需要三列,並且每一列都是填滿指定物品 "X X","XXX","X X"(注意有空白):表示合成需要三列,第一與第三列的中間行是空的,其他地方填滿指定物品 "XX ","XX "(注意有空白):表示合成需要連續兩列,這兩列都必須是首兩行有指定物品 or "XX":表示合成需要任意一列,這一列需要連續兩行有指定物品(下面幾種都合配方規則) ororor b.第二部分與第三部分是一組的,這裡規定第二部分的字元都需要用單引號'包起來。

用來描述合成配方中的字元代表是什麼物品。

舉例來說: 'X',Blocks.sand:表示描述配方中的X這個字元代表是沙這個方塊 '#',Items.apple:表示描述配方中的#這個字元代表是蘋果這個物品 'A',Blocks.glass,'B',newItemStack(Items.diamond_sword):表示描述配方中的A這個字元代表是玻璃這個方塊,而B這個字元代表是鑽石劍這個物品 回到一開始的工作台合成配方: addRecipe( newItemStack(Blocks.crafting_table), newObject[]{"##","##",'#',Blocks.planks} ); 這裡就可以很清楚知道它的製作方式: 需要連續兩列,並且連續兩行都是使用任意類型的木材 合成(有形配方) 我們這邊先使用有形配方合成我們前幾天新增加的終界方塊:透過擺放泥土方塊成一個"X"字形可以獲得。

到主程式內,在我們前幾天使用的FMLInitializationEvent事件方法內,加上下面這段程式碼: @EventHandler publicvoidinit(FMLInitializationEventevent){ GameRegistry.addRecipe( newItemStack(enderBlock), "XX", "X", "XX", 'X', Blocks.dirt ); } 這裡細心的邦友可能會發現:為什麼這裡我們沒有用newObject[]{}的方式敘述參數內容,而是直接一個一個參數用逗號分開呢? 我們前面有說過,第二個參數是Java的物件陣列,但實際上這個參數的定義是(Object...params),這個在Java內稱之為ArbitraryNumberofArguments,也就是參數內容接受一個到多個的Object變數,或是直接給一個Object陣列。

這裡如果你用物件陣列的方式寫,Intellij也會提示你這裡可以直接使用多個參數,不用額外宣告一個物件陣列。

存檔進入遊戲,把泥土擺到你的工作台內合成一個終界方塊吧! 合成(無形配方) 無形配方與有形配方只有一個差別:無形配方不行定義內容。

可以這樣思考:有形配方通常是有一個"聯想"的方式,由配方內容與擺放位置來得到合成的物品(如四個木材可以合成四方形的工作台);而無形配方就沒有任何形狀可以想像。

我們這裡就加一個無形配方,讓1個終界方塊可以直接建立9個白色藥丸。

一樣回到主程式,在前面加的有形配方後面,再加上我們的無形配方程式碼: @EventHandler publicvoidinit(FMLInitializationEventevent){ //有形配方 GameRegistry.addShapedRecipe( newItemStack(enderBlock), "ZZ", "Z", "ZZ", 'Z', Blocks.dirt); //無形配方 GameRegistry.addShapelessRecipe( newItemStack(pillItem,9), enderBlock ); 無形配方只需要兩個參數: 第一個是要透過合成產生的ItemStack物件,這裡我們產生9個藥丸物品。

第二個參數可以是一個到多個,表示這個合成配方的來源物品(Item,Block或ItemStack)是哪些;這裡我們只要1個終界方塊當作我們的配方來源 存檔進入遊戲,現在可以將終界方塊產生9個加速小藥丸了!以後看到苦力怕再也不會怕怕了! 注意這裡的終界方塊不管放哪裡都可以產生藥丸物品喔,有興趣的人可以試看看。

留言1 追蹤 檢舉 上一篇 [Day17]創造獨一無二的物品 下一篇 [Day19]燒煉與釀造 系列文 [Minecraft-當個創世神]從玩遊戲到設計遊戲 共30篇 目錄 RSS系列文 訂閱系列文 29人訂閱 26 [Day26]來玩玩實體AI吧(上) 27 [Day27]來玩玩實體AI吧(下) 28 [Day28]載入其他模組 29 [Day29]Trickortreat! 30 [Day30]麥塊之魂與你同在 完整目錄 1則留言 0 CapillaryJ iT邦新手4級‧ 2019-10-0310:41:05 原來合成程式碼regex長這樣XD 回應 2 檢舉 山姆大叔 iT邦新手4級‧ 2019-10-0312:09:09 檢舉 這是我根據原始碼去推斷的,原本程式碼並沒有這樣的正則表達式喔XD 這是我根據原始碼去推斷的,原本程式碼並沒有這樣的正則表達式喔XD 修改 山姆大叔 iT邦新手4級‧ 2019-10-0312:10:58 檢舉 這部分倒是提示我表達式好像有點問題...我再來修改一下 這部分倒是提示我表達式好像有點問題...我再來修改一下 修改 登入發表回應 我要留言 立即登入留言 iT邦幫忙鐵人賽 參賽組數 1087組 團體組數 52組 累計文章數 20449篇 完賽人數 572人 鐵人賽最新文章 送件電路板的流程分享 [Bonus系列]-和useEffect很像的useLayoutEffect 淺談DevOps&Observability 以Ardiuno控制CPU散熱器呼吸燈 超深度鐵人賽後自我審視 建立表與表之間的關聯(Day28) 【Day?(31)】測試環境無法登入 使用程式來管理資料庫(DBMigrate)(Day27) Day31-遲來的鐵人賽心得 STM32CubeMX專案配置詳細教學,點亮LED 前往鐵人賽 技術推廣專區 [Day2]抓取每日收盤價 [Day1]基本工具安裝 利用python取得永豐銀行API的Nonce [Day03]tinyML開發板介紹 永豐金融API測試員 [Day01]在享受tinyML這道美食之前 [Day3]使用ta-lib製作指標 [Day4]函數打包與買進持有報酬率試算 計算API所需要的參數:HashID 計算API所需要的參數:IV 前往鐵人賽 熱門問題 爬蟲IP被鎖 請問有辦法用python寫出判斷一檔股票爆大量嗎? 請問有免費能企業統一管理的類似Teamviewer工具嗎 被退信 SQL執行順序 新手學Jquery時碰上Javascript寫法的問題 (以解決)請問GOOGLEmeet如果開會.有沒有什麼方法可以讓與會人員在開會時候自動將語音轉成文字的會議紀錄 請問顯現在網頁報表都用啥做 新舊網站共用網址問題 急!!想請問Google表單問題 IT邦幫忙 熱門tag 看更多 13th鐵人賽 12th鐵人賽 11th鐵人賽 鐵人賽 2019鐵人賽 2018鐵人賽 javascript 2017鐵人賽 windows python php windowsserver linux c# 資訊安全 程式設計 css vue.js sql mysql 熱門回答 新手學Jquery時碰上Javascript寫法的問題 爬蟲IP被鎖 被退信 請問有免費能企業統一管理的類似Teamviewer工具嗎 新舊網站共用網址問題 SQL執行順序 DS1821+相容性問題 請問git在拉遠端下來更新,可以指定先更新到某一個版本嗎 (以解決)請問GOOGLEmeet如果開會.有沒有什麼方法可以讓與會人員在開會時候自動將語音轉成文字的會議紀錄 TIPTOP複製表格 熱門文章 [無廣告]自動封鎖,詐騙電話,騷擾電話,行銷,廣告,推銷,來電未顯示,不明的電話,響一聲就掛,一接就掛,一接秒掛 送件電路板的流程分享 網路的小技巧-4 【原創】自製資料庫管理工具-JasonQuery JS[筆記]Javascript優良部分、糟糕與不良的部分 計算機概論-程式語言ProgrammingLanguages 什麼是ERP?ERP的重要性是甚麼? 純JS實作照片上傳、下載與預覽 Emotet社交工程郵件,寄件者或是內容中包含貴公司的員工資料或是簽名檔 Webpack 一週點數排行 更多點數排行 海綿寶寶(antijava) 尼克(nickliao1) 天黑(horace_work) 居然解出來了(partyyaya) raytracy(raytracy) ㊣浩瀚星空㊣(yoching) kobecho(kobecho) by2048(by2048) 一級屠豬士(hitomitanaka) ShawnGood(ShawnGood) × At 輸入對方的帳號或暱稱 Loading 找不到結果。

標記 {{result.label}} {{result.account}} 關閉



請為這篇文章評分?