提供: Minecraft Modding Wiki
2018年1月11日 (木) 17:35時点における118.238.221.157 (トーク)による版 (継承の誤りを修正。)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先: 案内検索

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

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

このページは、編集中です。

MOBの追加[編集]

EntityLivingを継承して、MOBを追加します。 モデルやAIも実装します

ソースコード[編集]

  • SampleEntityCore.java
package mods.entity;

import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.registry.EntityRegistry;
import cpw.mods.fml.relauncher.Side;
import net.minecraft.entity.EnumCreatureType;
import net.minecraft.world.biome.BiomeGenBase;

@Mod(modid = "SampleEntity", name = "SampleEntity", version = "1.0.0")
public class SampleEntityCore {
    @EventHandler
    public void init(FMLInitialization event) {
        EntityRegistry.registerModEntity(EntitySample.class, "SampleEntity", 0, this, 250, 1, false);
        EntityRegistry.addSpawn(EntitySample.class, 20, 1, 4, EnumCreatureType.creature, BiomeGenBase.plains);
        if(FMLCommonHandler.instance().getSide() == Side.CLIENT) {
		RenderingRegistry.registerEntityRenderingHandler(EntitySample.class, new RenderSample());
        }
}
  • EntitySample.java
package mods.entity;

import net.minecraft.block.Block;
import net.minecraft.entity.EnumCreatureAttribute;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.ai.EntityAIWander;
import net.minecraft.entity.ai.EntityAILookIdle;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.world.World;


public class EntitySample extends EntityCreature {
    public EntitySample(World world) {
        super(world);
        	// うろうろ移動するAIの追加
		this.tasks.addTask(1, new EntityAIWander(this, 1.0D));
		// 見回すAIの追加
		this.tasks.addTask(2, new EntityAILookIdle(this));
    }

    @Override
    public boolean isAIEnabled() { return true; }

    @Override
    public String getLivingSound() { return /* MOBが生きている時の音のファイルパスを返す。 */ ; }

    @Override
    public String getHurtSound() { return /* MOBがダメージを受けた時の音のファイルパスを返す。 */ ; }

    @Override
    public String getDeathSound() { return /* MOBが死亡した時の音のファイルパスを返す。*/ ; }

    /*
    * このMobが動いているときの音のファイルパスを返す.
    * 引数のblockはMobの下にあるBlock.
    */
    @Override
    protected void func_145780_a(int x, int y, int z, Block block)
    {
	this.playSound("mob.skeleton.step", 0.15F, 1.0F);
    }

   @Override
    public EnumCreatureAttribute getCreatureAttribute() { return EnumCreatureAttribute.UNDEFINED; }

    @Override
    public Item getDropItem() { return /* ドロップするアイテム */ ; }
}
  • RenderSample.java
package mods.entity;

import net.minecraft.client.renderer.entity.RenderBiped;
import net.minecraft.entity.EntityLiving;
import net.minecraft.util.ResourceLocation;

public class RenderSample extends Render {
    public static final ResourceLocation texture = new ResourceLocation("entity:textures/entity/sample.png");
    public RenderSample() {
        // 引数:(ModelBase以降を継承したクラスのインスタンス、影の大きさ)
        super(new ModelSample(), 0.6f);
    }

    public ResourceLocation getEntityTexture(EntityLiving entity) { return texture; }
}
  • ModelSample.java
package mods.entity;

import net.minecraft.client.model.ModelBase;
import net.minecraft.client.model.ModelRenderer;

public class ModelSample extends ModelBase {
    // モデルの直方体を代入する変数
    ModelRenderer bottom;
    ModelRenderer base;
    ModelRenderer top;

    public ModelSample() {
        super();
        // テクスチャの縦と横のサイズ
        textureWidth = 32;
        textureHeight = 64;
        // モデルの形を作る
        base = new ModelRenderer(0, 14);
        base.addBox(0F, 0F, 0F, 10, 8, 10);

        bottom = new ModelRenderer(32, 2);
        bottom.addBox(1F, 8F, 1F, 8, 8, 8);

        top = new ModelRenderer(40, 18);
        top.addBox(2F, 16F, 2F, 6, 8, 6);
    }

    @Override
    public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) {
        // 描画
        base.render(f5);
        bottom.render(f5);
        top.render(f5);
    }
}

解説[編集]

  • SampleEntityCore.java

このModのエントリクラス。

  • EntitySample.java

うろついたり、見回したりする程度のAIを追加している。

  • RenderSample.java

追加するMobの描画クラス。

  • ModelSample.java

コンストラクタで、モデルの各直方体の大きさ、 回転軸、角度を決める。

ModelRenderer base;

public ModelSample() {
    base = new ModelRenderer(0, 0); // 引数:(テクスチャ画像の始点のX座標、テクスチャ画像の始点のY座標)
    base.addBox(0f, 0f, 0f, 1, 1, 1,); // 大きさの定義。引数:(始X, 始Y, 始Z, 終X, 終Y, 終Z)
    base.setRotationPoint(0.5f, 0.5f, 0.5f); // 回転軸の定義。引数:(X, Y, Z)
    base.rotateAngleX = 45f;
    base.rotateAngleZ = 45f; // X軸とZ軸方向に45度ずつ回転
}