ダメージ値ごとに名称を設定する方法について

Modding・サーバPlugin制作・ツール制作など、開発関連の質問があればこちらにお願い致します。
フォーラムルール
質問関連フォーラムで質問する時は、必ず次のトピックを一読/厳守お願い致します。
viewtopic.php?f=5&t=999
  • (PostNo.32721)

ダメージ値ごとに名称を設定する方法について

投稿記事by みどりぃ » 2012年4月03日(火) 09:57

・既存アイテムに既存クラスを書き換えずに、ダメージ値ごとの名称を設定する
・ダメージ値のあるアイテムに日本語名を設定する
以上の2つがわかりません。助けてくださるとありがたいです。
みどりぃ
ID:ace4c4c4
石掘り
 
記事: 115
登録日時: 2011年11月03日(木) 06:57

  • (PostNo.32805)

Re: ダメージ値ごとに名称を設定する方法について

投稿記事by Unyuho » 2012年4月03日(火) 14:04

ModLoader.addNameにItemStackを指定すれば、ダメージ値の指定が出来ます。
石炭・木炭の日本語名を変更する例:
コード: 全て選択
//「石炭」を「せきたん」に変更
ItemStack coal = new ItemStack(Item.coal,1,0);
ModLoader.addName(coal, "ja_JP","せきたん");

//「木炭」を「もくたん」に変更
ItemStack charcoal = new ItemStack(Item.coal,1,1);
ModLoader.addName(charcoal, "ja_JP","もくたん");
もぢんぐ再開
アバター
Unyuho
ID:d3a4ae03
鉄鉱掘り
 
記事: 278
登録日時: 2012年2月21日(火) 23:51
お住まい: 日本の何処かに住んでます。

  • (PostNo.32816)

Re: ダメージ値ごとに名称を設定する方法について

投稿記事by みどりぃ » 2012年4月03日(火) 14:49

Unyuho さんが書きました:ModLoader.addNameにItemStackを指定すれば、ダメージ値の指定が出来ます。

コード: 全て選択
      ItemStack stairDouble0 = new ItemStack(Block.stairDouble,1,0);
      ModLoader.addName(stairDouble0, "en_US","Stone Panel");
      ItemStack stairDouble1 = new ItemStack(Block.stairDouble,1,1);
      ModLoader.addName(stairDouble1, "en_US","Double Sandstone Slabs");
      ItemStack stairDouble2 = new ItemStack(Block.stairDouble,1,2);
      ModLoader.addName(stairDouble2, "en_US","Double Planks Slabs");
      ItemStack stairDouble3 = new ItemStack(Block.stairDouble,1,3);
      ModLoader.addName(stairDouble3, "en_US","Double Cobblestone Slabs");
      ItemStack stairDouble4 = new ItemStack(Block.stairDouble,1,4);
      ModLoader.addName(stairDouble4, "en_US","Double Brick Slabs");
      ItemStack stairDouble5 = new ItemStack(Block.stairDouble,1,5);
      ModLoader.addName(stairDouble5, "en_US","Double Stone Brick Slabs");

以上のように記述しましたが、重ねた半ブロックの名称が全て最後に指定した"Double Stone Brick Slabs"になってしまいました。
どこが間違っているのでしょうか・・・。
みどりぃ
ID:ace4c4c4
石掘り
 
記事: 115
登録日時: 2011年11月03日(木) 06:57

  • (PostNo.32824)

Re: ダメージ値ごとに名称を設定する方法について

投稿記事by Unyuho » 2012年4月03日(火) 15:26

重ねた半ブロックは、ダメージ値毎に名称を持っていないため、最後の名称が全てに反映されてしまいます。
こういった既存クラスを変更せずに、ダメージ値毎に名称を設定する方法は、無いかと思います。
もぢんぐ再開
アバター
Unyuho
ID:d3a4ae03
鉄鉱掘り
 
記事: 278
登録日時: 2012年2月21日(火) 23:51
お住まい: 日本の何処かに住んでます。

  • (PostNo.32832)

Re: ダメージ値ごとに名称を設定する方法について

投稿記事by みどりぃ » 2012年4月03日(火) 17:01

Unyuho さんが書きました:こういった既存クラスを変更せずに、ダメージ値毎に名称を設定する方法は、無いかと思います。

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

  • (PostNo.32869)

Re: ダメージ値ごとに名称を設定する方法について

投稿記事by rouge » 2012年4月03日(火) 19:57

まずは通常の話をします。
本来メタデータを持っていないブロックでも、自前でItemBlockクラスを作り関連付けてやれば、
インベントリ内でも管理できるようになり名前もダメージ値毎に分けれます(たぶん)
なので、次のように付け加えてみます。
BaseMod部分
コード: 全て選択
   public static Item slabdoubleitem;

   public void load()
   {
      slabdoubleitem = new ItemSlabDouble(Block.stairDouble.blockID - 256);
      ItemStack stairDouble0 = new ItemStack(slabdoubleitem,1,0);//Itemで指定
      ModLoader.addName(stairDouble0, "en_US","Stone Panel");

ItemBlock部分
コード: 全て選択
package net.minecraft.src;

public class ItemSlabDouble extends ItemSlab
{
    public ItemSlabDouble(int par1)
    {
        super(par1);
        setMaxDamage(0);
        setHasSubtypes(true);
    }
}


で、今回の話ですが本来なら上記の手段をとればクラスを書き換えることなくできるはずです。
しかし、重ねた半ブロックに関しては動作がおかしくなります。
(アイテムごとで管理出来るが、名前が半ブロックと重ねた半ブロックで同じになる)

これは内部的に半ブロックも重ねた半ブロックも全く同じ名前で管理しているからです。
コード: 全て選択
stairDouble = (new BlockStep(43, true)).setHardness(2.0F).setResistance(10F).setStepSound(soundStoneFootstep).setBlockName("stoneSlab");
stairSingle = (new BlockStep(44, false)).setHardness(2.0F).setResistance(10F).setStepSound(soundStoneFootstep).setBlockName("stoneSlab");

試しにstairDoubleの.setBlockName("stoneSlab")を"stoneSlabDouble"にでも変えてやったらちゃんと変わりました。
無駄に悩んだよ!
やっぱりクラス書き換えなきゃダメなのか!?
rouge
ID:23ecc378
木を殴ってる
 
記事: 18
登録日時: 2012年3月15日(木) 18:31

  • (PostNo.32887)

Re: ダメージ値ごとに名称を設定する方法について

投稿記事by Unyuho » 2012年4月03日(火) 21:17

あー、たしかにItemBlockクラス自作すれば、既存クラスは書き換えなくてすみますね。
クラス追加しないで対応できるか、みたいな考え方しちゃってました。申し訳ないです。
もぢんぐ再開
アバター
Unyuho
ID:d3a4ae03
鉄鉱掘り
 
記事: 278
登録日時: 2012年2月21日(火) 23:51
お住まい: 日本の何処かに住んでます。

  • (PostNo.47082)

Re: ダメージ値ごとに名称を設定する方法について

投稿記事by みどりぃ » 2012年7月15日(日) 12:12

今更ですがrougeさん、Unyuhoさん、ありがとうございます。
ItemBlockクラスを自作すればいいんですね。
みどりぃ
ID:ace4c4c4
石掘り
 
記事: 115
登録日時: 2011年11月03日(木) 06:57


Return to 質問:開発・制作関連

x