【解決済み】[1.7.10]耐久値が0になっても壊れない火打石のようなアイテムの作り方

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

【解決済み】[1.7.10]耐久値が0になっても壊れない火打石のようなアイテムの作り方

投稿記事by Waripon » 2016年10月04日(火) 17:07

ほぼ件名通りで、IC2の電動ツールのように壊れず、かつ右クリックで火をつけるアイテムを作っているのですが、
耐久値が0になってから使用すると壊れてしまいます…どこかコードに問題があるのでしょうか?
コード: 全て選択
package waripon.uctools.item.tools;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemFlintAndSteel;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;

public class DlionLighter extends ItemFlintAndSteel {

   public DlionLighter() {
      this.setMaxStackSize(1);
      this.setNoRepair();
      this.setMaxDamage(64);
   }
   public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer,
              int int1, int int2, int int3, int int4, float F1, float F2, float F3){
      if (par1ItemStack.getItemDamage() == 64){
         par3EntityPlayer.playSound("random_click", 100, 100);
         return par1ItemStack;
      }else{ onItemUse(par1ItemStack, par3EntityPlayer, par2World, int4, int4, int4, int4, F3, F3, F3);
            return par1ItemStack;
      }
   }
}
最後に編集したユーザー Waripon [ 2016年10月09日(日) 09:13 ], 累計 1 回
ノリと勢いでModddingにまで手を出してしまった人。(´・ω・`)
トピックはこちら
アバター
Waripon
ID:474f1a32
大工さん
 
記事: 62
登録日時: 2016年8月29日(月) 07:25
お住まい: 日本の寒いほう

  • (PostNo.284911)

Re: [1.7.10]耐久値が0になっても壊れない火打石のようなアイテムの作り方

投稿記事by Ch1a » 2016年10月05日(水) 19:50

アイテムを壊れないようにするだけなら
this.setMaxDamage(0);
にするとできると思います。
アバター
Ch1a
ID:444dffca
大工さん
 
記事: 54
登録日時: 2016年8月30日(火) 22:59

  • (PostNo.284915)

Re: [1.7.10]耐久値が0になっても壊れない火打石のようなアイテムの作り方

投稿記事by Waripon » 2016年10月05日(水) 20:20

Ch1a さんが書きました:アイテムを壊れないようにするだけなら
this.setMaxDamage(0);
にするとできると思います。

いや、そうではなく…一応設定的にはライターなので、油が切れたら差し替える、という仕様にしたいのです…。
要するに耐久ゼロになったら使えなくなるがアイテム自体は残る、という仕様にしたいのです。
イメージ的にはTwilightForestの杖系統のような挙動です。
ノリと勢いでModddingにまで手を出してしまった人。(´・ω・`)
トピックはこちら
アバター
Waripon
ID:474f1a32
大工さん
 
記事: 62
登録日時: 2016年8月29日(月) 07:25
お住まい: 日本の寒いほう

  • (PostNo.284921)

Re: [1.7.10]耐久値が0になっても壊れない火打石のようなアイテムの作り方

投稿記事by Ch1a » 2016年10月05日(水) 20:53

コード: 全て選択
import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;

public class Test extends Item {
   // アイテムを使用できる最大回数を指定
   static final int itemDamage = 4;

   public Test() {
      super();
      // 使用できる回数をアイテムに適用
      this.setMaxDamage(itemDamage);

      GameRegistry.registerItem(this, "test");
   }

   @Override
   public ItemStack onItemRightClick(ItemStack p_77659_1_, World p_77659_2_, EntityPlayer p_77659_3_) {
      // もしアイテムの使用済み回数が最大回数と同じなら何もせずにreturn
      if (p_77659_1_.getItemDamage() == itemDamage) {
         return p_77659_1_;
         //そうでないならアイテムを使用回数を1減らしオリジナルのコード、火をつける動作などを追加する
      } else {
         p_77659_1_.damageItem(1, p_77659_3_);
         // Add your Code
      }

      return p_77659_1_;
   }
}


読みにくいコードですがこんな感じでどうでしょうか
アバター
Ch1a
ID:444dffca
大工さん
 
記事: 54
登録日時: 2016年8月30日(火) 22:59

  • (PostNo.284926)

Re: [1.7.10]耐久値が0になっても壊れない火打石のようなアイテムの作り方

投稿記事by Waripon » 2016年10月05日(水) 21:30

Ch1a さんが書きました:
コード: 全て選択
import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;

public class Test extends Item {
   // アイテムを使用できる最大回数を指定
   static final int itemDamage = 4;

   public Test() {
      super();
      // 使用できる回数をアイテムに適用
      this.setMaxDamage(itemDamage);

      GameRegistry.registerItem(this, "test");
   }

   @Override
   public ItemStack onItemRightClick(ItemStack p_77659_1_, World p_77659_2_, EntityPlayer p_77659_3_) {
      // もしアイテムの使用済み回数が最大回数と同じなら何もせずにreturn
      if (p_77659_1_.getItemDamage() == itemDamage) {
         return p_77659_1_;
         //そうでないならアイテムを使用回数を1減らしオリジナルのコード、火をつける動作などを追加する
      } else {
         p_77659_1_.damageItem(1, p_77659_3_);
         // Add your Code
      }

      return p_77659_1_;
   }
}


読みにくいコードですがこんな感じでどうでしょうか

ありがとうございます!これでどうにかこうにかできそうです!

あと、火をつけるコードの部分は「ItemFlintAndSteel」のコードから抜き取ろうと思うのですが、抜き取るコードは
「public boorean」の括弧の中で合ってますか?
自分コードはド素人なもので…。何度もすいません…。
ノリと勢いでModddingにまで手を出してしまった人。(´・ω・`)
トピックはこちら
アバター
Waripon
ID:474f1a32
大工さん
 
記事: 62
登録日時: 2016年8月29日(月) 07:25
お住まい: 日本の寒いほう

  • (PostNo.284927)

Re: [1.7.10]耐久値が0になっても壊れない火打石のようなアイテムの作り方

投稿記事by Ch1a » 2016年10月05日(水) 21:34

そうですね
public boolean onItemUseの中身であっていると思います
アバター
Ch1a
ID:444dffca
大工さん
 
記事: 54
登録日時: 2016年8月30日(火) 22:59

  • (PostNo.284928)

Re: [1.7.10]耐久値が0になっても壊れない火打石のようなアイテムの作り方

投稿記事by Waripon » 2016年10月05日(水) 21:38

Ch1a さんが書きました:そうですね
public boolean onItemUseの中身であっていると思います

速レスありがとうございます!
あとは自分で調べて何とかしてみます!
丁寧なご回答ありがとうございました!
ノリと勢いでModddingにまで手を出してしまった人。(´・ω・`)
トピックはこちら
アバター
Waripon
ID:474f1a32
大工さん
 
記事: 62
登録日時: 2016年8月29日(月) 07:25
お住まい: 日本の寒いほう

  • (PostNo.285190)

Re: [1.7.10]耐久値が0になっても壊れない火打石のようなアイテムの作り方

投稿記事by Waripon » 2016年10月09日(日) 09:12

なんとかなったので、同じことをしようとする人のためにコードを載せておきます。
コード: 全て選択
package waripon.uctools.item.tools;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;

public class SFlowerLighter extends Item {
   // アイテムを使用できる最大回数を指定
   static final int itemDamage = 64;

   public SFlowerLighter() {
      super();
      // 使用できる回数をアイテムに適用
      this.setMaxDamage(itemDamage);
   }

   @Override
   //ブロックに対して使ったときの処理
   public boolean onItemUse(ItemStack Itemstack, EntityPlayer player, World world, int int1,
         int int2, int int3, int int4, float float1, float float2, float float3) {
      //耐久値が0かどうかの判定
      if(Itemstack.getItemDamage() == itemDamage) {
         //音を鳴らす
         world.playSoundEffect((double)int1 + 0.5D, (double)int2 + 0.5D, (double)int3 + 0.5D, "random.click", 1.0F, itemRand.nextFloat() * 0.4F + 0.8F);
            return true;
      }else{
         //火をつける処理
         if (int4 == 0)
            {
                --int2;
            }

            if (int4 == 1)
            {
                ++int2;
            }

            if (int4 == 2)
            {
                --int3;
            }

            if (int4 == 3)
            {
                ++int3;
            }

            if (int4 == 4)
            {
                --int1;
            }

            if (int4 == 5)
            {
                ++int1;
            }

            if (!player.canPlayerEdit(int1, int2, int3, int4, Itemstack))
            {
               return false;
            }
            else
            {
                if (world.isAirBlock(int1, int2, int3))
                {
                    world.playSoundEffect((double)int1 + 0.5D, (double)int2 + 0.5D, (double)int3 + 0.5D, "fire.ignite", 1.0F, itemRand.nextFloat() * 0.4F + 0.8F);
                    world.setBlock(int1, int2, int3, Blocks.fire);
                }

                Itemstack.damageItem(1, player);
                return false;
            }
      }
   }
   }
ノリと勢いでModddingにまで手を出してしまった人。(´・ω・`)
トピックはこちら
アバター
Waripon
ID:474f1a32
大工さん
 
記事: 62
登録日時: 2016年8月29日(月) 07:25
お住まい: 日本の寒いほう


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

x