Mod制作日記 - 武器とツール
アップロード:2024/12/05 最終更新:2024/12/05
前回から内容が続いています。
目次 (折りたたみ可)
はじめに
わたしは初め解説動画を見てやったんですが、その方法だとツール適性がバグってバニラのツールさえも使えない状態になってしまったので、今回はわたしの独自の方法で実装します。
独自の方法でやる欠点としては、他のModのブロックの適性に対応しないことかと思ってます。 ただ、実験してないし、バニラのそれと大差ないと思っているので、もしかしたら一切問題ないかもしれません。
カスタムティア
CustomTier列挙型
「com.(作者名)(.ModのID)」にCustomTiersの列挙型を作ります。
CustomTiers.java
package com.masuec.my_mod;
import java.util.function.Supplier;
import net.minecraft.util.LazyLoadedValue;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.Tier;
import net.minecraft.world.item.crafting.Ingredient;
public enum CustomTiers implements Tier {
// ティアのレベル, 耐久値, 攻撃速度, ダメージ, エンチャント値, 修復素材
TEST(0, 1500, 2.0F, 0.0F, 15, () -> Ingredient.of(Items.DIAMOND));
private final int level;
private final int uses;
private final float speed;
private final float damage;
private final int enchantmentValue;
private final LazyLoadedValue<Ingredient> repairIngredient;
private CustomTiers(int pLevel, int pUses, float pSpeed, float pDamage, int pEnchantmentValue, Supplier<Ingredient> pRepairIngredient) {
this.level = pLevel;
this.uses = pUses;
this.speed = pSpeed;
this.damage = pDamage;
this.enchantmentValue = pEnchantmentValue;
this.repairIngredient = new LazyLoadedValue<>(pRepairIngredient);
}
public float getAttackDamageBonus() {
return this.damage;
}
public int getEnchantmentValue() {
return this.enchantmentValue;
}
public int getLevel() {
return this.level;
}
public Ingredient getRepairIngredient() {
return this.repairIngredient.get();
}
public float getSpeed() {
return this.speed;
}
public int getUses() {
return this.uses;
}
}
コードはほとんどnet.minecraft.world.item.Tiersのコピーです。 ただ、コンストラクタ以降のメソッド群はTierをimprementしているので「右クリック > ソースアクション > Override/imprement Methods」で一気に追加できます。
補足
「ティアのレベル」は、ティアの順番(強さ)を数値で表したものです。
「エンチャント値」は、大きければエンチャントが多くつきやすくなるという謎の定数です。
「修復素材」には、タグを指定することもできます。
// 木材タグ
() -> Ingredient.of(ItemTags.PLANKS)
// ちなみにカスタムアイテムはこう
() -> Ingredient.of(ItemRegister.TEST_ITEM.get())
バニラの値
レベル | 耐久 | 速度 | ダメ | エンチャ | |
---|---|---|---|---|---|
木 | 0 | 59 | 2.0 | 0.0 | 15 |
石 | 1 | 131 | 4.0 | 1.0 | 5 |
鉄 | 2 | 250 | 6.0 | 2.0 | 14 |
金 | 3 | 1561 | 8.0 | 3.0 | 10 |
ダイヤ | 0 | 32 | 12.0 | 0.0 | 22 |
ネザ | 4 | 2031 | 9.0 | 4.0 | 15 |
ティアの種類を増やす
ティアの種類を増やすときは以下のように増やすことができます。途中がすべてカンマで、最後だけセミコロン。
TEST(...),
TEST2(...);
カスタムティアのツルハシ
あとは「com.(作者名).(ModのID).registers.ItemRegister」クラスで以下のように登録します。
public static final RegistryObject<Item> TEST_ITEM4 = ITEMS.register(
"test_item4", () -> new PickaxeItem(CustomTiers.TEST, 1, -2.8F, new Item.Properties())
);