ブロックのmodding

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

ブロックのmodding

投稿記事by kakakeke » 2018年12月12日(水) 17:13

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 SampleBlock(Material material) {
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"のところを変えればいいというところまで分かっているのですが、何に変えればいいかわかりません。
誰か教えてもらえると嬉しいです。お願いします。
kakakeke
ID:6ea2c6d9
木を殴ってる
 
記事: 16
登録日時: 2017年12月30日(土) 11:49

  • (PostNo.322599)

Re: ブロックのmodding

投稿記事by defeatedcrow » 2018年12月12日(水) 19:27

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を返すようにオーバーライド
マテリアルにかかわらず、デフォルト(素手可能)設定を強制で指定するように変える感じ
カラスの敗残兵です。AppleMilkTea他、少々のMODを作成しています。
トピック: AppleMilkTea(~1.7.10) / HeatAndClimate(1.10.2)
作者Wiki / github / twitter
アバター
defeatedcrow
ID:69e3e707
ラピスラズリ収集家
 
記事: 1143
登録日時: 2014年1月08日(水) 13:48

  • (PostNo.322601)

Re: ブロックのmodding

投稿記事by kakakeke » 2018年12月12日(水) 19:49

defeatedcrow さん丁寧な返答ありがとうございました。
これを参考にmoddingを頑張ってみます。
kakakeke
ID:6ea2c6d9
木を殴ってる
 
記事: 16
登録日時: 2017年12月30日(土) 11:49


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

x