うまげーむさん

ゲームの情報を主に投稿します。

【マインクラフト Modding】1.16での自作Modの作り方 #9 ツールの追加

はじめに

どうも。

今回はツールアイテムを追加していきます。

前回:

www.umagame.info

今回追加するアイテム

f:id:Umagame:20210131185516p:plain

今回追加するアイテムは、「Dragon Sword」です。(今回は剣だけでなく他のツールも同様に追加しました)

f:id:Umagame:20210131193049p:plain

Dragon Swordはダイヤ剣に黒曜石とブレイズロッドをクラフトすることで作れます。

UHCでは、そこまでクラフトに時間がかからない割に優秀で、今でいうネザライトと同じ性能を発揮します。(攻撃力がダイヤより1高い)

今回追加するにあたって、ネザライトと性能が同じだけど耐久力がダイヤのまま、という性能にしておきました。

ツールの追加

アイテムティア(ItemTier)クラス

まず、アイテムティア(ツールの素材)のクラスを作っていきます。

f:id:Umagame:20210131184804p:plain

itemパッケージに作成します。

f:id:Umagame:20210131184807p:plain

名前はItemTierにしましたが、マインクラフト自体のクラスと被るのであまりおすすめしません。

f:id:Umagame:20210131184810p:plain

今回も前シリーズと同様に、IItemTierを継承したenum型にします。

f:id:Umagame:20210131184813p:plain

IItemTierをインポートして、

f:id:Umagame:20210131184822p:plain

メソッドを追加。

f:id:Umagame:20210131184825p:plain

メソッドは多めです。

f:id:Umagame:20210131184829p:plain

次に、メソッドの戻り値をprivate変数で置き換えます。あとコンストラクタも追加しておきます。

(変数の説明、ソースコードは下記参照)

f:id:Umagame:20210131184833p:plain

そして、一番上に新しくアイテムティアを追加します。今回は「DRAGON」という名前です。

maxUsesは耐久値です。ダイヤと同じ1561にしました。

efficiencyは採掘の効率(速さ)です。こちらはネザライトと同じ8.0にしました。

attackDamageはダメージ量です。こちらもネザライトと同じに。

harvestLevelはブロックのときに解説したように、ツールのランクです。今回はダイヤと同じ3。

enchantabilityは良いエンチャントのつきやすさ...だと思います。(詳しくは知らないので、間違っているかもしれません。とりあえずダイヤと同じにしました)

repairMaterialはツールを金床で修復するときに使う素材です。Ingredient型なので注意。

これらの値がバニラではどうなっているかは、Eclipseでマインクラフトのコードをのぞけばわかります。(下記参照)

コードはこちら。(ItemTier.java

package com.umagame.uhcitemsmod.item;

import net.minecraft.item.IItemTier;
import net.minecraft.item.Items;
import net.minecraft.item.crafting.Ingredient;

public enum ItemTier implements IItemTier{

	DRAGON(1561, 8.0F, 4.0F, 3, 10, Ingredient.fromItems(Items.DIAMOND));

	private final int maxUses;
	private final float efficiency;
	private final float attackDamage;
	private final int harvestLevel;
	private final int enchantability;
	private final Ingredient repairMaterial;

	private ItemTier(int maxUses, float efficiency, float attackDamage, int harvestLevel, int enchantability, Ingredient repairMaterial) {
		this.maxUses = maxUses;
		this.efficiency = efficiency;
		this.attackDamage = attackDamage;
		this.harvestLevel = harvestLevel;
		this.enchantability = enchantability;
		this.repairMaterial = repairMaterial;
	}

	@Override
	public int getMaxUses() {
		return maxUses;
	}

	@Override
	public float getEfficiency() {
		return efficiency;
	}

	@Override
	public float getAttackDamage() {
		return attackDamage;
	}

	@Override
	public int getHarvestLevel() {
		return harvestLevel;
	}

	@Override
	public int getEnchantability() {
		return enchantability;
	}

	@Override
	public Ingredient getRepairMaterial() {
		return repairMaterial;
	}

}

ツールのクラス

ツールのアイテムのクラスを作ります。

f:id:Umagame:20210131184837p:plain

itemパッケージに作ります。

f:id:Umagame:20210131184840p:plain

継承するクラスはツールの種類によって変わります。(ソースコードは下記参照)

f:id:Umagame:20210131184844p:plain

インポートして、

f:id:Umagame:20210131184847p:plain

コンストラクタを追加。

f:id:Umagame:20210131184859p:plain

superの後に、アイテムティア、ダメージ量、振る速さ、Propertiesです。今回はrarityを使ってレアリティをアンコモンにしてみました。

ツールの数だけ、これを繰り返します。(剣、斧、ツルハシ、シャベル、クワなので5個クラスを作ることになります)

f:id:Umagame:20210131184850p:plain

通常のアイテムと同じように、ItemInit(アイテム登録用クラス)でツールのアイテムを追加します。

f:id:Umagame:20210131184853p:plain

modelsのファイルは、parentのところを「handheld」にしておきましょう。

こうしないと、プレイヤーがこのツールを持ったときに小さく表示されてしまいます。

その他のファイル(テクスチャ、langなど)は通常のアイテムと同様にやってください。

コードはこちら。(DragonSwordItem.java、DragonPickaxeItem.java、DragonAxeItem.java、DragonShovelItem.java、DragonHoeItem.java

package com.umagame.uhcitemsmod.item;

import com.umagame.uhcitemsmod.init.ItemGroupInit;

import net.minecraft.item.Rarity;
import net.minecraft.item.SwordItem;

public class DragonSwordItem extends SwordItem{

	public DragonSwordItem() {
		super(ItemTier.DRAGON, 3, -2.4F, new Properties().group(ItemGroupInit.UHCITEMS_MOD).rarity(Rarity.UNCOMMON));
	}

}
package com.umagame.uhcitemsmod.item;

import com.umagame.uhcitemsmod.init.ItemGroupInit;

import net.minecraft.item.PickaxeItem;
import net.minecraft.item.Rarity;

public class DragonPickaxeItem extends PickaxeItem{

	public DragonPickaxeItem() {
		super(ItemTier.DRAGON, 1, -2.8F, new Properties().group(ItemGroupInit.UHCITEMS_MOD).rarity(Rarity.UNCOMMON));
	}
}
package com.umagame.uhcitemsmod.item;

import com.umagame.uhcitemsmod.init.ItemGroupInit;

import net.minecraft.item.AxeItem;
import net.minecraft.item.Rarity;

public class DragonAxeItem extends AxeItem{

	public DragonAxeItem() {
		super(ItemTier.DRAGON, 5.0F, -3.0F, new Properties().group(ItemGroupInit.UHCITEMS_MOD).rarity(Rarity.UNCOMMON));
	}
}
package com.umagame.uhcitemsmod.item;

import com.umagame.uhcitemsmod.init.ItemGroupInit;

import net.minecraft.item.Rarity;
import net.minecraft.item.ShovelItem;

public class DragonShovelItem extends ShovelItem{

	public DragonShovelItem() {
		super(ItemTier.DRAGON, 1.5F, -3.0F, new Properties().group(ItemGroupInit.UHCITEMS_MOD).rarity(Rarity.UNCOMMON));
	}

}
package com.umagame.uhcitemsmod.item;

import com.umagame.uhcitemsmod.init.ItemGroupInit;

import net.minecraft.item.HoeItem;
import net.minecraft.item.Rarity;

public class DragonHoeItem extends HoeItem{

	public DragonHoeItem() {
		super(ItemTier.DRAGON, -4, 0, new Properties().group(ItemGroupInit.UHCITEMS_MOD).rarity(Rarity.UNCOMMON));
	}
}

バニラのツールの詳細を確認する

バニラでのツールの詳細(ダメージ量など)を確認する方法を紹介しておきます。

大抵のアイテムの情報はnet.minecraft.item.Itemsを見ればわかります。

f:id:Umagame:20210131192341p:plain

「プロジェクトと外部の依存関係」をクリックして、

f:id:Umagame:20210131192343p:plain

その中の「forge...」の下のやつをクリックして、

f:id:Umagame:20210131192347p:plain

net.minecraft.itemの中のItemsを開きます。

f:id:Umagame:20210131192349p:plain

赤く囲ってあるところがツールの部分です。こちらから値を確認しましょう。

起動して確認

f:id:Umagame:20210131184902p:plain

ちゃんとレアリティ(アンコモン)が適応されています。

f:id:Umagame:20210131184908p:plain

持ったときも、ちゃんと表示されているか確認しておきましょう。

さいごに

今回はここまでです。

次回は特殊なアイテム(持つとポーションエフェクト付与...などなど)の追加を予定しています。

次回:

www.umagame.info