Chinese 1.4.7 Modding Tutorials: 第五章:合成及熔煉

第五章:合成及熔煉

在這次教學,我會教你如何在模組裡加上合成表、熔煉表和燃料。
我會由第四章的代碼開始,也就是這個:

package Tutorial;

importnet.minecraft.block.Block;
importnet.minecraft.item.Item;
importcpw.mods.fml.common.Mod;
importcpw.mods.fml.common.Mod.Init;
importcpw.mods.fml.common.event.FMLInitializationEvent;
importcpw.mods.fml.common.network.NetworkMod;
importcpw.mods.fml.common.registry.GameRegistry;
importcpw.mods.fml.common.registry.LanguageRegistry;
@Mod(modid = “Seer_TutorialMod”, name = “TutorialMod”, version = “1.0.0”)
@NetworkMod(clientSideRequired = true, serverSideRequired = false)
publicclass Tutorial {
      
       publicstatic Block TutorialBlock;
       publicstatic Item TutorialItem;
      
       @Init
       publicvoid load(FMLInitializationEvent event)
       {
             TutorialBlock= newBlockTutorialBlock(250, 0).setBlockName(“TutorialBlock”);
             TutorialItem = new ItemTutorialItem(251, 1).setItemName(“TutorialItem”);
            
             GameRegistry.registerBlock(TutorialBlock, “TutorialBlock”);
             LanguageRegistry.addName(TutorialBlock, “Tutorial Block”);
             LanguageRegistry.addName(TutorialItem, “Tutorial Item”);
        
       }
}

這次的教學不需要創建任何的檔案,所以我們只要開著主檔案就可以了。

我將會一種一種的教,請自行找你想要的加法喔。
基本合成表
你需要在load方法內加上這列:

GameRegistry.addRecipe(new ItemStack(Item.diamond, 1), newObject[]

                    {
                    “XXX”,
                    “XXX”,
                    “XXX”,
                    ‘X’, Block.dirt
                    });

Item.diamond, 1

合成表所輸出的物品(第一項)及數量(第二項)。
如果是遊戲內置方塊,你就需要換成Block.方塊的格式;
遊戲內置物品就是Item.物品;
如果你是在之前的教學所加的東西,就直接輸入遊戲內部設定的名字。
如果想使用元數據*1來作為產物,請使用以下格式:
Item.diamond, 1, 元數據代碼
元數據代碼即代表次ID,例如骨粉是15,青金石是4
“XXX”,
“XXX”,
“XXX”,
這就是合成表的格式了,
這邊的「X」所代替的東西是以下面會說的設定相連;
如果想要空白位置的話就直接空白一格,例如“X X”“X X”這樣;
完成之後可以直接刪掉行數,直接變成「“XXX”,“XXX”,“XXX”,」也是沒問題。
‘X’, Block.dirt
這邊就是設定上面寫的「X」所代表的東西,
Block.dirt那邊格式和輸出的物品的格式一樣。
這邊也一樣,能和合成格式放在同一行,節省空間喔。
如果要用元數據*1來做合成物,請把「Block.dirt」改成以下格式:
new ItemStack(Item.diamond, 1, 元數據代碼)
數字「1」請勿修改;
元數據代碼一樣也是代表次ID
*1:元數據(Metadata),在Minecraft中代表一個ID內有不同的數據,例如染料。
非固定位置合成表
這邊就是一些非固定位置,
只要把需要的東西放進合成列中就會得到產物的合成表。
一樣需要在load方法內進行。

GameRegistry.addShapelessRecipe(new ItemStack(Block.dirt), new Object[]

                        {
                         new ItemStack(Block.sand), new ItemStack(Item.dyePowder, 1, 3), new ItemStack(TutorialItem)
                        });

(newItemStack(Block.dirt)

合成產物
new ItemStack(Block.sand), new ItemStack(Item.dyePowder, 1, 3), new ItemStack(TutorialItem)
所有需要放上合成欄的物件,要修改的話,請參考上面的合成表。
熔煉公式
下面兩個是讓物品放進熔爐裡燒,就會得到產物的熔爐表:
GameRegistry.addSmelting(TutorialBlock.blockID, new ItemStack(TutorialItem, 1), 0.5F);
GameRegistry.addSmelting(TutorialItem.shiftedIndex, new ItemStack(TutorialBlock, 1), 0.5F);
那麼,兩個公式有什麼不同呢?
你會看到,除了放入物和產物之外,在放入物的後面,會有「blockID」或者「shiftedIndex」。
下面解釋各個可替換編碼。
TutorialBlock.blockIDTutorialItem.shiftedIndex
放入物,當為方塊時,後面句式需要為blockID,而是物品時就需要用shiftedIndex
用遊戲內置物品時和合成的方法一樣。
TutorialItem, 1TutorialBlock, 1
英文字為產物,用遊戲內置物品時和合成的方法一樣。
數字為產物數量,可設164
0.5F
熔煉後所掉落的經驗值,數值越高就有越多的經驗值。
當鵝卵石燒成石頭時的經驗值為0.1F
而燒製金礦或鑽石礦時就是1.0F
增加燃料
要增加燃料,
我們需要再增加一個物品,詳細請看看之前的增加物品教學,
物品名稱我設定為TutorialFuel
我們先在主檔案的load方法內加上這句:
GameRegistry.registerFuelHandler(new TutorialFuel());
TutorialFuel:燃料(非燃料物品)檔案的名稱,可修改。
然後應該會有錯誤:
選擇「Create Class ‘TutorialFuel’」。
檔案建立後,應該會和其他的檔案建立時的樣子不同:
// TODO Auto-generated method stub
這句可以刪掉,那只是提醒你你要在那邊增加東西。
然後我們在「publicint getBurnTime(ItemStack fuel) {」和「return 0;」之間增加以下編碼:

if(fuel.itemID==Tutorial.TutorialFuel.shiftedIndex){
                    return 1200;
             }
             else return 0;

Tutorial.TutorialFuel.shiftedIndex

第一個為你的package名稱;
第二個為你要設定為燃料的物品;
第三個是必要編碼。
return 1200
1200為燃料可支援燒製的時間,可隨機調較,
單位為遊戲中的tick1tick即為0.05秒,
所以1200即代表60秒。
到這邊即完成增加燃料的工作。

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">