提供: Minecraft Modding Wiki
移動先: 案内検索

この記事は"Minecraft Forge Universal 13.19.0.xxx~"を前提MODとしています。

Wood pickaxe.png
初心者向けのチュートリアルです。
C none.png
Enchantに関係のあるチュートリアルです。

ItemStackに付与できるエンチャントの追加方法。

エンチャントの追加

ソースコード

  • SampleMod.java
package com.example.ench;

import net.minecraft.enchantment.Enchantment;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.registry.GameRegistry.ObjectHolder;

@Mod(modid = SampleMod.MOD_ID, name = SampleMod.MOD_NAME, version = SampleMod.MOD_VERSION, dependencies = SampleMod.MOD_DEPENDENCIES, acceptedMinecraftVersions = SampleMod.MOD_ACCEPTED_MC_VERSIONS, useMetadata = true)
@EventBusSubscriber
public class SampleMod{
    /**
     * ModID文字列
     */
    public static final String MOD_ID = "samplemod";

    /**
     * MOD名称
     */
    public static final String MOD_NAME = "SampleMod";

    /**
     * MODのバージョン
     */
    public static final String MOD_VERSION = "0.0.1";

    /**
     * 前に読み込まれるべき前提MODをバージョン込みで指定
     */
    public static final String MOD_DEPENDENCIES = "required-after:forge@[1.11-13.19.0.2130,)";

    /**
     * 起動出来るMinecraft本体のバージョン。記法はMavenのVersion Range Specificationを検索すること。
     */
    public static final String MOD_ACCEPTED_MC_VERSIONS = "[1.11]";

    @ObjectHolder(MOD_ID)
    public static class ENCHANTMENTS{
        public static final Enchantment sample_ench = null;
    }

    @SubscribeEvent
    protected static void registerEnchantments(RegistryEvent.Register<Enchantment> event){
        event.getRegistry().registerAll(
                new SampleEnchantment().setRegistryName(MOD_ID, "sample_ench")/*登録名の設定*/
        );
    }
}
  • SampleEnchantment.java
package com.example.ench;

import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnumEnchantmentType;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.EnumCreatureAttribute;
import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.util.DamageSource;

public class SampleEnchantment extends Enchantment{
    public SampleEnchantment(){
        /*      貴重さ              , 付与できるアイテムの種別     , 付与できるアイテムの入るスロット*/
        super(Rarity.COMMON, EnumEnchantmentType.ALL, EntityEquipmentSlot.values());
        setName("sample");/*翻訳キーの指定*/
    }

    /*
    このエンチャントが付与されているものが攻撃された際のダメージ量。
    */
    @Override
    public int calcModifierDamage(int level, DamageSource source){
        return super.calcModifierDamage(level, source);
    }

    /*
    このエンチャントが付与されているものが攻撃された際に発動する。
    */
    @Override
    public void onUserHurt(EntityLivingBase user, Entity attacker, int level){
    }

    /*
    このエンチャントが付与されているものが攻撃した際のダメージ量。
    */
    @Override
    public float calcDamageByCreature(int level, EnumCreatureAttribute creatureType){
        return super.calcDamageByCreature(level, creatureType);
    }

    /*
    このエンチャントが付与されているものが攻撃した際に発動する。
    */
    @Override
    public void onEntityDamaged(EntityLivingBase user, Entity target, int level){
        super.onEntityDamaged(user, target, level);
    }
}

解説

以前とは違い、登録用イベントが発火されるようになった。
インスタンス保持はForgeの中の人の手法に沿ったものであるが、別に従来の方法でも問題ない。ここでは細かな解説をしない。
LangやModel用Jsonについては過去のチュートリアルを参照のこと。