提供: Minecraft Modding Wiki
移動先: 案内検索
(ItemCustomModelToolsRenderer.java)
 
(同じ利用者による、間の4版が非表示)
10行目: 10行目:
 
package custom.tool.item;
 
package custom.tool.item;
  
 +
import net.minecraft.block.Block;
 
import net.minecraft.item.EnumToolMaterial;
 
import net.minecraft.item.EnumToolMaterial;
import net.minecraftforge.MinecraftForgeClient;
+
import net.minecraft.item.Item;
 +
import net.minecraft.item.ItemStack;
 +
import net.minecraft.item.ItemTool;
 +
import net.minecraftforge.client.IItemRenderer;
 +
import net.minecraftforge.client.MinecraftForgeClient;
 
import cpw.mods.fml.common.Mod;
 
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.network.NetworkMod;
 
 
import cpw.mods.fml.common.Mod.EventHandler;
 
import cpw.mods.fml.common.Mod.EventHandler;
 
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
 
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
 +
import cpw.mods.fml.common.network.NetworkMod;
 
import cpw.mods.fml.common.registry.GameRegistry;
 
import cpw.mods.fml.common.registry.GameRegistry;
 
import cpw.mods.fml.common.registry.LanguageRegistry;
 
import cpw.mods.fml.common.registry.LanguageRegistry;
  
 
@Mod(
 
@Mod(
     modid = "CustomModelTools",
+
     modid = CustomModelTools.modid,
     name = "Custom Model Tools",
+
     name = CustomModelTools.name,
     version = "1"
+
     version = CustomModelTools.version
 
)
 
)
 
@NetworkMod(
 
@NetworkMod(
30行目: 35行目:
 
public class CustomModelTools
 
public class CustomModelTools
 
{
 
{
 +
    public static final String modid = "CustomModelTools";
 +
    public static final String name = "Custom Model Tools Modification";
 +
    public static final String version = "1";
 +
   
 
     public static final boolean clientSideRequiredBoolean = true;
 
     public static final boolean clientSideRequiredBoolean = true;
     public static final boolean serverSudeRequiredBoolean = false;
+
     public static final boolean serverSideRequiredBoolean = false;
 
      
 
      
 
     public static boolean Model_ON_OFF_Boolean = true;
 
     public static boolean Model_ON_OFF_Boolean = true;
 
     public static String ModelTexture;
 
     public static String ModelTexture;
     public static String texture;
+
     public static String texture = "model";
 +
    public static int textureWidth = 64;
 +
    public static int textureHeight = 32;
 
      
 
      
 
     public static EnumToolMaterial toolMaterial;
 
     public static EnumToolMaterial toolMaterial;
 
      
 
      
 
     public static ItemTool mainItem;
 
     public static ItemTool mainItem;
 +
    public static int itemID = 3001; //default 3001 = 3257
 +
    public static int damageFloat = (int) 1.0;
 +
    public static String domain = "CustomModelItem";
 +
    public static String item_name = "CustomModelItem";
 
      
 
      
     @EventHabdler
+
     @EventHandler
 
     public void mainLoading(FMLPreInitializationEvent event)
 
     public void mainLoading(FMLPreInitializationEvent event)
 
     {
 
     {
         mainItem = new ItemCustomModelTools(3001, toolMaterial.rock).setData("CustomModelItem", "CustomModelItem");
+
         mainItem = (ItemTool) new ItemCustomModelTools(itemID, toolMaterial.IRON).setData(domain, item_name, damageFloat);
         registerItem(mainItem, "CustomModelItem", "Custom Model Item", "カスタムモデルアイテム", new ItemCustomModelToolsRenderer(), texture, 64, 32);
+
         registerItem(mainItem, "CustomModelItem", "Custom Model Item", "カスタムモデルアイテム", new ItemCustomModelToolsRenderer(), true, texture, textureWidth, textureHeight);
 +
        GameRegistry.addRecipe(new ItemStack(mainItem, 1, 0), new Object[] {" S ", "DCF", " X ", 'S', Item.pickaxeIron, 'D', Item.shovelIron, 'F', Item.axeIron, 'X', Item.stick, 'C', Block.stone});
 
     }
 
     }
 
     public void registerItem(Item items, String name, String en_US, String ja_JP, IItemRenderer itemRenderer, boolean modeling, String texture, int width, int height)
 
     public void registerItem(Item items, String name, String en_US, String ja_JP, IItemRenderer itemRenderer, boolean modeling, String texture, int width, int height)
 
     {
 
     {
         GameReigstry.registerItem(items, name);
+
         GameRegistry.registerItem(items, name);
         LanguageRegistry.addNameForObject(items, "en_US", en_US);
+
         LanguageRegistry.instance().addNameForObject(items, "en_US", en_US);
         LanguageRegistry.addNameForObject(items, "ja_JP", ja_JP);
+
         LanguageRegistry.instance().addNameForObject(items, "ja_JP", ja_JP);
 
         MinecraftForgeClient.registerItemRenderer(items.itemID, itemRenderer);
 
         MinecraftForgeClient.registerItemRenderer(items.itemID, itemRenderer);
 
         Model_ON_OFF_Boolean = modeling;
 
         Model_ON_OFF_Boolean = modeling;
 
         ModelTexture = texture;
 
         ModelTexture = texture;
         ModelCustomModelTools modeling = new ModelCustomModelTools();
+
         ModelCustomModelTools modelings = new ModelCustomModelTools();
         modeling.setTextureSize(width, height);
+
        modelings.setTextureSize(width, height);
 +
    }
 +
    public static void configInformation(int ItemID, String domain, String name, int damage, boolean modeling, int width, int height)
 +
    {
 +
        itemID = ItemID;
 +
        CustomModelTools.domain = domain;
 +
        item_name = name;
 +
        damageFloat = damage;
 +
        Model_ON_OFF_Boolean = modeling;
 +
        ModelCustomModelTools modelings = new ModelCustomModelTools();
 +
         modelings.setTextureSize(width, height);
 
     }
 
     }
 
}
 
}
66行目: 92行目:
 
<source lang = java>
 
<source lang = java>
 
package custom.tool.item;
 
package custom.tool.item;
 
+
import net.minecraft.item.Item;
 
import net.minecraft.item.ItemTool;
 
import net.minecraft.item.ItemTool;
 +
import net.minecraft.item.ItemStack;
 
import net.minecraft.item.EnumToolMaterial;
 
import net.minecraft.item.EnumToolMaterial;
 
import net.minecraft.block.Block;
 
import net.minecraft.block.Block;
import net.minecraft.block.Material;
+
import net.minecraft.block.material.Material;
  
 
public class ItemCustomModelTools extends ItemTool
 
public class ItemCustomModelTools extends ItemTool
85行目: 112行目:
 
                                                                 Block.tilledField,
 
                                                                 Block.tilledField,
 
                                                                 Block.slowSand,
 
                                                                 Block.slowSand,
                                                                 Block.mycelium
+
                                                                 Block.mycelium,
 
                                                                 // ItemPickaxe.java
 
                                                                 // ItemPickaxe.java
 
                                                                 Block.cobblestone,
 
                                                                 Block.cobblestone,
107行目: 134行目:
 
                                                                 Block.railDetector,
 
                                                                 Block.railDetector,
 
                                                                 Block.railPowered,
 
                                                                 Block.railPowered,
                                                                 Block.railActivator
+
                                                                 Block.railActivator,
                                // ItemAxe.java
+
                                                                // ItemAxe.java
                                                                 Block.planks, Block.bookShelf,
+
                                                                 Block.planks,
 +
                                                                Block.bookShelf,
 
                                                                 Block.wood, Block.chest,
 
                                                                 Block.wood, Block.chest,
 
                                                                 Block.stoneDoubleSlab,
 
                                                                 Block.stoneDoubleSlab,
116行目: 144行目:
 
                                                                 Block.pumpkinLantern};
 
                                                                 Block.pumpkinLantern};
 
                                                                 // 詳しい情報は、ItemSpade.java ItemPickaxe.java ItemAxe.javaを参照
 
                                                                 // 詳しい情報は、ItemSpade.java ItemPickaxe.java ItemAxe.javaを参照
      
+
     public static float damageFloat = 1.0F;
 +
 
     public ItemCustomModelTools(int par1ID, EnumToolMaterial par2EnumToolMaterial)
 
     public ItemCustomModelTools(int par1ID, EnumToolMaterial par2EnumToolMaterial)
 
     {
 
     {
124行目: 153行目:
 
     public boolean canHarvestBlock(Block par1Block)
 
     public boolean canHarvestBlock(Block par1Block)
 
     {
 
     {
        return par1Block == Block.snow ? true : par1Block == Block.blockSnow : //雪
+
    return setBleakingList != null;
              (par1Block == Block.obsidian ? this.toolMaterial.getHarvestLevel() == 3 : //黒曜石
 
              (par1Block != Block.blockDiamond && par1Block != Block.oreDiamond ? //ダイヤモンド
 
              (par1Block != Block.oreEmerald && par1Block != Block.blockEmerald ? //エメラルド
 
              (par1Block != Block.blockGold && par1Block != Block.oreGold ? //金
 
              (par1Block != Block.blockIron && par1Block != Block.oreIron ? //鉄
 
              (par1Block != Block.blockLapis && par1Block != Block.oreLapis ? //ラピスラズリ
 
              (par1Block != Block.oreRedstone && par1Block != Block.oreRedstoneGlowing ? //レッドストーン
 
              (par1Block.blockMaterial == Material.rock ? true : //マテリアル属性 石
 
              (par1Block.blockMaterial == Material.iron ? true : //マテリアル属性 鉄
 
                par1Block.blockMaterial == Material.anvil)) //マテリアル属性 金床
 
                this.toolMaterial.getHarvestLevel() >= 2) : //マテリアルレベル 2
 
                this.toolMaterial.getHarvestLevel() >= 1) : //マテリアルレベル 1
 
                this.toolMaterial.getHarvestLevel() >= 1) : //マテリアルレベル 1
 
                this.toolMaterial.getHarvestLevel() >= 2) : //マテリアルレベル 2
 
                this.toolMaterial.getHarvestLevel() >= 2) : //マテリアルレベル 2
 
                this.toolMaterial.getHarvestLevel() >= 2)); //マテリアルレベル 2
 
 
     }
 
     }
 
     @Override
 
     @Override
155行目: 168行目:
 
                 super.getStrVsBlock(par1ItemStack, par2Block);
 
                 super.getStrVsBlock(par1ItemStack, par2Block);
 
     }
 
     }
     public Item setData(String domain, String path)
+
     public Item setData(String domain, String path, float damage)
 
     {
 
     {
 
         setUnlocalizedName(path);
 
         setUnlocalizedName(path);
 
         iconString = domain + ":" + path;
 
         iconString = domain + ":" + path;
 +
        damageFloat = damage;
 +
        return this;
 
     }
 
     }
 
}
 
}
168行目: 183行目:
 
<source lang = java>
 
<source lang = java>
 
package custom.tool.item;
 
package custom.tool.item;
 
+
import net.minecraftforge.client.IItemRenderer;
 
 
import net.minecraft.client.Minecraft;
 
import net.minecraft.client.Minecraft;
 +
import net.minecraft.entity.Entity;
 +
import net.minecraft.item.ItemStack;
 
import net.minecraft.util.ResourceLocation;
 
import net.minecraft.util.ResourceLocation;
 +
import net.minecraftforge.client.IItemRenderer;
 +
 
import org.lwjgl.opengl.GL11;
 
import org.lwjgl.opengl.GL11;
 
+
 
public class ItemCustomModelToolsRenderer implements IItemRenderer
 
public class ItemCustomModelToolsRenderer implements IItemRenderer
 
{
 
{
 
     private ModelCustomModelTools modeling;
 
     private ModelCustomModelTools modeling;
    protected Minecraft mc;
 
 
     public ItemCustomModelToolsRenderer()
 
     public ItemCustomModelToolsRenderer()
 
     {
 
     {
206行目: 223行目:
 
             {
 
             {
 
                 GL11.glPushMatrix();
 
                 GL11.glPushMatrix();
               
+
 
                 float scala = 2.5F;
 
                 float scala = 2.5F;
               
+
                 GL11.glScalaf(scala, scala, scala);
+
                 GL11.glScalef(scala, scala, scala);
               
+
 
                 GL11.glRotatef(0F, -10.0F, 0.0F, 0.0F);
 
                 GL11.glRotatef(0F, -10.0F, 0.0F, 0.0F);
 
                 GL11.glRotatef(8F, 0.0F, -10.0F, 0.0F);
 
                 GL11.glRotatef(8F, 0.0F, -10.0F, 0.0F);
 
                 GL11.glRotatef(125F, 0.0F, 0.0F, -10.0F);
 
                 GL11.glRotatef(125F, 0.0F, 0.0F, -10.0F);
               
+
 
                 GL11.glTranslatef(-0.304800F, -0.500F, -0.09F);
 
                 GL11.glTranslatef(-0.304800F, -0.500F, -0.09F);
               
+
                 mc.renderEngine.bindTexture(new ResourceLocation(CustomModelTools.ModelTexture));
+
                 Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(CustomModelTools.domain, "textures/model/" + CustomModelTools.texture + ".png"));
               
+
 
                 modeling.render((Entity) data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F);
 
                 modeling.render((Entity) data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F);
               
+
 
                 GL11.glPopMatrix();
 
                 GL11.glPopMatrix();
 
             }
 
             }
235行目: 252行目:
 
<source lang = java>
 
<source lang = java>
 
package custom.tool.item;
 
package custom.tool.item;
 
+
import net.minecraft,client.model.ModelBase;
+
import net.minecraft.client.model.ModelBase;
 
import net.minecraft.client.model.ModelRenderer;
 
import net.minecraft.client.model.ModelRenderer;
 
import net.minecraft.entity.Entity;
 
import net.minecraft.entity.Entity;
 
+
 
public class ModelCustomModelTools extends ModelBase
 
public class ModelCustomModelTools extends ModelBase
 
{
 
{
253行目: 270行目:
 
     public ModelRenderer AxeDown;
 
     public ModelRenderer AxeDown;
 
     public ModelRenderer Forward;
 
     public ModelRenderer Forward;
   
+
 
     public int TextureSizeWidth = 64;
 
     public int TextureSizeWidth = 64;
 
     public int TextureSizeHeight = 32;
 
     public int TextureSizeHeight = 32;
296行目: 313行目:
 
         MainCenter.mirror = true;
 
         MainCenter.mirror = true;
 
         setRotation(MainCenter, 0F, 0F, 0F);
 
         setRotation(MainCenter, 0F, 0F, 0F);
AxeUp = new ModelRenderer(this, 30, 14);
+
        AxeUp = new ModelRenderer(this, 30, 14);
AxeUp.addBox(0F, 0F, 0F, 2, 6, 4);
+
        AxeUp.addBox(0F, 0F, 0F, 2, 6, 4);
AxeUp.setRotationPoint(-4F, -9F, -2F);
+
        AxeUp.setRotationPoint(-4F, -9F, -2F);
AxeUp.setTextureSize(TextureSizeWidth, TextureSizeHeight);
+
        AxeUp.setTextureSize(TextureSizeWidth, TextureSizeHeight);
AxeUp.mirror = true;
+
        AxeUp.mirror = true;
setRotation(AxeUp, 0F, 0F, 0.7853982F);
+
        setRotation(AxeUp, 0F, 0F, 0.7853982F);
AxeLeft = new ModelRenderer(this, 30, 2);
+
        AxeLeft = new ModelRenderer(this, 30, 2);
AxeLeft.addBox(0F, 0F, 0F, 2, 6, 6);
+
        AxeLeft.addBox(0F, 0F, 0F, 2, 6, 6);
AxeLeft.setRotationPoint(-3F, -5F, -5F);
+
        AxeLeft.setRotationPoint(-3F, -5F, -5F);
AxeLeft.setTextureSize(TextureSizeWidth, TextureSizeHeight);
+
        AxeLeft.setTextureSize(TextureSizeWidth, TextureSizeHeight);
AxeLeft.mirror = true;
+
        AxeLeft.mirror = true;
setRotation(AxeLeft, 0F, -1.047198F, 0F);
+
        setRotation(AxeLeft, 0F, -1.047198F, 0F);
AxeRight = new ModelRenderer(this, 30, 2);
+
        AxeRight = new ModelRenderer(this, 30, 2);
AxeRight.addBox(0F, 0F, 0F, 2, 6, 6);
+
        AxeRight.addBox(0F, 0F, 0F, 2, 6, 6);
AxeRight.setRotationPoint(-8F, -5F, 2F);
+
        AxeRight.setRotationPoint(-8F, -5F, 2F);
AxeRight.setTextureSize(TextureSizeWidth, TextureSizeHeight);
+
        AxeRight.setTextureSize(TextureSizeWidth, TextureSizeHeight);
AxeRight.mirror = true;
+
        AxeRight.mirror = true;
setRotation(AxeRight, 0F, 1.047198F, 0F);
+
        setRotation(AxeRight, 0F, 1.047198F, 0F);
AxeDown = new ModelRenderer(this, 30, 14);
+
        AxeDown = new ModelRenderer(this, 30, 14);
AxeDown.addBox(0F, 0F, 0F, 2, 6, 4);
+
        AxeDown.addBox(0F, 0F, 0F, 2, 6, 4);
AxeDown.setRotationPoint(-8F, 1F, -2F);
+
        AxeDown.setRotationPoint(-8F, 1F, -2F);
AxeDown.setTextureSize(TextureSizeWidth, TextureSizeHeight);
+
        AxeDown.setTextureSize(TextureSizeWidth, TextureSizeHeight);
AxeDown.mirror = true;
+
        AxeDown.mirror = true;
setRotation(AxeDown, 0F, 0F, -0.7853982F);
+
        setRotation(AxeDown, 0F, 0F, -0.7853982F);
Forward = new ModelRenderer(this, 8, 6);
+
        Forward = new ModelRenderer(this, 8, 6);
Forward.addBox(0F, 0F, 0F, 1, 4, 2);
+
        Forward.addBox(0F, 0F, 0F, 1, 4, 2);
Forward.setRotationPoint(-8.5F, -4F, -1F);
+
        Forward.setRotationPoint(-8.5F, -4F, -1F);
Forward.setTextureSize(TextureSizeWidth, TextureSizeHeight);
+
        Forward.setTextureSize(TextureSizeWidth, TextureSizeHeight);
Forward.mirror = true;
+
        Forward.mirror = true;
    setRotation(Forward, 0F, 0F, 0F);
+
        setRotation(Forward, 0F, 0F, 0F);
 
     }
 
     }
 
     public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5)
 
     public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5)
349行目: 366行目:
 
         model.rotateAngleZ = z;
 
         model.rotateAngleZ = z;
 
     }
 
     }
     public void setRotationAngles(float f, float f1, float, f2, float f3, float f4, float f5, Entity entity)
+
     public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity)
 
     {
 
     {
 
         super.setRotationAngles(f, f1, f2, f3, f4, f5, entity);
 
         super.setRotationAngles(f, f1, f2, f3, f4, f5, entity);
355行目: 372行目:
 
     public void setTextureSize(int width, int height)
 
     public void setTextureSize(int width, int height)
 
     {
 
     {
         TextureSizeWidth = width
+
         TextureSizeWidth = width;
         TextureSizeHeight = height
+
         TextureSizeHeight = height;
 
     }
 
     }
 
}
 
}
 +
 +
</source>
 +
 +
==解説==
 +
 +
注意、Mod開発上級者しかわからないと思いますが、すべて解説していきます。
 +
 +
===CustomModelTools.java===
 +
 +
<source lang = java>
 +
public void mainLoading(FMLPreInitializationEvent event)
 +
</source>
 +
これは、最前列に実行するポイントで、メドッソ名のmainLoadingはpreInit限定ではありません。<br>
 +
<source lang = java>
 +
public static void configInformation(int ItemID, String domain, String name, int damage, boolean modeling, int width, int height)
 +
</source>
 +
ここでは、メドッソ名道理、コンフィグ用のところです。<br>
 +
なので、使わない場合、消去してかまいません。<br>
 +
UTF-8で保存してください。
 +
 +
<source lang = java>
 +
mainItem = (ItemTool) new ItemCustomModelTools(itemID, toolMaterial.IRON).setData("CustomModelItem", "CustomModelItem", damageFloat);
 +
</source>
 +
ここの最初のコンテナで、アイテム登録します。<br>
 +
setDataは、最初のストリングは「場所」、2番目のストリングは「アイテム名、テクスチャ名」、3番目は「アイテムのダメージカウント」
 +
 +
<source lang = java>
 +
registerItem(mainItem, "CustomModelItem", "Custom Model Item", "カスタムモデルアイテム", new ItemCustomModelToolsRenderer(), true, texture, textureWidth, textureHeight);
 +
</source>
 +
ここでは、アイテムデータを詳しく登録するところです。<br>
 +
1番目は「アイテムコンテナ」、2番目は「アイテム名」、3番目は「英語名」、4番目は「日本語名」、5番目は「モデルデータ」、6番目は「モデルを使うか」、7_8番目は「モデルテクスチャサイズ」<br>
 +
 +
===ItemCustomModelTools.java===
 +
 +
<source lang = java>
 +
private static final Block[] setBleakingList = new Block[] {..., ...., ..., ....};
 +
</source>
 +
ここでは、壊せるブロックのリストです。<br>
 +
ここに、登録されてなくても壊せるものはありますが、ここで登録しといたほうがいいです。
 +
 +
<source lang = java>
 +
public static float damageFloat = 1.0F;
 +
</source>
 +
ここでは、対mobに使うところです。
 +
 +
<source lang = java>
 +
public float getStrVsBlock(ItemStack par1ItemStack, Block par2Block)
 +
</source>
 +
ここでは、掘れるマテリアル属性を登録するところです。
 +
 +
===ItemCustomModelToolsRenderer.java===
 +
 +
<source lang = java>
 +
private ModelCustomModelTools modeling;
 +
public ItemCustomModelToolsRenderer()
 +
{
 +
    modeling = new ModelCustomModelTools();
 +
}
 +
</source>
 +
ここでは、モデルデータを登録するところです。
 +
 +
<source lang = java>
 +
public boolean handleRenderType(ItemStack item, ItemRenderType type)
 
</source>
 
</source>
 +
ここでは、モデルをつけるかどうかを認識するところです。<br>
 +
IItemRendererないにある、EnumクラスのItemRenderType.javaにある、「ENTITY」「EQUIPPED」「EQUIPPED_FIRST_PERSON」「INVENTORY」「FIRST_PERSON_MAP」の五つあり、
 +
ENTITYは、EntityItem認識を行うところです。<br>
 +
EQUIPPEDは、今回使うもので、モデル認識を行うところです。<br>
 +
EQUIPPED_FIRST_PERSONは、三人称視点でのモデル認識を行うところです<br>
 +
INVENTORYは、インベントリ内のみモデル認識を行うところです。<br>
 +
FIRST_PERSON_MAPは、MapData.javaの認識転移範囲内にプレイヤーがあるかどうかを確認させて、実行させるかどうかです。
 +
 +
<source lang = java>
 +
public void renderItem(ItemRenderType type, ItemStack item, Object... data)
 +
</source>
 +
ここでは、モデルデータを詳しく登録するところで、先ほど出した「EQUIPPED」の内容を登録するところです。<br>
 +
テクスチャロードは、CustomModelItemをドメインにしてるので、
 +
assets/CustomModelItem/...
 +
となり、モデル名前が「model」なので、
 +
assets/CustomModelItem/textures/model/model.png
 +
となります。
 +
テクスチャの場所は「assets/CustomModelItem/textures/model/model.png」
 +
 +
===ModelCustomModelTools.java===
  
未完成<br>
+
ここでは、アイテムに使うモデルを設定するところです。
[[チュートリアル一覧]]に乗せる方がいるのなら、まだ乗せないで下さい
 

2015年7月8日 (水) 02:59時点における最新版

1.6のモデル付きカスタムツール追加[編集]

このアイテムは、(つるはし)(ショベル)(斧)の三つ(鉄製)にモデルを付けて追加するものです。

ソース[編集]

  • CustomModelTools.java
package custom.tool.item;

import net.minecraft.block.Block;
import net.minecraft.item.EnumToolMaterial;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemTool;
import net.minecraftforge.client.IItemRenderer;
import net.minecraftforge.client.MinecraftForgeClient;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.network.NetworkMod;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.LanguageRegistry;

@Mod(
    modid = CustomModelTools.modid,
    name = CustomModelTools.name,
    version = CustomModelTools.version
)
@NetworkMod(
    clientSideRequired = CustomModelTools.clientSideRequiredBoolean,
    serverSideRequired = CustomModelTools.serverSideRequiredBoolean
)
public class CustomModelTools
{
    public static final String modid = "CustomModelTools";
    public static final String name = "Custom Model Tools Modification";
    public static final String version = "1";
    
    public static final boolean clientSideRequiredBoolean = true;
    public static final boolean serverSideRequiredBoolean = false;
    
    public static boolean Model_ON_OFF_Boolean = true;
    public static String ModelTexture;
    public static String texture = "model";
    public static int textureWidth = 64;
    public static int textureHeight = 32;
    
    public static EnumToolMaterial toolMaterial;
    
    public static ItemTool mainItem;
    public static int itemID = 3001; //default 3001 = 3257
    public static int damageFloat = (int) 1.0;
    public static String domain = "CustomModelItem";
    public static String item_name = "CustomModelItem";
    
    @EventHandler
    public void mainLoading(FMLPreInitializationEvent event)
    {
        mainItem = (ItemTool) new ItemCustomModelTools(itemID, toolMaterial.IRON).setData(domain, item_name, damageFloat);
        registerItem(mainItem, "CustomModelItem", "Custom Model Item", "カスタムモデルアイテム", new ItemCustomModelToolsRenderer(), true, texture, textureWidth, textureHeight);
        GameRegistry.addRecipe(new ItemStack(mainItem, 1, 0), new Object[] {" S ", "DCF", " X ", 'S', Item.pickaxeIron, 'D', Item.shovelIron, 'F', Item.axeIron, 'X', Item.stick, 'C', Block.stone});
    }
    public void registerItem(Item items, String name, String en_US, String ja_JP, IItemRenderer itemRenderer, boolean modeling, String texture, int width, int height)
    {
        GameRegistry.registerItem(items, name);
        LanguageRegistry.instance().addNameForObject(items, "en_US", en_US);
        LanguageRegistry.instance().addNameForObject(items, "ja_JP", ja_JP);
        MinecraftForgeClient.registerItemRenderer(items.itemID, itemRenderer);
        Model_ON_OFF_Boolean = modeling;
        ModelTexture = texture;
        ModelCustomModelTools modelings = new ModelCustomModelTools();
        modelings.setTextureSize(width, height);
    }
    public static void configInformation(int ItemID, String domain, String name, int damage, boolean modeling, int width, int height)
    {
        itemID = ItemID;
        CustomModelTools.domain = domain;
        item_name = name;
        damageFloat = damage;
        Model_ON_OFF_Boolean = modeling;
        ModelCustomModelTools modelings = new ModelCustomModelTools();
        modelings.setTextureSize(width, height);
    }
}
  • ItemCustomModelTools.java
package custom.tool.item;
import net.minecraft.item.Item;
import net.minecraft.item.ItemTool;
import net.minecraft.item.ItemStack;
import net.minecraft.item.EnumToolMaterial;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;

public class ItemCustomModelTools extends ItemTool
{
    //壊せるブロックのリスト
    private static final Block[] setBleakingList = new Block[] {// ItemSpade.java
                                                                Block.grass,
                                                                Block.dirt,
                                                                Block.sand,
                                                                Block.gravel,
                                                                Block.snow,
                                                                Block.blockSnow,
                                                                Block.blockClay,
                                                                Block.tilledField,
                                                                Block.slowSand,
                                                                Block.mycelium,
                                                                // ItemPickaxe.java
                                                                Block.cobblestone,
                                                                Block.stoneDoubleSlab,
                                                                Block.stoneSingleSlab,
                                                                Block.stone, Block.sandStone,
                                                                Block.cobblestoneMossy,
                                                                Block.oreIron,
                                                                Block.blockIron,
                                                                Block.oreCoal,
                                                                Block.blockGold,
                                                                Block.oreGold,
                                                                Block.oreDiamond,
                                                                Block.blockDiamond,
                                                                Block.ice,
                                                                Block.netherrack,
                                                                Block.oreLapis, Block.blockLapis,
                                                                Block.oreRedstone,
                                                                Block.oreRedstoneGlowing,
                                                                Block.rail,
                                                                Block.railDetector,
                                                                Block.railPowered,
                                                                Block.railActivator,
                                                                // ItemAxe.java
                                                                Block.planks,
                                                                Block.bookShelf,
                                                                Block.wood, Block.chest,
                                                                Block.stoneDoubleSlab,
                                                                Block.stoneSingleSlab,
                                                                Block.pumpkin,
                                                                Block.pumpkinLantern};
                                                                // 詳しい情報は、ItemSpade.java ItemPickaxe.java ItemAxe.javaを参照
    public static float damageFloat = 1.0F;
 
    public ItemCustomModelTools(int par1ID, EnumToolMaterial par2EnumToolMaterial)
    {
        super(par1ID, damageFloat, par2EnumToolMaterial, setBleakingList);
    }
    @Override
    public boolean canHarvestBlock(Block par1Block)
    {
    	return setBleakingList != null;
    }
    @Override
    public float getStrVsBlock(ItemStack par1ItemStack, Block par2Block)
    {
        return par2Block != null &&
               (par2Block.blockMaterial == Material.iron || //マテリアル属性 鉄
                par2Block.blockMaterial == Material.anvil || //マテリアル属性 金床
                par2Block.blockMaterial == Material.rock || //マテリアル属性 石
                par2Block.blockMaterial == Material.wood || //マテリアル属性 原木
                par2Block.blockMaterial == Material.plants || //マテリアル属性 木の厚板
                par2Block.blockMaterial == Material.vine) ? //マテリアル属性 つる
                this.efficiencyOnProperMaterial :
                super.getStrVsBlock(par1ItemStack, par2Block);
    }
    public Item setData(String domain, String path, float damage)
    {
        setUnlocalizedName(path);
        iconString = domain + ":" + path;
        damageFloat = damage;
        return this;
    }
}
  • ItemCustomModelToolsRenderer.java
package custom.tool.item;
 
import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.IItemRenderer;

import org.lwjgl.opengl.GL11;
 
public class ItemCustomModelToolsRenderer implements IItemRenderer
{
    private ModelCustomModelTools modeling;
    public ItemCustomModelToolsRenderer()
    {
        modeling = new ModelCustomModelTools();
    }
    @Override
    public boolean handleRenderType(ItemStack item, ItemRenderType type)
    {
        switch(type)
        {
            case EQUIPPED :
                return CustomModelTools.Model_ON_OFF_Boolean;
            default:
                return false;
        }
    }
    @Override
    public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper)
    {
        return false;
    }
    @Override
    public void renderItem(ItemRenderType type, ItemStack item, Object... data)
    {
        switch(type)
        {
            case EQUIPPED :
            {
                GL11.glPushMatrix();
 
                float scala = 2.5F;
 
                GL11.glScalef(scala, scala, scala);
 
                GL11.glRotatef(0F, -10.0F, 0.0F, 0.0F);
                GL11.glRotatef(8F, 0.0F, -10.0F, 0.0F);
                GL11.glRotatef(125F, 0.0F, 0.0F, -10.0F);
 
                GL11.glTranslatef(-0.304800F, -0.500F, -0.09F);
 
                Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(CustomModelTools.domain, "textures/model/" + CustomModelTools.texture + ".png"));
 
                modeling.render((Entity) data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F);
 
                GL11.glPopMatrix();
            }
            default:
                break;
         }
    }
}
  • ModelCustomModelTools
package custom.tool.item;
 
import net.minecraft.client.model.ModelBase;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.entity.Entity;
 
public class ModelCustomModelTools extends ModelBase
{
    public ModelRenderer Stick;
    public ModelRenderer EnderEye;
    public ModelRenderer PickaxePats1;
    public ModelRenderer PickaxePats2;
    public ModelRenderer PickaxePats3;
    public ModelRenderer MainCenter;
    public ModelRenderer AxeUp;
    public ModelRenderer AxeLeft;
    public ModelRenderer AxeRight;
    public ModelRenderer AxeDown;
    public ModelRenderer Forward;
 
    public int TextureSizeWidth = 64;
    public int TextureSizeHeight = 32;
    public ModelCustomModelTools()
    {
        textureWidth = TextureSizeWidth ;
        textureHeight = TextureSizeHeight ;
        Stick = new ModelRenderer(this, 0, 0);
        Stick.addBox(0F, 0F, 0F, 2, 14, 2);
        Stick.setRotationPoint(-1F, 0F, -1F);
        Stick.setTextureSize(TextureSizeWidth, TextureSizeHeight);
        Stick.mirror = true;
        setRotation(Stick, 0F, 0F, 0F);
        EnderEye = new ModelRenderer(this, 8, 0);
        EnderEye.addBox(0F, 0F, 0F, 3, 3, 3);
        EnderEye.setRotationPoint(-1.5F, 13.5F, -1.5F);
        EnderEye.setTextureSize(TextureSizeWidth, TextureSizeHeight);
        EnderEye.mirror = true;
        setRotation(EnderEye, 0F, 0F, 0F);
        PickaxePats1 = new ModelRenderer(this, 20, 0);
        PickaxePats1.addBox(0F, 0F, 0F, 10, 2, 2);
        PickaxePats1.setRotationPoint(-4F, -2F, -1F);
        PickaxePats1.setTextureSize(TextureSizeWidth, TextureSizeHeight);
        PickaxePats1.mirror = true;
        setRotation(PickaxePats1, 0F, 0F, 0F);
        PickaxePats2 = new ModelRenderer(this, 44, 0);
        PickaxePats2.addBox(0F, 0F, 0F, 5, 2, 2);
        PickaxePats2.setRotationPoint(6F, -2F, -1F);
        PickaxePats2.setTextureSize(TextureSizeWidth, TextureSizeHeight);
        PickaxePats2.mirror = true;
        setRotation(PickaxePats2, 0F, 0F, 0.2617994F);
        PickaxePats3 = new ModelRenderer(this, 20, 4);
        PickaxePats3.addBox(0F, 0F, 0F, 3, 1, 2);
        PickaxePats3.setRotationPoint(10F, 0F, -1F);
        PickaxePats3.setTextureSize(TextureSizeWidth, TextureSizeHeight);
        PickaxePats3.mirror = true;
        setRotation(PickaxePats3, 0F, 0F, 0.4363323F);
        MainCenter = new ModelRenderer(this, 30, 4);
        MainCenter.addBox(0F, 0F, 0F, 4, 6, 4);
        MainCenter.setRotationPoint(-8F, -5F, -2F);
        MainCenter.setTextureSize(TextureSizeWidth, TextureSizeHeight);
        MainCenter.mirror = true;
        setRotation(MainCenter, 0F, 0F, 0F);
        AxeUp = new ModelRenderer(this, 30, 14);
        AxeUp.addBox(0F, 0F, 0F, 2, 6, 4);
        AxeUp.setRotationPoint(-4F, -9F, -2F);
        AxeUp.setTextureSize(TextureSizeWidth, TextureSizeHeight);
        AxeUp.mirror = true;
        setRotation(AxeUp, 0F, 0F, 0.7853982F);
        AxeLeft = new ModelRenderer(this, 30, 2);
        AxeLeft.addBox(0F, 0F, 0F, 2, 6, 6);
        AxeLeft.setRotationPoint(-3F, -5F, -5F);
        AxeLeft.setTextureSize(TextureSizeWidth, TextureSizeHeight);
        AxeLeft.mirror = true;
        setRotation(AxeLeft, 0F, -1.047198F, 0F);
        AxeRight = new ModelRenderer(this, 30, 2);
        AxeRight.addBox(0F, 0F, 0F, 2, 6, 6);
        AxeRight.setRotationPoint(-8F, -5F, 2F);
        AxeRight.setTextureSize(TextureSizeWidth, TextureSizeHeight);
        AxeRight.mirror = true;
        setRotation(AxeRight, 0F, 1.047198F, 0F);
        AxeDown = new ModelRenderer(this, 30, 14);
        AxeDown.addBox(0F, 0F, 0F, 2, 6, 4);
        AxeDown.setRotationPoint(-8F, 1F, -2F);
        AxeDown.setTextureSize(TextureSizeWidth, TextureSizeHeight);
        AxeDown.mirror = true;
        setRotation(AxeDown, 0F, 0F, -0.7853982F);
        Forward = new ModelRenderer(this, 8, 6);
        Forward.addBox(0F, 0F, 0F, 1, 4, 2);
        Forward.setRotationPoint(-8.5F, -4F, -1F);
        Forward.setTextureSize(TextureSizeWidth, TextureSizeHeight);
        Forward.mirror = true;
        setRotation(Forward, 0F, 0F, 0F);
    }
    public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5)
    {
        super.render(entity, f, f1, f2, f3, f4, f5);
        setRotationAngles(f, f1, f2, f3, f4, f5, entity);
        Stick.render(f5);
        EnderEye.render(f5);
        PickaxePats1.render(f5);
        PickaxePats2.render(f5);
        PickaxePats3.render(f5);
        MainCenter.render(f5);
        AxeUp.render(f5);
        AxeLeft.render(f5);
        AxeRight.render(f5);
        AxeDown.render(f5);
        Forward.render(f5);
    }
    private void setRotation(ModelRenderer model, float x, float y, float z)
    {
        model.rotateAngleX = x;
        model.rotateAngleY = y;
        model.rotateAngleZ = z;
    }
    public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity)
    {
        super.setRotationAngles(f, f1, f2, f3, f4, f5, entity);
    }
    public void setTextureSize(int width, int height)
    {
        TextureSizeWidth = width;
        TextureSizeHeight = height;
    }
}

解説[編集]

注意、Mod開発上級者しかわからないと思いますが、すべて解説していきます。

CustomModelTools.java[編集]

public void mainLoading(FMLPreInitializationEvent event)

これは、最前列に実行するポイントで、メドッソ名のmainLoadingはpreInit限定ではありません。

public static void configInformation(int ItemID, String domain, String name, int damage, boolean modeling, int width, int height)

ここでは、メドッソ名道理、コンフィグ用のところです。
なので、使わない場合、消去してかまいません。
UTF-8で保存してください。

mainItem = (ItemTool) new ItemCustomModelTools(itemID, toolMaterial.IRON).setData("CustomModelItem", "CustomModelItem", damageFloat);

ここの最初のコンテナで、アイテム登録します。
setDataは、最初のストリングは「場所」、2番目のストリングは「アイテム名、テクスチャ名」、3番目は「アイテムのダメージカウント」

registerItem(mainItem, "CustomModelItem", "Custom Model Item", "カスタムモデルアイテム", new ItemCustomModelToolsRenderer(), true, texture, textureWidth, textureHeight);

ここでは、アイテムデータを詳しく登録するところです。
1番目は「アイテムコンテナ」、2番目は「アイテム名」、3番目は「英語名」、4番目は「日本語名」、5番目は「モデルデータ」、6番目は「モデルを使うか」、7_8番目は「モデルテクスチャサイズ」

ItemCustomModelTools.java[編集]

private static final Block[] setBleakingList = new Block[] {..., ...., ..., ....};

ここでは、壊せるブロックのリストです。
ここに、登録されてなくても壊せるものはありますが、ここで登録しといたほうがいいです。

public static float damageFloat = 1.0F;

ここでは、対mobに使うところです。

public float getStrVsBlock(ItemStack par1ItemStack, Block par2Block)

ここでは、掘れるマテリアル属性を登録するところです。

ItemCustomModelToolsRenderer.java[編集]

private ModelCustomModelTools modeling;
public ItemCustomModelToolsRenderer()
{
    modeling = new ModelCustomModelTools();
}

ここでは、モデルデータを登録するところです。

public boolean handleRenderType(ItemStack item, ItemRenderType type)

ここでは、モデルをつけるかどうかを認識するところです。
IItemRendererないにある、EnumクラスのItemRenderType.javaにある、「ENTITY」「EQUIPPED」「EQUIPPED_FIRST_PERSON」「INVENTORY」「FIRST_PERSON_MAP」の五つあり、 ENTITYは、EntityItem認識を行うところです。
EQUIPPEDは、今回使うもので、モデル認識を行うところです。
EQUIPPED_FIRST_PERSONは、三人称視点でのモデル認識を行うところです
INVENTORYは、インベントリ内のみモデル認識を行うところです。
FIRST_PERSON_MAPは、MapData.javaの認識転移範囲内にプレイヤーがあるかどうかを確認させて、実行させるかどうかです。

public void renderItem(ItemRenderType type, ItemStack item, Object... data)

ここでは、モデルデータを詳しく登録するところで、先ほど出した「EQUIPPED」の内容を登録するところです。
テクスチャロードは、CustomModelItemをドメインにしてるので、 assets/CustomModelItem/... となり、モデル名前が「model」なので、 assets/CustomModelItem/textures/model/model.png となります。 テクスチャの場所は「assets/CustomModelItem/textures/model/model.png」

ModelCustomModelTools.java[編集]

ここでは、アイテムに使うモデルを設定するところです。