kakakeke さんが書きました:package tesuto.item;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
public class SampleBlock extends Block {
public {
super(material);
this.setCreativeTab(CreativeTabs.tabBlock);
this.setHardness(0.0F);
this.setResistance(0.0F);
this.setStepSound(Block.soundTypeStone);
this.setHarvestLevel("pickaxe",0);
this.setLightLevel(0.0F);
}
}
この設定には問題ないんですが、素手で破壊できるスライムブロック的なものを作りたいのです。15行目の「this.setHarvestLevel("pickaxe",2);」この文の"pickaxe"のところを変えればいいというところまで分かっているのですが、何に変えればいいかわかりません。
誰か教えてもらえると嬉しいです。お願いします。
>この文の"pickaxe"のところを変えればいい
だいぶ違いますね…
●バニラは(このへんいろいろとハードコードなので)
・どのツールで破壊できるか
・どのレベルのツールが必要か
・水に流されるかどうか
・燃えるか
・一部のレンダー処理
等のなんやかんやをBlockMaterialで指定されています。
なので、素手で破壊できてドロップもするマテリアルを使えばいいです
>SampleBlock(Material material) ←ここに渡すマテリアルの種類をそもそも吟味するべし、ということ
破壊音などは
>this.setStepSound(Block.soundTypeStone);
これで見た目に合うものを選べばいいので、見た目と効果音が雰囲気にあっていればプレイ上の不都合はそれほどないです
Material.classを読んで、ついていると困るフラグがないMaterialを選べばよいかと
余談ですがHaCでは同様の理由で圧縮コンテナ系ブロックのマテリアルがClayに統一されています
石系ブロックならMaterialをStoneにしないといけないとか、そういう固定観念を持っているとModdingは後々苦労します
●それでもどうしてもStone等、ツールでないと壊せないマテリアルを使いたい、という場合
>this.setHarvestLevel("pickaxe",2);
これはあまり良いやり方ではないです。
これはどちらかというと『
必要なツールレベルを上げたい』場合に要るもので、目的が素手破壊ならば無意味です(デフォルトでは素手破壊可能になっており、変に指定すると壊せなくなります)
素手破壊可能にしたいなら必要なツール名(""の中の文字列)をnullにしておく必要がありますが、setHarvestLevelではnullを指定できないので)
あなたがやりたいことの場合、Blockクラスの必要なメソッドをオーバーライドする
必要なのは2つ
1. @Nullable public String getHarvestTool(IBlockState state) でnullを常に返すようにオーバーライド2. public int getHarvestLevel(IBlockState state) で常に-1を返すようにオーバーライドマテリアルにかかわらず、デフォルト(素手可能)設定を強制で指定するように変える感じ