このシリーズのまとめはこちら:
umagame.hatenablog.jp
こんばんは。
記事のストックがもう消えかけています。結構やばいです。
はじめに
今回はツールです。
前回作った、圧縮された土ブロックのツール5種をつくっていきます。
前回:
umagame.hatenablog.jp
ツールを作る
ティアを作る
<ティアのクラスは修正記事を出したので、そちらを参考にして作ってください。>
umagame.hatenablog.jp
まずはツールのティア(材質)を新しく作ります。バニラでいうと石とか鉄とかです。
toolパッケージを作ってそこにクラスを作ります。
ティアは、IItemTierというインターフェースを実装することで作れます。
ティアはEnumを使って作るのが主流らしいですが、めんどくさいので普通のクラスで作ります。(ていうかこのシリーズを通してコードはめっちゃ適当です)
implementsで実装して、メソッドを追加。いっぱい出てきます。
package com.umagame.dirtmod.item.tool;
import net.minecraft.item.IItemTier;
import net.minecraft.item.crafting.Ingredient;
public class ItemTierDirt implements IItemTier{
@Override
public int getMaxUses() {
TODO
return 0;
}
@Override
public float getEfficiency() {
TODO
return 0;
}
@Override
public float getAttackDamage() {
TODO
return 0;
}
@Override
public int getHarvestLevel() {
TODO
return 0;
}
@Override
public int getEnchantability() {
TODO
return 0;
}
@Override
public Ingredient getRepairMaterial() {
TODO
return null;
}
}
これらのメソッドは上から順に、耐久力、効率、攻撃力、採掘レベル、エンチャント力、修理の素材を設定できます。
(採掘レベルは前回の記事参照、エンチャント力は良いエンチャントの付きやすさです)
とりあえず今回は、
- 耐久力:石と同じ
- 効率:鉄と同じ
- 攻撃力:石と同じ
- 採掘レベル:鉄と同じ
- エンチャント力:鉄と同じ
- 修理の素材:圧縮された土ブロック
にします。
なのでコードはこんな感じ。(ItemTierクラスから石、鉄を持ってくる)
package com.umagame.dirtmod.item.tool;
import com.umagame.dirtmod.block.BlockSuperCompressedDirt;
import net.minecraft.item.IItemTier;
import net.minecraft.item.ItemTier;
import net.minecraft.item.crafting.Ingredient;
public class ItemTierDirt implements IItemTier{
@Override
public int getMaxUses() {
return ItemTier.STONE.getMaxUses();
}
@Override
public float getEfficiency() {
return ItemTier.IRON.getEfficiency();
}
@Override
public float getAttackDamage() {
return ItemTier.STONE.getAttackDamage();
}
@Override
public int getHarvestLevel() {
return ItemTier.IRON.getHarvestLevel();
}
@Override
public int getEnchantability() {
return ItemTier.IRON.getEnchantability();
}
@Override
public Ingredient getRepairMaterial() {
return Ingredient.fromItems(new BlockSuperCompressedDirt().asItem());
}
}
ティアはこれでOKです。
ツールのクラスを作る
ツールのクラスを作ります。
まずはツルハシから。
ツルハシは、PickaxeItemクラスを継承して作ります。
コンストラクタも追加。
package com.umagame.dirtmod.item.tool;
import net.minecraft.item.IItemTier;
import net.minecraft.item.PickaxeItem;
public class ItemDirtPickaxe extends PickaxeItem{
public ItemDirtPickaxe(IItemTier tier, int attackDamageIn, float attackSpeedIn, Properties builder) {
super(tier, attackDamageIn, attackSpeedIn, builder);
}
}
引数を消し、superの中を設定して、IDも設定。
attackDamageとattackSpeedについてですが、どうやら0に設定するとゲーム内ではDamageが2に、Speedが4になるみたいです。
なので今回は石斧と同じにするので(石斧は攻撃速度が0.8、攻撃力が9)、attackDamageを7に、attackSpeedを-3.2にします。
package com.umagame.dirtmod.item.tool;
import com.umagame.dirtmod.main.DirtMod;
import net.minecraft.item.PickaxeItem;
public class ItemDirtPickaxe extends PickaxeItem{
public ItemDirtPickaxe() {
super(new ItemTierDirt(),7,-3.2F,new Properties().group(DirtMod.DIRTMOD_TAB));
this.setRegistryName("dirt_pickaxe");
}
}
これを他のツールも同じようにやります。(剣はSwordItemクラス、斧はAxeItemクラス、シャベルはShovelItemクラス、クワはHoeItemクラス)
アイテムを登録
前作ったItemsクラスに登録します。
といっても、クラスの名前を追加するだけで、超簡単です。
@SubscribeEvent
public static void registerItems(final RegistryEvent.Register<Item> event) {
final Item[] item = {
new ItemCompressedDirt(),
new ItemDirtAxe(),
new ItemDirtHoe(),
new ItemDirtPickaxe(),
new ItemDirtShovel(),
new ItemDirtSword()
};
event.getRegistry().registerAll(item);
}
あとは、以前の記事と同様にテクスチャ、名前を設定します。
以前の記事:
umagame.hatenablog.jp
設定したあとがこちら。
修正を入れる
ですが、このままでは手に持ったときのツールの形がちょっと変です。
modelsのjsonファイルを修正しましょう。
{
"parent": "item/handheld",
"textures": {
"layer0": "dirtmod:item/dirt_axe"
}
}
parentのところをhandheldにすることで解決します。
さいごに
今回はここまでです。
次回:
umagame.hatenablog.jp