最近職場が変わって多忙してました。。なのでかなり久々の記事。忙しいのは変わらないので当分ペースが落ちそうw
環境
- OS: Windows10
- Jdk: openjdk version "15.0.2" 2021-01-19 ※16.xでもいいかもだけどgradleやらなにやら色々変わってしまって心配だったので今回は15で。
- IDE: Eclipse IDE for Java Developers (Version 4.19.0)
- Buildship(Eclipseのgradleプラグイン) : 3.0
- Minecraft: Java版 1.16.5
- Forge: 1.16.5
- paint.net V4.2.16
Javaのコード
前回の記事(Eclipse+Forgeでマイクラのmod開発~単純なアイテムの追加)の内容をベースに改造していきます。
まずはコード。
package jp.munecraft.mod.itemtestmod;
//import文は省略
@Mod(ItemTest.MOD_ID)
public class ItemTest {
public static final String MOD_ID = "itemtestmod";
private static final Logger LOGGER = LogManager.getLogger();
private List<Item> items = new LinkedList<Item>();
private String[] itemIDs = {
"sunglasses",
};
public ItemTest() {
LOGGER.info("Hello item test mod");
FMLJavaModLoadingContext.get().getModEventBus().register(this);
createItems();
}
protected void createItems() {
for (String itemID : itemIDs) {
Item item = createItem(itemID);
items.add(item);
}
}
protected Item createItem(String id) {
return createBlockItem(id, null);
}
protected Item createBlockItem(String id, Block block) {
Item item = null;
Item.Properties itemProperties = new Item.Properties();
itemProperties.tab(ItemGroup.TAB_MATERIALS);
if (block == null) {
// ★ここだけ改造
item = new ArmorItem(SunglassesMaterial.BLACK_GLASS, EquipmentSlotType.HEAD, itemProperties);
}
else {
item = new BlockItem(block, itemProperties);
}
item.setRegistryName(MOD_ID, id);
return item;
}
@SubscribeEvent
public void onRegisterItem(RegistryEvent.Register<Item> event) {
LOGGER.info("onRegisterItem");
IForgeRegistry<Item> registry = event.getRegistry();
for (Item item : items) {
registry.register(item);
}
}
}
mod本体のクラスは前回からほとんど変わってません。変更したのは// ★ここだけ改造
のコメントを入れたところだけ。前回はnew Item()
していたのをnew AmorItem()
にしています。最初の引数では防具の素材(Material)、第二引数では装備する部位(今回は頭)を指定しています。
次のクラスは上のコードで指定した素材(SunglassesMaterial
)のコードです。中身はほとんど空っぽですがw
package jp.munecraft.mod.itemtestmod;
import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.item.IArmorMaterial;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.util.SoundEvent;
public class SunglassesMaterial implements IArmorMaterial {
public SunglassesMaterial() {
}
@Override
public int getDurabilityForSlot(EquipmentSlotType p_200896_1_) {
return 0;
}
@Override
public int getDefenseForSlot(EquipmentSlotType p_200902_1_) {
return 0;
}
@Override
public int getEnchantmentValue() {
return 0;
}
@Override
public SoundEvent getEquipSound() {
return null;
}
@Override
public Ingredient getRepairIngredient() {
return null;
}
@Override
public String getName() {
return ItemTest.MOD_ID + ":sunglasses";
}
@Override
public float getToughness() {
return 0;
}
@Override
public float getKnockbackResistance() {
return 0;
}
}
とりあえずサングラスをかけられるようにしたかっただけなのでかなり適当。。。ポイントはgetName()
。ここではMOD_ID:[防具のID]
を指定。これが後で出てくるテクスチャの指定する際のキーになります。そのほかのパラメータについては概要だけ。
-
getDurabilityForSlot()
: 部位ごとの耐久性。部位は引数で渡される。 -
getDefenseForSlot()
: 部位ごとの防御力。部位は引数で渡される。 -
getEnchantmentValue()
: よくわからない。今後調べてわかったら。。 -
getEquipSound()
: 装備した時の効果音。 -
getRepairIngredient()
: 修理のために使う素材。 -
getToughness()
: 強度。 -
getKnockbackResistance()
: ノックバック体制の有無。ネザライトの防具はデフォでついてる。
強度とか防御力とかややこしいですが、実際ダメージをどれだけ軽減するのかはこれらを組み合わせたちょっと複雑な式で計算されている模様。まぁ、今回メインで書きたい内容ではないのでまたいずれ。。
リソースファイル
続いて今回登場するリソースファイル。すでに過去記事等で説明済み&変更がないものは省略します。
├─java
│ └─jp
│ └─munecraft
│ └─mod
│ └─itemtestmod
│ ItemTest.java
│ SunglassesMaterial.java
│
└─resources
│ pack.mcmeta
│
├─assets
│ └─itemtestmod
│ ├─lang
│ │ en_us.json
│ │
│ ├─models
│ │ └─item
│ │ sunglasses.json
│ │
│ └─textures
│ └─item
│ │ sunglasses.png
│ │
│ └─models
│ └─armor
│ sunglasses_layer_1.png
│ sunglasses_layer_2.png
└─META-INF
mods.toml
追加しているのは先ほど説明済みのSunglassesMaterial.java
以外は、sunglasses_layer_1.png
、sunglasses_layer_2.png
。この2つのpngファイルがアイテムを装備した時のテクスチャになります。ファイル名と中身には規則がありますが、とりあえずここではファイル名は素材クラスで指定したMOD_ID:[防具のID]
の[防具のID]_layer_1.png
と[防具のID]_layer_2.png
になる点だけ覚えておけばいいです。
テクスチャの編集方法は次に書きます。
防具のテクスチャ
テクスチャの中身
[防具のID]_layer_1.png
はこんなpngファイルです。
なんとなくわかると思いますが、上半分のパーツがヘルメット、下に並んでいるのがチェストです。ヘルメットのしたに飛び地になっている正方形がありますが、これは右肩の上ですね。
続いて[防具のID]_layer_2.png
こちらもなんとなくわかると思います。左側がレギンス、右側がブーツですね。それぞれのパーツで6面必要なのに数が合わない。。。と思うのは右足と左足でテクスチャを共有してるから見たい。やってみりゃすぐわかるはずですがまぁ、それも追々。。このpngはテンプレとして今後防具を作るときに活用できるので末尾に載せておきます。
サングラスを描いてみる
頑張って書くだけ。テンプレのヘルメットの前面にポチポチドット絵を描いていきます。チェストは今回要らないのでチェストの部分は全部消しました(残してても問題ないけど)。
動かしてみる
さて、ようやく準備完了。では身に着けてみよ~
サングラスのアイテムをドラッグして。。
装備!
じゃーん!
てなわけでうまくサングラスをかけることができましたね。なんかサングラスっぽくないけど。。。というわけで今回はおしまい。以降に今回追加したテクスチャと防具のテンプレを張っておくのでご活用くださいませ。