[解決済み]【質問】壊れるまで使うと特定のアイテムをドロップするツール作成に付いて

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

[解決済み]【質問】壊れるまで使うと特定のアイテムをドロップするツール作成に付いて

投稿記事by Schr0 » 2012年6月09日(土) 05:51

トピックを開いていただきありがとう御座います。ほんの少しの事でも良いので答えてくださると嬉しいです。

【質問】
当初は、『【刀(剣ツール)】を壊れるまで使うと、【壊れた刀(通常アイテム)】をドロップ(インベントリへ残す)』というものを考えていました。
ですが、既存ソースを覗いて見ても壊れる際のツールの挙動というものが解らず頓挫…。
そこで、『IC2のドリルのような挙動(一定の値になると効果を発揮しなくなる&壊れない)』を目指すことにし、このトピックを投稿するに至りました。
些細な事でも全然結構ですので、よろしくお願いします。

※前者の挙動も解る方いましたらお願いします。

追記
無事解決! 

追記2
※後の方が参考になるかも知れないので、少しタイトルを変更しました。
IC2のドリルのような挙動をするツール作成に付いて ⇒ 壊れるまで使うと特定のアイテムをドロップするツール作成に付いて
最後に編集したユーザー Schr0 [ 2012年6月21日(木) 23:22 ], 累計 4 回
アバター
Schr0
ID:b6afdb15
鉄鉱掘り
 
記事: 330
登録日時: 2011年9月07日(水) 05:21

  • (PostNo.42466)

Re: 【質問】IC2のドリルのような挙動をするツール作成に付いて

投稿記事by mozipi » 2012年6月09日(土) 08:46

コンストラクターでsetMaxDamage(int);をし、
ブロックを壊した壊したときに、ItemStack.damageItem(int, EntityPlayer);
でいけると思いますが...
画像
UsefulMilletなどの製作を行っています。
よろしければどうぞ。
ニコニコミュニティ:co2105535
サイト:http://mozipi.jpn.ph/

NAGServerの運営もしております。ぜひ投票・サーバーログインお願い致します
画像
アバター
mozipi
ID:70c1b47f
レッドストーン掘り
 
記事: 569
登録日時: 2011年12月26日(月) 19:44
お住まい: 岐阜

  • (PostNo.42467)

Re: 【質問】IC2のドリルのような挙動をするツール作成に付いて

投稿記事by edke » 2012年6月09日(土) 08:53

setMaxDamage(int);
はどれだけ使えるかを決めるもので、壊れていく処理は使うごとに
ItemStack.damageItem(int, EntityPlayer);
すれば問題ないですね。
ただこれだと限界になったときに壊れてしまうので、
その限界に達したときに、アイテムを入れ替えるという処理をかければ良いと思います。
return new ItemStack(壊れた刀,1);
*初心もっだーの成れの果て*
アバター
edke
ID:a76b853b
金掘り
 
記事: 382
登録日時: 2011年12月12日(月) 21:42

  • (PostNo.42469)

Re: 【質問】IC2のドリルのような挙動をするツール作成に付いて

投稿記事by edke » 2012年6月09日(土) 08:59

今チェックしたところ・・・ぎりぎりで壊れる前に入れ替えはなかなか難しいのかも?
なのでその直前まで置いといて、次に使った時はダメージを加算せず入れ替える処理を代わりにする、というのが適切になるかと思います。
*初心もっだーの成れの果て*
アバター
edke
ID:a76b853b
金掘り
 
記事: 382
登録日時: 2011年12月12日(月) 21:42

  • (PostNo.42472)

Re: 【質問】IC2のドリルのような挙動をするツール作成に付いて

投稿記事by Schr0 » 2012年6月09日(土) 10:06

edke さんが書きました:

momizi さんが書きました:

お二方、本当にありがとう御座います!!
というかedlkeさんには別トピでもお世話になったりで何だか申し訳ないorz

早速、アドバイスを元に一応自分で考えてやってみたのですが、何だかあともう一歩のような所で上手くいきません…。
もしかしたら明後日の方向に受け取ってるかも…

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

public class ItemMaidenBlade extends Item
{
    private int weaponDamage;
    private final EnumToolMaterial toolMaterial;
   
    public ItemMaidenBlade(int par1)
    {
        super(par1);
        toolMaterial = EnumToolMaterial.GOLD;
        maxStackSize = 1;
        setMaxDamage(9);
        weaponDamage = 20;
    }
//剣の耐久度の処理(ここがお手上げです・・・)
   public boolean hitEntity(ItemStack itemstack, EntityLiving entityliving, EntityLiving entityliving1)
        {
   if(itemstack.damageItem(8)){//『もしも剣の耐久度が8になったら、【壊れた刀】に変える(本来なら『壊れた刀』ですがまだ作ってないので『ガストの涙』)』
   return new ItemStack(Item.ghastTear,1);
   
   }else{//それ以外の耐久度の場合は耐久度を1づつ減らす
            itemstack.damageItem(1, entityliving1);
            return true;
         }
   }
//剣の攻撃力の処理?
    public int getDamageVsEntity(Entity par1Entity)
    {
        return weaponDamage;
    }
//ブロックを壊すのはNGにしたいので、解ったら即『壊れた刀』になるような処理にするつもりです
       public boolean onBlockDestroyed(ItemStack par1ItemStack, int par2, int par3, int par4, int par5, EntityLiving par6EntityLiving)
    {
        par1ItemStack.damageItem(8, par6EntityLiving);
        return true;
    }
//アイテムに厚みを持たせる
       public boolean isFull3D()
    {
        return true;
    }
//エンチャント関係?
      public int getItemEnchantability()
    {
        return 0;
    }
//金リンゴみたいなエフェクト
   public boolean hasEffect(ItemStack par1ItemStack)
    {
        return true;
    }

}


それと…
これはこのトピックとは直接は関係ないのですが、追加アイテムをItemクラスに呼び出す処理はどうしたらよいのでしょうか…。
初歩の初歩とは思うのですが・・・orz

追記
剣の攻撃力の処理部分を入れるのを忘れていましたorz
アバター
Schr0
ID:b6afdb15
鉄鉱掘り
 
記事: 330
登録日時: 2011年9月07日(水) 05:21

  • (PostNo.42487)

Re: 【質問】IC2のドリルのような挙動をするツール作成に付いて

投稿記事by mozipi » 2012年6月09日(土) 12:14

Schr0 さんが書きました:
edke さんが書きました:

momizi さんが書きました:

お二方、本当にありがとう御座います!!
というかedlkeさんには別トピでもお世話になったりで何だか申し訳ないorz

早速、アドバイスを元に一応自分で考えてやってみたのですが、何だかあともう一歩のような所で上手くいきません…。
もしかしたら明後日の方向に受け取ってるかも…

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

public class ItemMaidenBlade extends Item
{
    private int weaponDamage;
    private final EnumToolMaterial toolMaterial;
   
    public ItemMaidenBlade(int par1)
    {
        super(par1);
        toolMaterial = EnumToolMaterial.GOLD;
        maxStackSize = 1;
        setMaxDamage(9);
        weaponDamage = 20;
    }
//剣の耐久度の処理(ここがお手上げです・・・)
   public boolean hitEntity(ItemStack itemstack, EntityLiving entityliving, EntityLiving entityliving1)
        {
   if(itemstack.damageItem(8)){//『もしも剣の耐久度が8になったら、【壊れた刀】に変える(本来なら『壊れた刀』ですがまだ作ってないので『ガストの涙』)』
   return new ItemStack(Item.ghastTear,1);
   
   }else{//それ以外の耐久度の場合は耐久度を1づつ減らす
            itemstack.damageItem(1, entityliving1);
            return true;
         }
   }
//剣の攻撃力の処理?
    public int getDamageVsEntity(Entity par1Entity)
    {
        return weaponDamage;
    }
//ブロックを壊すのはNGにしたいので、解ったら即『壊れた刀』になるような処理にするつもりです
       public boolean onBlockDestroyed(ItemStack par1ItemStack, int par2, int par3, int par4, int par5, EntityLiving par6EntityLiving)
    {
        par1ItemStack.damageItem(8, par6EntityLiving);
        return true;
    }
//アイテムに厚みを持たせる
       public boolean isFull3D()
    {
        return true;
    }
//エンチャント関係?
      public int getItemEnchantability()
    {
        return 0;
    }
//金リンゴみたいなエフェクト
   public boolean hasEffect(ItemStack par1ItemStack)
    {
        return true;
    }

}


それと…
これはこのトピックとは直接は関係ないのですが、追加アイテムをItemクラスに呼び出す処理はどうしたらよいのでしょうか…。
初歩の初歩とは思うのですが・・・orz

追記
剣の攻撃力の処理部分を入れるのを忘れていましたorz


getDamageは加算方型みたいです。
なので、ダメージ値が0以上に時に、
EntityLiving1を、EntityPlayer型にして、
EntityPlayer.inventory.addItemStackToInventoryで、アイテムを入れています。
>= 0の所は耐久値に合わせて変えるといいです。

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

public class ItemMaidenBlade extends Item {

       private int weaponDamage;

       public ItemMaidenBlade(int par1)
       {
           super(par1);
           maxStackSize = 1;
           setMaxDamage(1);
           weaponDamage = 20;
       }

   //剣の耐久度の処理(ここがお手上げです・・・)
      public boolean hitEntity(ItemStack itemstack, EntityLiving entityliving, EntityLiving entityliving1)
           {

          EntityPlayer EntityPlayer =(EntityPlayer) entityliving1;

            if(itemstack.getItemDamage() >= 0){
               EntityPlayer.inventory.addItemStackToInventory(new ItemStack(Item.ghastTear));
            }
               itemstack.damageItem(9999, entityliving1);
               return true;
           }

       public int getMaxItemUseDuration(ItemStack par1ItemStack)
       {
           return 0x11940;
       }

   //剣の攻撃力の処理?
       public int getDamageVsEntity(Entity par1Entity)
       {
           return weaponDamage;
       }
   //ブロックを壊すのはNGにしたいので、解ったら即『壊れた刀』になるような処理にするつもりです
          public boolean onBlockDestroyed(ItemStack par1ItemStack, int par2, int par3, int par4, int par5, EntityLiving par6EntityLiving)
       {
          EntityPlayer EntityPlayer = (EntityPlayer) par6EntityLiving;
          EntityPlayer.inventory.addItemStackToInventory(new ItemStack(Item.ghastTear));
           par1ItemStack.damageItem(9999, par6EntityLiving);
           return true;
       }
   //アイテムに厚みを持たせる
          public boolean isFull3D()
       {
           return true;
       }
   //エンチャント関係?
         public int getItemEnchantability()
       {
           return 0;
       }
   //金リンゴみたいなエフェクト
      public boolean hasEffect(ItemStack par1ItemStack)
       {
           return true;
       }

}

画像
UsefulMilletなどの製作を行っています。
よろしければどうぞ。
ニコニコミュニティ:co2105535
サイト:http://mozipi.jpn.ph/

NAGServerの運営もしております。ぜひ投票・サーバーログインお願い致します
画像
アバター
mozipi
ID:70c1b47f
レッドストーン掘り
 
記事: 569
登録日時: 2011年12月26日(月) 19:44
お住まい: 岐阜

  • (PostNo.42514)

Re: 【質問】IC2のドリルのような挙動をするツール作成に付いて

投稿記事by Schr0 » 2012年6月09日(土) 16:14

momizi さんが書きました:

うおおおおおおおおおお!
こんなにご丁寧に・・・いやはや、本当にありがとうございます。
問題なくドロップしてくれるようになりました!

何方かの役に立つかもしれないのでキチンと解決済みとしておきますね。
お二方、本当にありがとうございましたッッ!!
そして…
追加アイテム云々はmod.『mod○○』.宣言名で無事出来たという…orz
アバター
Schr0
ID:b6afdb15
鉄鉱掘り
 
記事: 330
登録日時: 2011年9月07日(水) 05:21


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

x