【1.7.10】耐久値を消費してクラフトするアイテム【解決済み】

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

【1.7.10】耐久値を消費してクラフトするアイテム【解決済み】

投稿記事by KAISEEEEI217 » 2016年10月13日(木) 17:45

クラフト時に耐久度を消費する、ということがしたいのですが、うまくいきません。
(gregのハンマー見たいな感じ)
思いついた方法としては、onUpdateで変数にentityを入れてthis.setContainerItem(this.damageItem(1, player))
みたいな感じでいけるとおもったのですが、うまくいかず、いろいろ試行錯誤したのですが、
結局うまくいかなかったので、質問させていただきました。
理想としては、
・クラフト時グリッドにそのまま残る
・クラフト時に耐久力が1減る
です。
よろしく御願いします。

アイテムクラスのソース(アイテムの追加やツールマテリアルの設定は動作確認済みです。あといろいろ試行錯誤したのでコードがぐちゃぐちゃです。すいません)
コード: 全て選択
//(インポート等は省略しています。)
public class Hammer extends ItemSword{

   public static Entity ent;

   public Hammer(ToolMaterial Material) {
      super(Material);
      this.setMaxStackSize(1);
      this.setCreativeTab(CreativeTabs.tabTools);
      this.setContainerItem(this);
      this.setFull3D();
      this.setUnlocalizedName("Hammer");
      this.setTextureName("kaiseimod:hammer");
   }

   public void onUpdate(ItemStack itemStack, World world, Entity entity, int slot, boolean isHeld) {
      ent = entity;
      //((ICommandSender) ent).addChatMessage(new ChatComponentTranslation(""+ ent));
      //((ICommandSender) entity).addChatMessage(new ChatComponentTranslation("onUpdate2"));
      //itemStack.damageItem(1, (EntityLivingBase) entity);
   }

   public boolean doesContainerItemLeaveCraftingGrid(ItemStack stack){
      //stack.damageItem(1, (EntityLivingBase) ent);
      //((ICommandSender) ent).addChatMessage(new ChatComponentTranslation(""+ent));
        return false;
    }
   public boolean hasContainerItem(){
        return true;
    }
   public ItemStack getContainerItemStack(ItemStack itemStack){
      itemStack.damageItem(1,(EntityLivingBase) ent);
        return itemStack;
    }
}
最後に編集したユーザー KAISEEEEI217 [ 2016年10月13日(木) 20:50 ], 累計 1 回
KAISEEEEI217
ID:2922a5f7
木を殴ってる
 
記事: 25
登録日時: 2014年6月22日(日) 13:27

  • (PostNo.285552)

Re: 【1.7.10】耐久値を消費してクラフトするアイテム

投稿記事by ☭Destroy//Accuracy☭ » 2016年10月13日(木) 18:43

KAISEEEEI217 さんが書きました:

・doesContainerItemLeaveCraftingGridでグリッドにそのまま残るように。
・getContainerItemで耐久力を1減らして返す。
・hasContainerItemでgetContainerItemStackを呼び出し、
@SubscribeEventを参照しonCraftingでインスタンスを比較。
とすれば大丈夫かと思われます。


参考にどうぞ: viewtopic.php?t=9220#p152038
コード: 全て選択
    private boolean repair = false;

    //クラフト時グリッドにそのまま残るように
    @Override
    public boolean doesContainerItemLeaveCraftingGrid(ItemStack par1ItemStack)
    {
        return false;
    }

  //耐久を1減らす
    @Override
    public ItemStack getContainerItem(ItemStack item)
    {
        if (item != null && item.getItem() == this)
        {
            item.setItemDamage(item.getItemDamage() + 1);
        }
        return itemStack;
    }


    //クラフト後にgetContainerItemStackを呼び出す
    @Override
    public boolean hasContainerItem()
    {
        return !repair;
    }
   //修理かどうか判定
   @SubscribeEvent
   public void onCrafting(ItemCraftedEvent event)
   {
      //アイテムインスタンスでの比較。
      repair = SampleBlocks.Hammer == event.crafting.getItem();
   }
和風はお好き?
  • 1.7.10永住民です。1.8? 1.9? 1.10? 知らんな。
  • 趣味の範囲でModの開発を手がけています。過去VerのModのサルベージ希望とかを見かけたら規約に違反しない範囲で配布するかも。
  • テクスチャ書くの上手い人って羨ましいですよね。上手になりたい。
アバター
☭Destroy//Accuracy☭
ID:53c5c913
石掘り
 
記事: 78
登録日時: 2015年11月03日(火) 08:46
お住まい: 京の町

  • (PostNo.285561)

Re: 【1.7.10】耐久値を消費してクラフトするアイテム

投稿記事by KAISEEEEI217 » 2016年10月13日(木) 20:50

できました!ありがとうございます。
damageItemの他にもダメージ設定するものがあったんですね。
知らなかった・・・。
KAISEEEEI217
ID:2922a5f7
木を殴ってる
 
記事: 25
登録日時: 2014年6月22日(日) 13:27


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

x