最新版 |
編集中の文章 |
1行目: |
1行目: |
− | {{前提MOD|reqmod="Minecraft Forge Universal 9.10.0.871~"}}
| |
− | {{ チュートリアル難易度 | difficulty=1 |clear=none}}
| |
− | {{チュートリアルカテゴリー|type=Entity| difficulty=1}}
| |
− | '''このページは、編集中です。'''
| |
| ==MOBの追加== | | ==MOBの追加== |
− | EntityLivingを継承して、MOBを追加します。
| |
− | モデルやAIも実装します
| |
− | ===ソースコード===
| |
− | *SampleEntityCore.java
| |
− | <source lang="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());
| |
− | }
| |
− | }
| |
− | </source>
| |
− |
| |
− | *EntitySample.java
| |
− | <source lang="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 /* ドロップするアイテム */ ; }
| |
− | }
| |
− | </source>
| |
− | *RenderSample.java
| |
− | <source lang="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; }
| |
− | }
| |
− | </source>
| |
− |
| |
− | *ModelSample.java
| |
− | <source lang="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);
| |
− | }
| |
− | }
| |
− | </source>
| |
− |
| |
− | ===解説===
| |
− | *SampleEntityCore.java
| |
− | このModのエントリクラス。
| |
− | *EntitySample.java
| |
− | うろついたり、見回したりする程度のAIを追加している。
| |
− | *RenderSample.java
| |
− | 追加するMobの描画クラス。
| |
− | *ModelSample.java
| |
− | コンストラクタで、モデルの各直方体の大きさ、 回転軸、角度を決める。
| |
− | <source lang="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度ずつ回転
| |
− | }
| |
− | </source>
| |