在Eclipse+Forge中开发我的世界mod-尝试制作一件可佩戴的装备(太阳眼镜)

image.png最近,我的工作环境发生了变化,变得非常忙碌。因此,很久没有发布文章了。由于忙碌的情况没有改变,所以预计接下来的一段时间会放缓文章的发布速度。

环境

    • 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 ArmorItem()。在第一个参数中指定了防具的材质(Material),在第二个参数中指定了装备的部位(这次是头部)。
下面的类是上面代码中指定的材料(SunglassesMaterial)的代码。内容几乎是空的哈哈。

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这两个PNG文件。这两个文件将用作装备物品时的纹理。虽然文件名和内容有规则,但目前只需要记住文件名将为素材类所指定的MOD_ID:[防具ID]的[防具ID]_layer_1.png和[防具ID]_layer_2.png即可。
纹理编辑方法将在接下来说明。

防具的质感

纹理的内容[装备的ID]_layer_1.png是一个类似的png文件。

undefined大概可以理解,上半部分是头盔,下面排列着护胸。头盔底部有一个突出的正方形,这是在右肩上方。
接下来是[防具的ID]_layer_2.png。

undefined我认为你也大致能理解这个。左边是紧身裤,右边是靴子对吧?虽然每个部分都需要6个面,但数量不符合…这是因为右脚和左脚共享了纹理。只要试一试就能立即理解,但这也是以后逐渐了解的事情…这个PNG文件可以作为模板,以后制作防具时可以利用,所以我将其放在末尾。

我试着画一副太阳镜。只需努力写。我会在模板头盔的前面画上点点画。这次不需要胸部,所以我把胸部部分都擦掉了(留着也没关系)。

image.png

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

undefined拖动太阳镜商品。。

image.png武装起来!

image.png嘿!

所以,我成功地戴上了太阳镜。虽然看起来不太像太阳镜…所以这次就到这里了。以下是我在此次更新中添加的纹理和防具模板,请随意使用。

资源

bannerAds