[チュートリアル]アイテム追加MODの作り方[初級][1.1.0]

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

Re: [チュートリアル]アイテム追加MODの作り方[初級][1.0.0]

投稿記事by yykimoto » 2012年2月17日(金) 16:16

terapadを使って、
ttrをsmsに
TutorialをStoneMSに置換しています。
また、ファイル名も置換しておきました
画像
アバター
yykimoto
ID:45112fe7
石掘り
 
記事: 133
登録日時: 2011年10月15日(土) 06:15

  • (PostNo.26722)

Re: [チュートリアル]アイテム追加MODの作り方[初級][1.1.0]

投稿記事by めのん » 2012年2月29日(水) 01:39

追加アイテムの食糧ではない方で、既出であった全角スペースのエラーを直して、レコンパイルして、そのままとおりました。
しかしスタートクライアントで起動するとクラッシュするのはなぜなのでしょうか?
めのん
ID:e608b4d3
 

  • (PostNo.27384)

Re: [チュートリアル]アイテム追加MODの作り方[初級][1.1.0]

投稿記事by jelly » 2012年3月04日(日) 11:01

前回、ドア・半ブロック・柵・たいまつ・ベッドの5種類の作り方の質問をした者です。

あれから色んな方が作られたmodをデコンパイルし、中身を照らし合わせて色々と試しているのですが、未だにどうすれば良いのかわかりません。
元々書いていた変数名を自分の好みの変数名に全て変えてみてもエラーが生じたり、modを制作している人によっては、
「Block」「mod_」から始まるclassファイルだけで、以上の5種類のアイテム・ブロックを作られている方もいれば、
「Block」「Render」「Entity」「Item」「mod_」と細かにclassファイルを作られている方もいらっしゃいました。

結局のところ、どの部分のコードでドア、半ブロック、柵、たいまつ、ベッドを判定しているのかがわかりませんでした。
ですのでちょっとしたヒントだけでも教えていただけないでしょうか?
よろしくお願いします。
jelly
ID:d0e12104
 

  • (PostNo.27485)

Re: [チュートリアル]アイテム追加MODの作り方[初級][1.1.0]

投稿記事by yykimoto » 2012年3月04日(日) 21:02

jelly さんが書きました:前回、ドア・半ブロック・柵・たいまつ・ベッドの5種類の作り方の質問をした者です。

あれから色んな方が作られたmodをデコンパイルし、中身を照らし合わせて色々と試しているのですが、未だにどうすれば良いのかわかりません。
元々書いていた変数名を自分の好みの変数名に全て変えてみてもエラーが生じたり、modを制作している人によっては、
「Block」「mod_」から始まるclassファイルだけで、以上の5種類のアイテム・ブロックを作られている方もいれば、
「Block」「Render」「Entity」「Item」「mod_」と細かにclassファイルを作られている方もいらっしゃいました。

結局のところ、どの部分のコードでドア、半ブロック、柵、たいまつ、ベッドを判定しているのかがわかりませんでした。
ですのでちょっとしたヒントだけでも教えていただけないでしょうか?
よろしくお願いします。

僕は、例えばbetだと、BlockBet.javaを、terapadというエディタでbetを○○betに置き換えてみて、それから色々やってみますけどね。
画像
アバター
yykimoto
ID:45112fe7
石掘り
 
記事: 133
登録日時: 2011年10月15日(土) 06:15

  • (PostNo.27488)

Re: [チュートリアル]アイテム追加MODの作り方[初級][1.1.0]

投稿記事by そば娘 » 2012年3月04日(日) 21:16

yykimoto さんが書きました:僕は、例えばbetだと、BlockBet.javaを、terapadというエディタでbetを○○betに置き換えてみて、それから色々やってみますけどね。


Bet ではなく、 Bed ではないでしょうか。(といかBedですよね)

Betだとスロットとかにコインをかける・・・って感じになってしまうんで(笑)
アバター
そば娘
ID:189b3cd0
石掘り
 
記事: 147
登録日時: 2011年9月16日(金) 21:55

  • (PostNo.27556)

Re: [チュートリアル]アイテム追加MODの作り方[初級][1.1.0]

投稿記事by アルゴ » 2012年3月05日(月) 01:54

eclipseを使うとリファクタリングという機能で複数ファイルの同じ変数・型名をまとめて変更することができますよ。
しかもJavaの構文を理解してくれるので文字列内やローカル変数で再定義されたものは除外してくれます。
アルゴ
ID:e083b4a2
石炭掘り
 
記事: 218
登録日時: 2011年12月26日(月) 03:13

  • (PostNo.27601)

Re: [チュートリアル]アイテム追加MODの作り方[初級][1.1.0]

投稿記事by jelly » 2012年3月05日(月) 11:42

返信ありがとうございます。
そういった外部ツールを使い、コードを置き換える方法があったんですね、知りませんでした。
早速試してみたいと思います、ありがとうございました。
jelly
ID:d0e12104
 

  • (PostNo.28529)

Re: [チュートリアル]アイテム追加MODの作り方[初級][1.1.0]

投稿記事by TJ! » 2012年3月10日(土) 03:05

質問です、アイテム追加とレシピ追加modのチュートリアルを参考に下記のようにしたのですが
シンボルが見つけられない、推奨されないAPIを使用またはオーバーライドしています
などといったエラーが出ます
こういった事をするのは始めてなのでよろしくおねがいします

package net.minecraft.src;

public class mod_Manoku extends BaseMod {

public String getVersion() {
return "1.0.0";
}

public static Item ttrItem;
public static int itemID = 5001;

public void load() {

ttrItem = new ItemManzoku(itemID, 20, false).setItemName("ttrItem");
ttrItem.iconIndex = ModLoader.addOverride("/gui/items.png", "/man/manzoku.png");
ModLoader.AddName(ttrItem, "testitem");
ModLoader.AddRecipe(new ItemStack(ttrItem, 1),
new Object[]{ "XYX","XYX","XYX",
Character.valueOf('X'),CocoaBeans, Character.valueOf('Y'),Item.Wheat });
}
}
TJ!
ID:c261d92f
 

  • (PostNo.28564)

Re: [チュートリアル]アイテム追加MODの作り方[初級][1.1.0]

投稿記事by URANOS1260 » 2012年3月10日(土) 09:18

TJ! さんが書きました:質問です、アイテム追加とレシピ追加modのチュートリアルを参考に下記のようにしたのですが
シンボルが見つけられない、推奨されないAPIを使用またはオーバーライドしています
などといったエラーが出ます
こういった事をするのは始めてなのでよろしくおねがいします

1.2からAdd~がすべてadd~にかわりました。そこらへんを見てみてください。
参考になります
アバター
URANOS1260
ID:2eff8df9
石掘り
 
記事: 82
登録日時: 2012年1月08日(日) 00:10

  • (PostNo.28728)

Re: [チュートリアル]アイテム追加MODの作り方[初級][1.1.0]

投稿記事by みどりぃ » 2012年3月11日(日) 09:36

木炭や染料のソースを参考にダメージ値で異なるアイテムになるように設定したいのですが、どうもうまくいきません。
どのようにすれば良いのでしょうか。
コード: 全て選択
package net.minecraft.src;

public class ItemBioItems extends Item{
   public ItemBioItems(int i) {                  //アイテムの基本設定
      super(i);
      setHasSubtypes(true);
      setMaxDamage(0);
   }
   public int getIconFromDamage(int i) { return iconIndex + i; }
   public String getItemNameIS(ItemStack itemstack) {   //ダメージ値ごとの名称を設定
      if (itemstack.getItemDamage() == 3) {
         return "item.com_biochunk";
      } if (itemstack.getItemDamage() == 2) {
         return "item.com_bioball";
      } if (itemstack.getItemDamage() == 1) {
         return "item.biochunk";
      } else {
         return "item.com_biochunk";
      }
    }
}
みどりぃ
ID:ace4c4c4
石掘り
 
記事: 115
登録日時: 2011年11月03日(木) 06:57

  • (PostNo.28739)

Re: [チュートリアル]アイテム追加MODの作り方[初級][1.1.0]

投稿記事by Unyuho » 2012年3月11日(日) 11:21

みどりぃ さんが書きました:木炭や染料のソースを参考にダメージ値で異なるアイテムになるように設定したいのですが、どうもうまくいきません。どのようにすれば良いのでしょうか。

[チュートリアル]複数テクスチャを持つブロック追加MODの作り方[初~中級][1.8.1]と同じような方法で出来ますよ
getIconFromDamageの引数がダメージ値なので、上記トピックのgetBlockTextureFromSideを参考に記述してみてください。
もぢんぐ再開
アバター
Unyuho
ID:d3a4ae03
鉄鉱掘り
 
記事: 278
登録日時: 2012年2月21日(火) 23:51

  • (PostNo.28803)

Re: [チュートリアル]アイテム追加MODの作り方[初級][1.1.0]

投稿記事by みどりぃ » 2012年3月11日(日) 19:57

Unyuho さんが書きました:
みどりぃ さんが書きました:木炭や染料のソースを参考にダメージ値で異なるアイテムになるように設定したいのですが、どうもうまくいきません。どのようにすれば良いのでしょうか。

[チュートリアル]複数テクスチャを持つブロック追加MODの作り方[初~中級][1.8.1]と同じような方法で出来ますよ
getIconFromDamageの引数がダメージ値なので、上記トピックのgetBlockTextureFromSideを参考に記述してみてください。

アイテム追加自体はうまくいきました。しかし、ゲーム中での名称の設定方法がわかりません。
教えてくださると助かります。
みどりぃ
ID:ace4c4c4
石掘り
 
記事: 115
登録日時: 2011年11月03日(木) 06:57

  • (PostNo.28806)

Re: [チュートリアル]アイテム追加MODの作り方[初級][1.1.0]

投稿記事by Unyuho » 2012年3月11日(日) 20:09

mod_XXXX にModLoader.addName(追加するitem,"名称")を追加すれば、名称の設定はできますよ

(もし、日本語の設定がしたいという場合は、minecraft.jar\lang配下のja_JP.langファイルを更新する )
もぢんぐ再開
アバター
Unyuho
ID:d3a4ae03
鉄鉱掘り
 
記事: 278
登録日時: 2012年2月21日(火) 23:51

  • (PostNo.28822)

Re: [チュートリアル]アイテム追加MODの作り方[初級][1.1.0]

投稿記事by みどりぃ » 2012年3月11日(日) 21:56

Unyuho さんが書きました:mod_XXXX にModLoader.addName(追加するitem,"名称")を追加すれば、名称の設定はできますよ

(もし、日本語の設定がしたいという場合は、minecraft.jar\lang配下のja_JP.langファイルを更新する )


うまくいきました!ありがとうございました!
みどりぃ
ID:ace4c4c4
石掘り
 
記事: 115
登録日時: 2011年11月03日(木) 06:57

  • (PostNo.30132)

Re: [チュートリアル]アイテム追加MODの作り方[初級][1.1.0]

投稿記事by kuromo2316 » 2012年3月19日(月) 23:16

こんばんは。MODを日本語対応させたいんですがどうすればいいですか?.langを書き換えればいいのはわかっているのですが。
どのように書き換えればいいかわかりません・・・返答お願いします。
アバター
kuromo2316
ID:2d47b508
木を殴ってる
 
記事: 22
登録日時: 2012年1月10日(火) 13:43

  • (PostNo.30139)

Re: [チュートリアル]アイテム追加MODの作り方[初級][1.1.0]

投稿記事by Unyuho » 2012年3月19日(月) 23:30

上の回答でlang書き換えとかアホな事書いちゃいましたが、ModLoader.addName(item,"ja_JP","名称")で出来ますよ
ダメージ値毎に別名称にする場合は、ModLoader.addName(itemstack,"ja_JP","名称")です
もぢんぐ再開
アバター
Unyuho
ID:d3a4ae03
鉄鉱掘り
 
記事: 278
登録日時: 2012年2月21日(火) 23:51

  • (PostNo.36679)

回復量が変動する食料

投稿記事by NurseAngel » 2012年5月02日(水) 22:59

こんにちは。
こちらの記事を参考にさせていただき、前「食べると満腹度が-20される食料」というのを作りました。
viewtopic.php?f=13&t=1758&start=80#p30404

で、今回「食べると満腹度が0になる食料」というのを作りまして(というか元々こっちがやりたかった)
こんな作りで問題がないか非常に疑問なので詳しい方教えて頂けないでしょうかという質問です。
ログにCONFLICT @5000とか出るから明らかに問題だとは思うのですが、まあ動くには動いたんでまあいいやーとかそんなアレで。
他にどうすればいいかというのが思いつきませんでした。

mod_Zombeefex.java
コード: 全て選択

package net.minecraft.src;
public class mod_Zombeefex extends BaseMod {

   @MLProp(info = "itemZombeefex ID", max = 32000, min = 256, name = "itemZombeefexID")   public static int  itemZombeefexID= 5000;
   public static Item itemZombeefex;
   @Override
   public String getVersion() { return "1.2.5"; }
   @Override
   public void load() {
      itemZombeefex = new ItemZombeefex(itemZombeefexID, -19, true).setItemName("Zombeef Ex");
      itemZombeefex.iconIndex = Item.rottenFlesh.iconIndex;
      ModLoader.addName(itemZombeefex, "Zombeef Ex");
      ModLoader.addRecipe(new ItemStack(itemZombeefex, 1), new Object[]{ "XXX", Character.valueOf('X'),Item.rottenFlesh });
   }
}



ItemZombeefex.java
コード: 全て選択

package net.minecraft.src;
public class ItemZombeefex extends ItemFood {
   private int itemZombeefexID;
   private boolean wolfFlag;
   
   public ItemZombeefex(int itemZombeefexID, int j , boolean wolfFlag){
      super(itemZombeefexID, j, wolfFlag);
      maxStackSize = 64;
      this.itemZombeefexID = itemZombeefexID;
      this.wolfFlag = wolfFlag;
      this.setAlwaysEdible(); //満腹でも食べられる
   }

   @Override
    public ItemStack onFoodEaten(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
    {
      //ItemFood.healAmountがfinalなので毎回インスタンス作って上書き

      //get now foodLevel
      int foodLevel = par3EntityPlayer.foodStats.getFoodLevel();
      //make new dummy item
      ItemZombeefex item = new ItemZombeefex(this.itemZombeefexID, 0-foodLevel, this.wolfFlag);
      item.iconIndex = Item.rottenFlesh.iconIndex; //毎回書かないとグラフィックがバグる

      //super
        --par1ItemStack.stackSize;
        par3EntityPlayer.getFoodStats().addStats(item);
        par2World.playSoundAtEntity(par3EntityPlayer, "random.burp", 0.5F, par2World.rand.nextFloat() * 0.1F + 0.9F);
        return par1ItemStack;
    }
}



回復量が変動する食べ物というのを他に見たことがないので、そもそも想定されてる動作か自体わからないのですが。
個人的にはonFoodEatenを上書きしてるのが気持ち悪いというか。

#普段PHPなのでJavaはちょっと苦手…
NurseAngel
ID:17ba66d7
石炭掘り
 
記事: 205
登録日時: 2012年3月17日(土) 21:38

  • (PostNo.36715)

Re: 回復量が変動する食料

投稿記事by URANOS1260 » 2012年5月03日(木) 11:38

NurseAngel さんが書きました:こんにちは。
こちらの記事を参考にさせていただき、前「食べると満腹度が-20される食料」というのを作りました。
viewtopic.php?f=13&t=1758&start=80#p30404

で、今回「食べると満腹度が0になる食料」というのを作りまして(というか元々こっちがやりたかった)
こんな作りで問題がないか非常に疑問なので詳しい方教えて頂けないでしょうかという質問です。
ログにCONFLICT @5000とか出るから明らかに問題だとは思うのですが、まあ動くには動いたんでまあいいやーとかそんなアレで。
他にどうすればいいかというのが思いつきませんでした。

mod_Zombeefex.java

ItemZombeefex.java


こちらで別の?方法でできたので貼りますね。
コード: 全て選択
package net.minecraft.src;

public class ItemZombeefex extends ItemFood
{
   protected ItemZombeefex(int i, int j, boolean flag)
   {
      super(i, j, flag);
      maxStackSize = 64;
      this.setAlwaysEdible();
   }
   
   public ItemStack onFoodEaten(ItemStack itemstack, World world, EntityPlayer entityplayer)
   {
      --itemstack.stackSize;
      int foodLevelNow = entityplayer.foodStats.getFoodLevel();//現在の満腹度確認
      entityplayer.getFoodStats().addStats(1 - foodLevelNow, 0.6F);//満腹度が1残るように、0.6Fはsuper(i, j, flag)をたどるとわかる
      world.playSoundAtEntity(entityplayer, "random.burp", 0.5F, world.rand.nextFloat() * 0.1F + 0.9F);
      
      return itemstack;
   }
}

・解説
 今回重要なのはentityplayer.getFoodStats().addStats(1 - foodLevelNow, 0.6F);ここです。
 ItemFoodのほうをみると、par3EntityPlayer.getFoodStats().addStats(this);とあります。thisはアイテムを返してます。
 このままだとよくわかりません。そこで(たまたまみつけたのですが)public int getHealAmount()をみると、回復量を返しています。
 このメソッドの呼び出し階層を開くと、”FoodStats”というクラスにたどり着きます。そこにaddStats(this)やaddStats(1 - foodLevelNow, 0.6F)がありました。
 
 こんなところかな。説明がヘタですみません。
 一応ソースも置いておきます
添付ファイル
ItemZombeefex.zip
サンプル(?)
(1014 バイト) ダウンロード数: 28 回
アバター
URANOS1260
ID:2eff8df9
石掘り
 
記事: 82
登録日時: 2012年1月08日(日) 00:10

  • (PostNo.36811)

Re: [チュートリアル]アイテム追加MODの作り方[初級][1.1.0]

投稿記事by NurseAngel » 2012年5月04日(金) 00:04

解説ありがとうございます。

たしかにFoodStatsにはaddStats(ItemFood)以外にaddStats(int, float)もありますね。
一応FoodStatsまでは辿り着いていたのですが、ItemFood.onFoodEaten()に引きずられて他のメソッドを使う発想に思い至りませんでした。
何故これを使うのを思いつかなかったのだろう…

どうやら無事解決したようです。
ありがとうございます。




…よく見てみたらFoodStats.setFoodLevel()とかいうメソッドがwww
NurseAngel
ID:17ba66d7
石炭掘り
 
記事: 205
登録日時: 2012年3月17日(土) 21:38

  • (PostNo.41253)

Item.onBlockDestroyed()時にWorld.getBlockMetadata()が取得できない

投稿記事by NurseAngel » 2012年5月30日(水) 21:33

また質問に来ました!

コード: 全て選択
public class itemHoge extends Item{
   //他のメソッドは省略
   
    /*
     * ブロックを破壊した際に呼ばれる
     * @param ItemStack 破壊に使用したアイテム(つまりitemHoge)
     * @param int 壊したブロックID
     * @param int 壊したブロックのX座標
     * @param int 壊したブロックのY座標
     * @param int 壊したブロックのZ座標
     * @param EntityLiving 自分?
     */
   @Override
    public boolean onBlockDestroyed(ItemStack par1ItemStack, int par2, int par3, int par4, int par5, EntityLiving par6EntityLiving){
       //引数にWorldがないので適当に取得
       World par1World = par6EntityLiving.worldObj;
       //ブロックのメタデータを取得
        int blockMetadata =  par1World.getBlockMetadata(par3, par4, par5);
        //アイテム
        ItemStack itemStack = new ItemStack(par2, 1, blockMetadata);
        //ドロップ
        EntityItem entityitem = new EntityItem(par1World, (double)par3, (double)par4, (double)par5, itemStack);
        par1World.spawnEntityInWorld(entityitem);
    }
}


Item.onBlockDestroyed()の引数を調べたところ上のようになっていると思います。

特定のブロックを壊したときにアイテムをドロップしようとしており、
Item.onBlockDestroyed()内で対象ブロックを取得しています。

ブロックIDは引数にあるので、メタデータをEntityLiving.worldObj.getBlockMetadata()で持ってこようとしたのですが、
これが何故か常時0になってしまいます。
#試したのは葉と草(Tall Grass、Live Shrub)
引数とかは間違ってないと思うのですが、どこがおかしいのでしょうか。
やっぱEntityLiving.worldObj?
というか引数にWorldがないときって、どうするのが作法なんでしょう?


#スレッドを立てるまでもない質問スレとかがあるといいなと思った
NurseAngel
ID:17ba66d7
石炭掘り
 
記事: 205
登録日時: 2012年3月17日(土) 21:38

1つ前へ次へ

Return to 開発関連

x