[チュートリアル]ブロック追加MODの作り方[初級][1.1.0]

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

[チュートリアル]ブロック追加MODの作り方[初級][1.1.0]

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

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

・全面同じテクスチャ・機能なしの単純ブロックの追加
・用意するもの
mod_Tutorial.java
BlockTutorial.java
ttr.png(.png形式,16×16)

mod_Tutorial.java
コード: 全て選択
package net.minecraft.src; //MCPのパッケージを読み込む

public class mod_Tutorial extends BaseMod { //クラス本体 BaseMod(ModLoaderのMOD製作API)を継承
   
   public String getVersion() { //MODのバージョン
      return "1.0.0";
   }

   public static Block ttrBlock;//Blockクラス型の変数を宣言します
   public static int blockID = 202; //ブロックIDを設定。既存IDとかぶらなければ何でも。

   public void load() { //ここで大体の処理を行います

      ttrBlock = new BlockTutorial(blockID,0).setBlockName("blockName");
      //BlockクラスのオブジェクトttrBlockを作る。
      ModLoader.RegisterBlock(ttrBlock); //ゲームに新しくブロックを登録する
      ttrBlock.blockIndexInTexture = ModLoader.addOverride("/terrain.png","/ttr/ttr.png");
         //テクスチャを設定(ファイルパスについては後述)
      ModLoader.AddName(ttrBlock, "Tutorial Block");//ゲーム内で表示する名前を設定
      
      ModLoader.AddRecipe(new ItemStack(ttrBlock, 1),
            new Object[]{ "XX","XX",
         Character.valueOf('X'),Block.dirt         
      });
      //ブロックのレシピを設定(詳しいレシピの作り方は別のチュートリアルで)
   }   
}


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

import java.util.Random;

public class BlockTutorial extends Block { //クラス本体。Blockクラスを継承する   
   
   public BlockTutorial(int i, int j) //ブロックの基本設定
   {
      super(i, j, Material.ground); //材質を土に            
   }
   
   public int idDropped(int i, int j,Random random)
   {
      return this.blockID; //壊したときにこのブロックをドロップする
   }
   public int quantityDropped(Random random)
   {
      return 1; //idDropedでドロップする数を設定
   }
}


・ttr.pngをMCPフォルダのbin/minecraftの中にttrフォルダを作り、その中に入れてください
最後に編集したユーザー tsuttsu305 [ 2013年3月18日(月) 20:59 ], 累計 9 回
理由: トピック主の申請により閉鎖(申請理由: 情報が古いため)
MOD作ったりしてます。らこと呼んでください
http://forum.minecraftuser.jp/viewtopic.php?f=13&t=1047
アバター
laco0416
ID:f991a69e
石炭掘り
 
記事: 150
登録日時: 2011年9月17日(土) 19:58

  • (PostNo.11701)

Re: [チュートリアル]ブロック追加MODの作り方

投稿記事by tae0617 » 2011年11月05日(土) 13:32

ブロックの硬さの設定ってどうすればできますか?
tae0617
ID:1c143e2c
木を殴ってる
 
記事: 11
登録日時: 2011年10月27日(木) 17:24

  • (PostNo.11708)

Re: [チュートリアル]ブロック追加MODの作り方

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

tae0617 さんが書きました:ブロックの硬さの設定ってどうすればできますか?

ブロックの硬さはmod_Tutorial()の中で
ttrBlock = new BlockTutorial(blockID,0).setBlockName("blockName").setHardness(0.5f);
のようにすることで設定できます。
設定の目安は、TNTや苗が0f、土が0.5f、丸石が2.0f、黒曜石は10fです。
Block.javaを見ると既存ブロックの設定が他にもいろいろ書いてありますので
一部を紹介します。既存ブロックの性質と照らしあわせて見てみるとわかりやすいです

.setHardness 硬さ(破壊するのにかかる時間)
.setResistance 爆発耐久力
.setStepSound 踏んだ時の音
.setLightValue 明るさ
MOD作ったりしてます。らこと呼んでください
http://forum.minecraftuser.jp/viewtopic.php?f=13&t=1047
アバター
laco0416
ID:f991a69e
石炭掘り
 
記事: 150
登録日時: 2011年9月17日(土) 19:58

  • (PostNo.11722)

Re: [チュートリアル]ブロック追加MODの作り方

投稿記事by tae0617 » 2011年11月05日(土) 17:50

ありがとうございます!
前にwikiを見ながらやったのですがうまくできませんでしたが
分かりやすい説明のおかげで成功するころができました。
ほんとにありがたいです!
tae0617
ID:1c143e2c
木を殴ってる
 
記事: 11
登録日時: 2011年10月27日(木) 17:24

  • (PostNo.12022)

Re: [チュートリアル]ブロック追加MODの作り方[初級]

投稿記事by aruto » 2011年11月08日(火) 13:59

丁寧な解説ありがとうございました!
MODにバージョンは最新の1.8.1に書き換え、クラス名は自分の好きな名前に変え、ブロックIDは「202」のまま。
recompile、startclient共に正常に動作し、クリエイティブモードで確認したのですが、ブロックは追加されませんでした。

原因があるとすればどのような点が考えられますか?
もしよろしければ教えてください、よろしくお願いします。
aruto
ID:d0e12104
 

  • (PostNo.12023)

Re: [チュートリアル]ブロック追加MODの作り方[初級]

投稿記事by laco0416 » 2011年11月08日(火) 14:24

aruto さんが書きました:丁寧な解説ありがとうございました!
MODにバージョンは最新の1.8.1に書き換え、クラス名は自分の好きな名前に変え、ブロックIDは「202」のまま。
recompile、startclient共に正常に動作し、クリエイティブモードで確認したのですが、ブロックは追加されませんでした。

原因があるとすればどのような点が考えられますか?
もしよろしければ教えてください、よろしくお願いします。

クリエイティブモードのブロックリストは既存ブロック以外表示されない仕様になっています。(アイテムは追加されますが。)
なので導入されているかどうかはレシピで確認してください。
MOD作ったりしてます。らこと呼んでください
http://forum.minecraftuser.jp/viewtopic.php?f=13&t=1047
アバター
laco0416
ID:c18f5d77
石炭掘り
 
記事: 150
登録日時: 2011年9月17日(土) 19:58

  • (PostNo.12025)

Re: [チュートリアル]ブロック追加MODの作り方[初級]

投稿記事by aruto » 2011年11月08日(火) 14:38

レシピで作成したところ、無事ブロックが追加されたのを確認することが出来ました。
wikiの作成方法ではいまいちよく分からなかったので、今回のチュートリアルトピックは本当に参考になりました。
lacoさん本当にありがとうございました!
aruto
ID:d0e12104
 

  • (PostNo.14701)

Re: [チュートリアル]ブロック追加MODの作り方[初級][1.8.1]

投稿記事by ueda » 2011年11月30日(水) 19:55

いつもお世話になっております。

(1)mod_Tutorial.javaでpublic String Version()をpublic String getVersion()にする。

(2)mod_Tutorial.javaでpublic class mod_Tutorial extends BaseMod { }の中に
public void load()
{
}
を追加する。

この二点の修正により1.0.0で動作するのを確認しました。
(参考にしたトピック http://forum.minecraftuser.jp/viewtopic.php?f=21&t=2009

他のチュートリアルMODも同じ修正で動作するようになるかもしれません。
テクスチャ作ったりしてる人。
プライベートメッセージ停止中につきご用件は私のサイトのメールフォームへ。
アバター
ueda
ID:aa2cecb2
鉄鉱掘り
 
記事: 290
登録日時: 2011年6月22日(水) 21:40

  • (PostNo.19231)

Re: [チュートリアル]ブロック追加MODの作り方[初級][1.8.1]

投稿記事by sayo » 2012年1月07日(土) 18:26

はじめまして。
大変わかりやすいチュートリアル、ありがとうございます。

参考にして新しい土ブロックを追加してみたのですが、このブロックに対して、特定の道具(この場合はショベル)の採掘速度を反映させるにはどのようにしたら良いのでしょう?
ItemTool.java や ItemSpade.java 、BlockDirt.java などを覗いて、色々試してはみたのですが、どうにも行き詰ってしまいました。
sayo
ID:0c983cc9
 

  • (PostNo.19273)

Re: [チュートリアル]ブロック追加MODの作り方[初級][1.0.0]

投稿記事by laco0416 » 2012年1月08日(日) 00:01

sayo さんが書きました:はじめまして。
大変わかりやすいチュートリアル、ありがとうございます。

参考にして新しい土ブロックを追加してみたのですが、このブロックに対して、特定の道具(この場合はショベル)の採掘速度を反映させるにはどのようにしたら良いのでしょう?
ItemTool.java や ItemSpade.java 、BlockDirt.java などを覗いて、色々試してはみたのですが、どうにも行き詰ってしまいました。

イマイチ具体的にどうされたいのかがわからないので曖昧な返答になりますが
・シャベルが土、砂などを壊す時ダメージが少ないというのはシャベル側で記述されている。
・ブロックを壊すのにかかる時間はsetHardnessでしか設定できない
・Materialは壊れ方を決める(Material.rockはつるはしでしか回収できない)
というポイントをお伝えしておきます
MinecraftForgeのAPIにはブロックにツールごとの耐久値を設定できるメソッドがあるのですが
もしどうしてもという場合はForgeを使うといいかもしれません。

P.S.
1.0.0対応版に書き換えました
MOD作ったりしてます。らこと呼んでください
http://forum.minecraftuser.jp/viewtopic.php?f=13&t=1047
アバター
laco0416
ID:513716d0
石炭掘り
 
記事: 150
登録日時: 2011年9月17日(土) 19:58

  • (PostNo.19325)

Re: [チュートリアル]ブロック追加MODの作り方[初級][1.0.0]

投稿記事by sayo » 2012年1月08日(日) 16:30

返信ありがとうございます。
ようは、新しい土ブロックを作って、それをショベルで掘った際に、普通の土のように採掘速度が変化するようにしたいという事でした。
例のまま実行すると、道具関係なしに同じ採掘速度になりましたので。
最初の「材質を土に」の部分で自動で設定されると思っていたのですが、そうではなかったようですね。

返信を頼りに色々と調べたのですが、ツールの有効対象にブロックを登録する方法がどうしてもわからず、そっちは挫折しました。
代わりに力技ですが、BlockオブジェクトのonBlockClickedメソッドで、左クリックされたときの装備を判別し、装備品がショベルだった場合、ショベルの採掘速度を取得して、動的に硬さを変更する、という方法で解決しました。
なぜかショベルだけでなく剣でも採掘速度が若干上がる(鉄の剣で木のショベルと同じぐらいになる)辺りが謎ですが、実用的には特に問題ないような気がするのでいいかなーと。
もっとスマートなやり方があるのでしょうが・・・

それにしてもmod作成は楽しいですね。
次は新しいツールの作成にもチャレンジしてみたいです。
sayo
ID:0c983cc9
 

  • (PostNo.19326)

追記

投稿記事by sayo » 2012年1月08日(日) 16:34

せっかくオススメしていただいたのですが、Forgeは今のところ導入予定はないのです。
可能な限りシンプルしたいので、ModLoaderのみで導入できるようにしたいなと。
でもそれは便利なメソッドですねー。
他にも色々便利な機能がありそうで、プログラマ的には惹かれるものがありますね(笑)
sayo
ID:0c983cc9
 

  • (PostNo.19349)

Re: [チュートリアル]ブロック追加MODの作り方[初級][1.0.0]

投稿記事by アルゴ » 2012年1月08日(日) 22:28

laco0416 さんが書きました:・ttr.pngをMCPフォルダのbin/minecraftの中にttrフォルダを作り、その中に入れてください

この部分なんですが、startclient.batで起動する場合はそこで実行できますけど、
eclipseから直接実行したい場合は eclipse/Client/bin の位置にも置く必要があるみたいです。(Start.classのある場所)

場所を調べるのに時間がかかったのでメモを兼ねて投稿しておきます。
アルゴ
ID:e083b4a2
石炭掘り
 
記事: 218
登録日時: 2011年12月26日(月) 03:13

  • (PostNo.23665)

Re: [チュートリアル]ブロック追加MODの作り方[初級][1.0.0]

投稿記事by kaz0982 » 2012年2月09日(木) 15:23

始めまして。最近MOD作ろうと参考にさせていただいてます!

質問なのですが、BlockTutorial.javaのところでブロックを破壊したときに別のアイテムをアイテム化させようと思っているんですがなかなかうまくいきません。

グローストーンなどのソースを見て
return this.blockID; //壊したときにこのブロックをドロップする
の部分を
return Item.porkRaw.shiftedIndex;
にしてみてテストプレイしてみたんですが、破壊したブロックがアイテム化してしまいます。

ご教授お願いします!
kaz0982
ID:e8cb719e
水から上がったとこ
 
記事: 1
登録日時: 2012年2月09日(木) 15:08

  • (PostNo.24211)

Re: [チュートリアル]ブロック追加MODの作り方[初級][1.0.0]

投稿記事by 江戸川 » 2012年2月13日(月) 18:48

透明を使ったテクスチャを使用したブロックを作ろうと思ったんですが、実際に配置してみたら奥のブロックまで透明になってしまいます。奥のブロックを透明にしない(ガラスのように)方法を教えてください。
非常に分かりにくい文章になってしまいましたがどうかお願いします。
江戸川
ID:b0a5f7c1
 

  • (PostNo.24213)

Re: [チュートリアル]ブロック追加MODの作り方[初級][1.0.0]

投稿記事by ayamitsu » 2012年2月13日(月) 18:53

江戸川 さんが書きました:透明を使ったテクスチャを使用したブロックを作ろうと思ったんですが、実際に配置してみたら奥のブロックまで透明になってしまいます。奥のブロックを透明にしない(ガラスのように)方法を教えてください。
非常に分かりにくい文章になってしまいましたがどうかお願いします。

一度ガラス(BlockGlass)のソースを確認してみてください。
継承してるクラスが何か、どういうメソッドが使われているかをみてください。
アバター
ayamitsu
ID:74ddb83a
ラピスラズリ収集家
 
記事: 1068
登録日時: 2011年8月10日(水) 19:04
お住まい: 琵琶湖の底らへん

  • (PostNo.25282)

Re: [チュートリアル]ブロック追加MODの作り方[初級][1.1.0]

投稿記事by さぶイリュ » 2012年2月19日(日) 13:33

public void load() { ここで大体の処理を行います
→ public void load() { //ここで大体の処理を行います
/抜けてましたー(まぁやってみてエラーをみたらわかると思うけど一応報告)
さぶイリュ
ID:8182d378
 

  • (PostNo.27642)

Re: [チュートリアル]ブロック追加MODの作り方[初級][1.1.0]

投稿記事by karura » 2012年3月05日(月) 16:06

解説に乗ってあるソースをそのままsrcに入れたら(※この時ttr.pngを入れてる)
エラーが続いてレコンパイルの時点で積みます。
ソース自体には手を付けていません。なにを間違えているのでしょうか?

ご教授お願いします!
karura
ID:a75bbc74
石掘り
 
記事: 113
登録日時: 2011年9月01日(木) 13:13
お住まい: マルチサーバー

  • (PostNo.27645)

Re: [チュートリアル]ブロック追加MODの作り方[初級][1.1.0]

投稿記事by edke » 2012年3月05日(月) 16:14

karura さんが書きました:解説に乗ってあるソースをそのままsrcに入れたら(※この時ttr.pngを入れてる)
エラーが続いてレコンパイルの時点で積みます。
ソース自体には手を付けていません。なにを間違えているのでしょうか?

ご教授お願いします!

原因の心当たりがあるので横から入らせていただきます。
1つ目、ただModLoaderを入れ忘れている。まぁこれなら導入するだけで直ります。

2つ目、おそらくこれかと。
1.2にModLoaderが対応する際、ModLoaderのメソッド名がAddNameやAddRecipeから、addNameやaddRecipeと、小文字に変わったようです。
ためしに変えてみてください。それで直れば解決です。
らこさんにはトピックの更新をお願いします。やっぱり初心者が引っかかりやすいかと・・・
*初心もっだーの成れの果て*
アバター
edke
ID:a76b853b
金掘り
 
記事: 382
登録日時: 2011年12月12日(月) 21:42

  • (PostNo.27717)

Re: [チュートリアル]ブロック追加MODの作り方[初級][1.1.0]

投稿記事by karura » 2012年3月05日(月) 22:10

edke さんが書きました:原因の心当たりがあるので横から入らせていただきます。
1つ目、ただModLoaderを入れ忘れている。まぁこれなら導入するだけで直ります。

2つ目、おそらくこれかと。
1.2にModLoaderが対応する際、ModLoaderのメソッド名がAddNameやAddRecipeから、addNameやaddRecipeと、小文字に変わったようです。
ためしに変えてみてください。それで直れば解決です。
らこさんにはトピックの更新をお願いします。やっぱり初心者が引っかかりやすいかと・・・

ご教授ありがとうございます。しかし、エラーが1つに減ったばかりで解決しませんorz
mod_Tutorial.java
コード: 全て選択
package net.minecraft.src; //MCPのパッケージを読み込む

public class mod_Tutorial extends BaseMod { //クラス本体 BaseMod(ModLoaderのMOD製作API)を継承
   
   public String getVersion() { //MODのバージョン
      return "1.2.3";
   }

   public static Block ttrBlock;//Blockクラス型の変数を宣言します
   public static int blockID = 202; //ブロックIDを設定。既存IDとかぶらなければ何でも。

   public void load() { //ここで大体の処理を行います

      ttrBlock = new BlockTutorial(blockID,0).setBlockName("blockName");
      //BlockクラスのオブジェクトttrBlockを作る。
      ModLoader.RegisterBlock(ttrBlock); //ゲームに新しくブロックを登録する
      ttrBlock.blockIndexInTexture = ModLoader.addOverride("/terrain.png","/ttr/ttr.png");
         //テクスチャを設定(ファイルパスについては後述)
      ModLoader.addName(ttrBlock, "Tutorial Block");//ゲーム内で表示する名前を設定
     
      ModLoader.addRecipe(new ItemStack(ttrBlock, 1),
            new Object[]{ "XX","XX",
         Character.valueOf('X'),Block.dirt         
      });
      //ブロックのレシピを設定(詳しいレシピの作り方は別のチュートリアルで)
   }   
}

ちなみに関係ないと思いますが、
BlockTutorial.java ※これ自体の変更はしてません。
コード: 全て選択
package net.minecraft.src;

import java.util.Random;

public class BlockTutorial extends Block { //クラス本体。Blockクラスを継承する   
   
   public BlockTutorial(int i, int j) //ブロックの基本設定
   {
      super(i, j, Material.ground); //材質を土に           
   }
   
   public int idDropped(int i, int j,Random random)
   {
      return this.blockID; //壊したときにこのブロックをドロップする
   }
   public int quantityDropped(Random random)
   {
      return 1; //idDropedでドロップする数を設定
   }
}
karura
ID:a75bbc74
石掘り
 
記事: 113
登録日時: 2011年9月01日(木) 13:13
お住まい: マルチサーバー

次へ

Return to 開発関連

x