制作一個物品分為兩步:
1.創建一個物品,并添加材質
2.實例化并注冊這個物品
那么由于我懶我就不介紹了,自己直接照抄xiao_bang的介紹了
>在Minecraft中,有烈火般的烈焰棒(廢話),咱們這次做來做個鉆石顏色的棒子(真的想不出來要做什么了),這一次教程會一步一步地帶著你完成制作新物品的全過程。
好現在我們來創建一個新的物品,如果你有經常翻看net.minecraft源碼,在item包里面會看到在mc中遇到的各種物品,都繼承了Item類,那么我們做的物品也要繼承這個類(繼承這個類的一般都是物品)
新建一個包com.wzhrdx.XenoAge.item,并在其中創建一個類ItemSilverNugget(注意注意類的名稱前面推薦是Item,禁止亂搞,xiaobang路過)
# 創建一個物品
這里由于我們寫的是`XenoAge`使用我們在這里創建`銀粒`。新建java類`item.ItemSilverNugget`
~~~java
package com.wzhrdx.XenoAge.item;
import com.wzhrdx.XenoAge.XenoAge;
import net.minecraft.item.Item;
public class ItemSilverNugget extends Item {
public ItemSilverNugget() {
this.setMaxStackSize(64);
this.setTranslationKey(XenoAge.MODID + ".silvernugget");
this.setRegistryName("silver_nugget");
}
}
~~~
* `setTranslationKey`這是新的方法,以前的方法為`setUnlocalizedName()`
`setMaxStackSize()`這里是設置最大堆疊數目,如果不特殊強調就是默認64(比如說我不寫這個方法??)
設置注冊名字,當你在游戲中想要獲得你的物品那就需要這個名字,比如在本教程你需要這樣做`give @a xenoage:silver_nugget`,當然此時如果你啟動的話,不出意外會報錯
# 實例化并注冊
新建java類`item.ItemRegistryHandler`
`src/main/java/com/wzhrdx/XenoAge/item/ItemRegistryHandler.java`
~~~java
package com.wzhrdx.XenoAge.item;
import net.minecraft.item.Item;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.registries.IForgeRegistry;
@Mod.EventBusSubscriber
public class ItemRegistryHandler {
public static final ItemSilverNugget SILVER_NUGGET = new ItemSilverNugget();
@SubscribeEvent
public static void onRegistry(RegistryEvent.Register<Item> event)
{
IForgeRegistry<Item> registry = event.getRegistry();
registry.register(SILVER_NUGGET);
} //這里是實例話物品
~~~
# 綁定材質
為`ItemRegistryHandler`添加一個方法,修改后如下
~~~java
package com.wzhrdx.XenoAge.item;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import net.minecraftforge.registries.IForgeRegistry;
@Mod.EventBusSubscriber
public class ItemRegistryHandler {
public static final ItemSilverNugget SILVER_NUGGET = new ItemSilverNugget();
@SubscribeEvent
public static void onRegistry(RegistryEvent.Register<Item> event)
{
IForgeRegistry<Item> registry = event.getRegistry();
registry.register(SILVER_NUGGET);
} //這里是實例話物品
@SubscribeEvent //監聽net.minecraftforge.client.event.ModelRegistryEvent事件
@SideOnly(Side.CLIENT)
public static void onModelRegistry(ModelRegistryEvent event){
ModelLoader.setCustomModelResourceLocation(SILVER_NUGGET, 0,
new ModelResourceLocation(SILVER_NUGGET.getRegistryName(),"inventory"));
}
} //這里是綁定材質
~~~
創建包`assets.xenoage.models.item`,創建json文件`silver_nugget.json`
`src/main/resources/assets/xenoage/models/item/silver_nugget.json`
~~~json
{
"parent": "item/generated",
"textures": {
"layer0": "xenoage:items/silver_nugget"
}
}
~~~
創建材質包位置`src/main/resources/assets/xenoage/textures/items`
將材質放入,材質的名字要和你的注冊名字一樣這里是`silver_nugget.png`,"
這里我們運行游戲輸入`/give @a xenoage:silver_nugget`我們就會得到這個物品
*****
# 練習
* [ ] >練習1 創建一個名為`silver_ingot`的物品Java類名為`ItemSilverNugget`材質圖片
要求1:設置最大堆疊數目為64
要求2:設置注冊名為`silver_ingot`
要求3:設置`UnlocalizedName`為`modid+#`
要求4:將其放入創造欄中
* [ ] >練習2 注冊、實例化物品并注冊材質
* [ ] >練習3 配置json文件使材質正常顯示
<details>
<summary>答案1</summary>
<pre><blockcode>
package com.wzhrdx.XenoAge.item;
import com.wzhrdx.XenoAge.XenoAge;
import com.wzhrdx.XenoAge.creativetab.TabXenoAge;
import net.minecraft.item.Item;
public class ItemSilverIngot extends Item {
public ItemSilverIngot() {
this.setMaxStackSize(64);
this.setCreativeTab(TabXenoAge.TAB_XENO_AGE);
this.setTranslationKey(XenoAge.MODID + ".silveringot");
this.setRegistryName("silver_ingot");
}
}
</blockcode></pre>
</details>
<details>
<summary>答案2</summary>
<pre><blockcode>
//在ItemRegistryHandler對應位置下添加
public static Item SILVER_INGOT = new ItemSilverIngot();
registry.register(SILVER_INGOT);
registerModel(SILVER_INGOT);
</blockcode></pre>
</details>
<details>
<summary>答案3</summary>
<pre><blockcode>
1.創建assets/xenoage/models/item/silver_ingot.json
2.silver_ingot.json
{
"parent": "item/generated",
"textures": {
"layer0": "xenoage:items/silver_ingot"
}
}
</blockcode></pre>
</details>