2
0

More than 3 years have passed since last update.

Eclipse+Forgeでマイクラのmod開発~身に着けられる防具(サングラス)を作ってみる

Posted at

image.png

最近職場が変わって多忙してました。。なのでかなり久々の記事。忙しいのは変わらないので当分ペースが落ちそう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開発~単純なアイテムの追加)の内容をベースに改造していきます。

まずはコード。

ItemTest.java
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

SunglassesMaterial.java
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.pngsunglasses_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はテンプレとして今後防具を作るときに活用できるので末尾に載せておきます。

サングラスを描いてみる

頑張って書くだけ。テンプレのヘルメットの前面にポチポチドット絵を描いていきます。チェストは今回要らないのでチェストの部分は全部消しました(残してても問題ないけど)。

image.png

動かしてみる

さて、ようやく準備完了。では身に着けてみよ~

サングラスのアイテムをドラッグして。。

image.png

装備!

image.png

じゃーん!

てなわけでうまくサングラスをかけることができましたね。なんかサングラスっぽくないけど。。。というわけで今回はおしまい。以降に今回追加したテクスチャと防具のテンプレを張っておくのでご活用くださいませ。

リソース

今回作ったサングラスのテクスチャファイルsunglasses_layer_1.png

テンプレ1 (xxxx_leyer_1.png用)

テンプレ2 (xxxx_leyer_2.png用)

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0