[チュートリアル]武器追加MODの作り方[初級][1.8.1]

クライアント/サーバーMODの開発に関する話題、技術交換はこちらで。質問は質問フォーラムへお願いします。
  • (PostNo.11622)

[チュートリアル]武器追加MODの作り方[初級][1.8.1]

投稿記事by laco0416 » 2011年11月04日(金) 14:16

Minecraft 1.1.0対応のチュートリアルが公開されています。こちらを御覧ください
viewtopic.php?f=21&t=3168



ModLoaderを利用しています。
MOD製作環境についてはWikiのMOD製作のページ(こちら)を参考にしてください。

・剣の追加(自作素材)
・用意するもの
mod_Tutorial.java
BlockTutorial.java ←ブロック追加のチュートリアルを見てください
ItemTutorialSword.java
EnumToolTutorial.java
ttr.png(ブロックのテクスチャ)
ttrsword.png(剣のテクスチャ)

mod_Tutorial.java
コード: 全て選択
package net.minecraft.src;

public class mod_Tutorial extends BaseMod {    
   public String Version() {
      return "1.0.0";
   }
   public static Block ttrBlock;
   public static int blockID = 202;
   public static Item ttrSword;
   public static int swordID = 5001;

   public mod_Tutorial() {
      ttrBlock = new BlockTutorial(blockID,0).setBlockName("blockName");
      ModLoader.RegisterBlock(ttrBlock);
      ttrBlock.blockIndexInTexture = ModLoader.addOverride("/terrain.png","/ttr/ttr.png");
      ModLoader.AddName(ttrBlock, "Tutorial Block");

      ttrSword = new ItemTutorialSword(swordID, EnumToolTutorial.TUTORIAL).setItemName("ttrSword");
      ttrSword.iconIndex = ModLoader.addOverride("/gui/items.png", "/ttr/ttrsword.png");
      ModLoader.AddName(ttrSword, "Tutorial Sword");

      ModLoader.AddRecipe(new ItemStack(ttrBlock, 1),
            new Object[]{ "XX","XX",
         Character.valueOf('X'),Block.dirt });   
      ModLoader.AddRecipe(new ItemStack(ttrSword, 1),
            new Object[] { "#", "#", "S",
         Character.valueOf('#'), ttrBlock,
         Character.valueOf('S'), Item.stick });
   }   
}

解説
ttrSword = new ItemTutorialSword(swordID, EnumToolTutorial.TUTORIAL)
ItemTutorialSwordクラスのオブジェクトを作ります。()の2つ目の引数は素材を指定します。(後に記述)

ItemTutorialSword.java (長いですが難しくはありません)
次のレスにあるsyoMOさんのコードの方を参照してください。
コード: 全て選択
package net.minecraft.src;

public class ItemTutorialSword extends Item
{

    public ItemTutorialSword(int i, EnumToolTutorial enumtooltutorial)
    {
        super(i);
        maxStackSize = 1;
        setMaxDamage(enumtooltutorial.getMaxUses());
        weaponDamage = 4 + enumtooltutorial.getDamageVsEntity() * 2;
    }

    public float getStrVsBlock(ItemStack itemstack, Block block)
    {
        return block.blockID != Block.web.blockID ? 1.5F : 15F;
    }

    public boolean hitEntity(ItemStack itemstack, EntityLiving entityliving, EntityLiving entityliving1)
    {
        itemstack.damageItem(1, entityliving1);
        return true;
    }

    public boolean onBlockDestroyed(ItemStack itemstack, int i, int j, int k, int l, EntityLiving entityliving)
    {
        itemstack.damageItem(2, entityliving);
        return true;
    }

    public int getDamageVsEntity(Entity entity)
    {
        return weaponDamage;
    }

    public boolean isFull3D()
    {
        return true;
    }

    public boolean canHarvestBlock(Block block)
    {
        return block.blockID == Block.web.blockID;
    }

    private int weaponDamage;
}

解説
public ItemTutorialSword(int i, EnumToolTutorial enumtooltutorial)
EnumToolTutorialを読み込みます。
setMaxDamage(enumtooltutorial.getMaxUses());
EnumToolTutorialで設定した最大ダメージ(耐久度)を読み込みます
weaponDamage = 4 + enumtooltutorial.getDamageVsEntity() * 2;
攻撃力(与えるダメージ)を設定します。この場合、最低ダメージ4に加え、素材ごとの攻撃力を2倍にしたものを足しています。

その他のメソッドは特に触れません。慣れてきたら自分で調べてみてください。

EnumToolTutorial.java (長いですが難しくありません。ツールを作るときにも使います)
コード: 全て選択
package net.minecraft.src;


public enum EnumToolTutorial
{
    TUTORIAL("TUTORIAL", 0, 1, 131, 4F, 1);

    private EnumToolTutorial(String s, int i, int j, int k, float f, int l)
    {
        harvestLevel = j;
        maxUses = k;
        efficiencyOnProperMaterial = f;
        damageVsEntity = l;
    }

    public int getMaxUses()
    {
        return maxUses;
    }

    public float getEfficiencyOnProperMaterial()
    {
        return efficiencyOnProperMaterial;
    }

    public int getDamageVsEntity()
    {
        return damageVsEntity;
    }

    public int getHarvestLevel()
    {
        return harvestLevel;
    }
   
    private final int harvestLevel;
    private final int maxUses;
    private final float efficiencyOnProperMaterial;
    private final int damageVsEntity;
    private static final EnumToolTutorial field_21209_j[]; /* synthetic field */

    static
    {
        field_21209_j = (new EnumToolTutorial[] {
            TUTORIAL
        });
    }
}

解説
TUTORIAL("TUTORIAL", 0, 1, 131, 4F, 1);
素材を宣言します。各引数の意味を説明します
"TUTORIAL" …素材の名前
1番目の数値…設定番号(0から順番につければいいです)
2番目の数値…harvestLevel(採掘のレベルらしいですが木は0、石は1、鉄は2、ダイヤは3、金は0です。)
3番目の数値…耐久度(木:59、石:131、鉄:250、ダイヤ:1561、金:32を参考に設定しましょう)
4番目の数値…作業の速さ(木:2F、石:4F、鉄:6F、ダイヤ:8F、金:12Fを参考に設定しましょう)
5番目の数値…素材攻撃力(木:0、石:1、鉄:2、ダイヤ:3、金:0を参考に設定しましょう)

ttr.pngとttrsword.pngを/bin/ttrフォルダに入れてください。

これで終わりです。ここからの手順はWikiを参照してください。
ソースコードと、modsに導入できる形にしたzipを公開しておきます。
最後に編集したユーザー tsuttsu305 [ 2013年3月19日(火) 00:00 ], 累計 6 回
理由: トピック主の申請により閉鎖(申請理由: 情報が古いため)
MOD作ったりしてます。らこと呼んでください
http://forum.minecraftuser.jp/viewtopic.php?f=13&t=1047
アバター
laco0416
ID:f991a69e
石炭掘り
 
記事: 150
登録日時: 2011年9月17日(土) 19:58

  • (PostNo.11686)

Re: [チュートリアル]武器追加MODの作り方

投稿記事by syoMO » 2011年11月05日(土) 10:23

違うトピックで武器MODのチュートリアルをお願いしたsyoMOです。
作って頂き、感謝しています。
コードを見てて、ItemTutorialSword.java にガードの項目が入ってなかったので、追加したコードを載せておきます。
(ついでに他の方から教えて頂いた説明も載せてます。)
後、MCPで変更する時は、mod_Tutorial.javaの"/ttr/ttrsword.png"から"/mod/ttr/ttrsword.png"(もしくは"/mod/ttrsword.png")
にするって、どこかに書いた方がMOD製作する人にわかり易いと思います。

長文すみませんでした。
コード: 全て選択
package net.minecraft.src;

public class ItemTutorialSword extends Item
{
    public ItemTutorialSword(int i, EnumToolTutorial enumtooltutorial)//剣の初期化を行う。
    {
        super(i);//各アイテム共通の初期化を行う。
        maxStackSize = 1; //インベントリで重ねられる数を設定する。剣は重ねられないので1。
        setMaxDamage(enumtooltutorial.getMaxUses());//剣の耐久度を設定する。材料によって変わる。
        weaponDamage = 4 + enumtooltutorial.getDamageVsEntity() * 2;
         //剣の攻撃力を設定する。材料(enumtooltutorial.~)によって変わる。
    }

    public float getStrVsBlock(ItemStack itemstack, Block block)//ブロックの破壊速度を返す。
    {
        return block.blockID != Block.web.blockID ? 1.5F : 15F;
        //もしクモの巣ブロックであれば素手の15倍、それ以外のブロックは1.5倍。
    }

    public boolean hitEntity(ItemStack itemstack, EntityLiving entityliving, EntityLiving entityliving1)
    //この武器を使ってentityliving1(通常はプレイヤー)がentityliving(通常はMob)を攻撃したときに呼ばれる。
    {
        itemstack.damageItem(1, entityliving1);//剣の耐久度を1減らす。
        return true;//攻撃が成功したことを返す。
    }

    public boolean onBlockDestroyed(ItemStack itemstack, int i, int j, int k, int l, EntityLiving entityliving)
    //この武器を使ってブロックが破壊されたときに呼ばれる。
    {
        itemstack.damageItem(2, entityliving);//剣の耐久度を2減らす。
        return true;//ブロック破壊が成功したことを返す。
    }

    public int getDamageVsEntity(Entity entity)//剣の攻撃力を返す。
    {
        return weaponDamage;//初期化のときに設定した攻撃力を返す。
    }

    public boolean isFull3D()//手に持ったときに厚みを持たせるかどうか。
    {
        return true;//剣なので厚みを持たせる。
    }

    public EnumAction func_35412_b(ItemStack itemstack)//剣を使ったときの動作を返す。
    {
        return EnumAction.block;//ブロックと同じ(振る)動作を行う。
    }

    public int func_35411_c(ItemStack itemstack)//剣を防御に使ったときの持続時間。
    {
        return 0x11940;//10進数では72000。
    }

    public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer)
    //アイテムを持って右クリックしたときに呼ばれる。
    {
        entityplayer.func_35199_b(itemstack, func_35411_c(itemstack)); //剣を防御に使う。
        return itemstack; //使ったアイテムを返す。
    }

    public boolean canHarvestBlock(Block block)
    //素手で壊してもアイテムにならないブロックを剣で壊した際、アイテムが得られるかどうか。
    {
        return block.blockID == Block.web.blockID;//クモの巣であればアイテムを得られる。
    }

    private int weaponDamage;//剣の攻撃力を表す変数。
}
syoMO
ID:30ecf54a
水から上がったとこ
 
記事: 8
登録日時: 2011年10月30日(日) 18:20

  • (PostNo.11726)

Re: [チュートリアル]武器追加MODの作り方

投稿記事by laco0416 » 2011年11月05日(土) 18:15

syoMO さんが書きました:違うトピックで武器MODのチュートリアルをお願いしたsyoMOです。
作って頂き、感謝しています。
コードを見てて、ItemTutorialSword.java にガードの項目が入ってなかったので、追加したコードを載せておきます。
(ついでに他の方から教えて頂いた説明も載せてます。)
後、MCPで変更する時は、mod_Tutorial.javaの"/ttr/ttrsword.png"から"/mod/ttr/ttrsword.png"(もしくは"/mod/ttrsword.png")
にするって、どこかに書いた方がMOD製作する人にわかり易いと思います。

長文すみませんでした。

もともと1.7.3で書いていたコードを元に書いたので防御について抜けていました。
こちらこそ訂正していただいてありがとうございます
MOD作ったりしてます。らこと呼んでください
http://forum.minecraftuser.jp/viewtopic.php?f=13&t=1047
アバター
laco0416
ID:f991a69e
石炭掘り
 
記事: 150
登録日時: 2011年9月17日(土) 19:58

  • (PostNo.15869)

Re: [チュートリアル]武器追加MODの作り方[初級][1.8.1]

投稿記事by zkill00100 » 2011年12月08日(木) 02:21

武器追加チュートリアル有難う御座います
これを探しておりました!

さて、一点御願いがございまして
接近戦武器に関してのチュートリアルは良く分かったのですが
遠距離戦武器についてのチュートリアルもあると嬉しいなぁ~・・・と
勝手な御願いかとは思いますが宜しく御願い致します。
①現状弓矢で戦闘すると"ためる"という行為を削除し矢の"射程"の変更
②矢の機動を"放物線"から"直線"へと切り替え
③消費する"矢"を"別IDのアイテム"に変更
④弓の"耐久力"を消し去るか強化

後は・・・モデルを変えたいな・・・と・・・

要は自作でアサルトライフルを作りたいのです
勝手な御願いかとは思いますがご助力御願い致します。
オレ・・・MODが1.8.1に対応したのが揃ったから・・・・りとるふぉーすで動画UPしてるんだ・・・・・(´ω`)

だがしかしおかし不具合とか競合デッテイウ(;´д`)
アバター
zkill00100
ID:573337d7
木を殴ってる
 
記事: 19
登録日時: 2011年9月10日(土) 02:55

  • (PostNo.20825)

Re: [チュートリアル]武器追加MODの作り方[初級][1.8.1]

投稿記事by syoMO » 2012年1月21日(土) 04:40

このチュートリアルは製品版に更新しないんですか?
エンチャントとか出来るようになりましたし、そういったことも追加した方がいいと思います。
syoMO
ID:30ecf54a
水から上がったとこ
 
記事: 8
登録日時: 2011年10月30日(日) 18:20

  • (PostNo.20853)

Re: [チュートリアル]武器追加MODの作り方[初級][1.8.1]

投稿記事by laco0416 » 2012年1月21日(土) 14:36

syoMO さんが書きました:このチュートリアルは製品版に更新しないんですか?
エンチャントとか出来るようになりましたし、そういったことも追加した方がいいと思います。


あいにく私は製品版になってから武器追加MODを作っていないのでお任せします。
そちらのチュートリアルが公開され次第こちらは削除させて頂きますので。
MOD作ったりしてます。らこと呼んでください
http://forum.minecraftuser.jp/viewtopic.php?f=13&t=1047
アバター
laco0416
ID:513716d0
石炭掘り
 
記事: 150
登録日時: 2011年9月17日(土) 19:58

  • (PostNo.22056)

Re: [チュートリアル]武器追加MODの作り方[初級][1.8.1]

投稿記事by SpringMine » 2012年1月29日(日) 00:54

消しちゃったら資料の意味が無いじゃないですかー!
というわけで追記してしまう。

DiamondSword2.java
コード: 全て選択
package net.minecraft.src;

public class DiamondSword2 extends ItemSword {

   public DiamondSword2(int id) {
         super(id, EnumToolMaterial.EMERALD);
         maxStackSize = 1;
         this.setIconCoord(3, 4);
         this.setItemName("swordDiamond2");
      }   
}


これでダイヤ剣とまったく同等のアイテムの出来上がり。
バニラの剣を継承することで「剣」の機能をそっくりそのまま利用する。
後は必要に応じてパラメータ呼び出しのメソッドをオーバーライドしてあげればOK。
(剣の場合だとgetDamageVsEntityとか。)

うまく今あるものを使うのがメンテナンス上も有利になるポイント。
SpringMine
ID:7bacda2c
石炭掘り
 
記事: 177
登録日時: 2011年12月07日(水) 22:14

  • (PostNo.22845)

Re: [チュートリアル]武器追加MODの作り方[初級][1.8.1]

投稿記事by nanasi128 » 2012年2月03日(金) 17:56

質問です。
道具を追加するmodを作るときにEnumToolTutorial.javaを使うだけで作れるんですか?
ほかに必要なものがあれば教えてください。
nanasi128
ID:371714a8
水から上がったとこ
 
記事: 1
登録日時: 2012年2月02日(木) 21:03

  • (PostNo.22975)

Re: [チュートリアル]武器追加MODの作り方[初級][1.8.1]

投稿記事by SpringMine » 2012年2月04日(土) 11:34

nanasi128 さんが書きました:質問です。
道具を追加するmodを作るときにEnumToolTutorial.javaを使うだけで作れるんですか?
ほかに必要なものがあれば教えてください。


出来ません。
まず、プログラムはすべてそろっていないと目的の物が得られません。

そもそも「EnumToolTutorial」が何の役割を持っているのかがわからないから、その他に何が要るのかも分からない、というところなのでしょう。
コンピューターは書いてあること以外は出来ないので、裏を返せばするべきことはすべてそこに書いてあるのです。(誰が書くか、という違いはありますが)

ということで、あえて必要なものを上げるとすれば「プログラミングの基礎」でしょうか?
「EnumToolTutorial」はそのアイテムに使う素材の性質が書かれているもので、それを実際のアイテムとして使えるようにするのが「ItemTutorialSword」 などのアイテム本体。それをゲーム内で使えるようにするのが「mod_Tutorial.java」になります。
何でこんな構造になってるのか、EnumToolTutorialは要らないんじゃないか。とか考えられたら次のステップかなぁ・・・
SpringMine
ID:7bacda2c
石炭掘り
 
記事: 177
登録日時: 2011年12月07日(水) 22:14

  • (PostNo.23473)

Re: [チュートリアル]武器追加MODの作り方[初級][1.8.1]

投稿記事by nanasi2121 » 2012年2月07日(火) 23:41

質問です
現在弓の強化として鉄弓を新たに作っているのですが
弓を引くモーションの画像の処理をどこでやっているのかがわかりません
わかる方がいれば教えてください
nanasi2121
ID:5716f93f
 


Return to 開発関連

x