提供: Minecraft Modding Wiki
2020年10月12日 (月) 23:37時点におけるRedice (トーク | 投稿記録)による版 (エンティティの追加)
移動先: 案内検索

この記事は"Fabric API 0.3.2 build 230~"を前提MODとしています。

Stone pickaxe.png
中級者向けのチュートリアルです。
C entity.png
Entityに関係のあるチュートリアルです。

エンティティの追加

Entity追加 1.15.2以前と、していることは同じであり、1.16に対応させたチュートリアルである。
以前と少し変わっただけで殆ど変わっていない。

既にMinecraftにあるモデルからエンティティを追加する。 カスタムモデルを追加する訳ではないが、エンティティの作成方法やエンティティの登録方法、スポーンエッグの登録を解説する。 1.16~が対応している。

ソースコード

メインのクラス いろいろなものを登録するところ。 他のクラスを呼び出して1つ1つキレイにクラスを分けることもできる。

  • Main.java
package net.example.modding;

import net.example.modding.entity.ExampleEntity;
import net.example.modding.entity.ExampleRenderer;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry;
import net.fabricmc.fabric.api.entity.FabricEntityTypeBuilder;
import net.minecraft.entity.EntityCategory;
import net.minecraft.entity.EntityDimensions;
import net.minecraft.entity.EntityType;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.SpawnEggItem;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;

public class Main implements ModInitializer {
    //MOD ID(変数)を設定
    public static String mod_id = "example";
    //エンティティを登録
    public static final EntityType<ExampleEntity> example_mob =
            Registry.register(
                    Registry.ENTITY_TYPE,
                    new Identifier(mod_id, "example_mob"),
                    FabricEntityTypeBuilder.<RubyEntity>create(SpawnGroup.AMBIENT, RubyEntity::new).dimensions(EntityDimensions.fixed(0.75f, 0.75f)).build() //ここだけ以前のバージョン(1.15.2まで)とは違います。
            );
    @Override
    public void onInitialize(){
        //つくったエンティティのスポーンエッグを登録(スポーンエッグを作らない場合はなくてもよい)
        EntityRendererRegistry.INSTANCE.register(example_mob, (entityRenderDispatcher, context) -> new ExampleRenderer(entityRenderDispatcher));
        Registry.register(Registry.ITEM, new Identifier(mod_id, "example_mob_spawn_egg"), new SpawnEggItem(example_mob , 0x0DA70B, 0x73420E, new Item.Settings().group(ItemGroup.MISC)));

    }
}

エンティティの設定のクラス "CreeperEntity"にしているが"ZombieEntity"などでも可能。カスタマイズもできる。

  • ExampleEntity.java
package net.example.modding.entity;

import net.minecraft.entity.EntityType;
import net.minecraft.entity.mob.CreeperEntity;
import net.minecraft.world.World;

public class ExampleEntity extends CreeperEntity {

    public ExampleEntity(EntityType<? extends CreeperEntity> entityType, World world) {
        super(entityType, world);
    }
}

このクラスは使いたいモデルとテクスチャの設定をしている。

  • ExampleRenderer.java
package net.example.modding.entity;

import net.minecraft.client.render.entity.EntityRenderDispatcher;
import net.minecraft.client.render.entity.MobEntityRenderer;
import net.minecraft.client.render.entity.model.CreeperEntityModel;
import net.minecraft.util.Identifier;

public class ExampleRenderer extends MobEntityRenderer<ExampleEntity, CreeperEntityModel<ExampleEntity>> {
    public ExampleRenderer(EntityRenderDispatcher entityRenderDispatcher_1)
    {
        //モデルを指定
        super(entityRenderDispatcher_1, new CreeperEntityModel<>(), 1);
    }
    @Override
    public Identifier getTexture(ExampleEntity entity) {
        //テクスチャの場所を指定
        return new Identifier("example:textures/entity/example_entity.png");
    }
}

解説

FabricEntityTypeBuilder.<RubyEntity>create(SpawnGroup.MONSTER, RubyEntity::new).dimensions(EntityDimensions.fixed(0.75f, 0.75f)).build()

今回はこれだけ変わっているのでこれだけ解説する。 -以前はEntityCategoryだったがSpawnGroupに変わった MONSTERはモンスターのスポーンの仕方となる(暗いところにスポーン) CREATUREは動物のスポーンの仕方となる(草原などにスポーン)