[Day18] Minecraft玩家一定要會的- 合成 - iT 邦幫忙
文章推薦指數: 80 %
今天開始來說說配方(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}}
關閉
延伸文章資訊
- 1Minecraft老玩家,最常用模組,詳細教程 - 每日頭條
5.如果合成表使用了Ore Dictionary(礦物詞典),可以使用的的物品會輪番顯示,按住Shift鍵可以停止變換;. 6.右下角有個"?"的按鈕,3x3配方在工作檯中 ...
- 2minecraft 合成表生產配方
minecraft 合成表生產配方. 名称, 材料, 输入 » 输出 ... 作为建筑材料使用并可以被染料染色。这配方并不推荐使用因为羊毛能轻易的从羊身上获得。 TNT · 火药 + 沙子 ...
- 3合成
已移除的合成配方
- 4配方 - Minecraft基岩版开发Wiki
配方(Recipes)是一種引導新玩家遊玩Minecraft 的方式,透過幫助玩家了解合成、熔煉以及其他的方塊和物品轉化方式來使玩家熟悉遊戲。
- 5配方手冊