提供: Minecraft Modding Wiki
細 |
(継承の誤りを修正。) |
||
(他の1人の利用者による、間の6版が非表示) | |||
24行目: | 24行目: | ||
@EventHandler | @EventHandler | ||
public void init(FMLInitialization event) { | public void init(FMLInitialization event) { | ||
− | EntityRegistry.registerModEntity(EntitySample.class, "SampleEntity, 0, this, 250, 1, false); | + | EntityRegistry.registerModEntity(EntitySample.class, "SampleEntity", 0, this, 250, 1, false); |
EntityRegistry.addSpawn(EntitySample.class, 20, 1, 4, EnumCreatureType.creature, BiomeGenBase.plains); | EntityRegistry.addSpawn(EntitySample.class, 20, 1, 4, EnumCreatureType.creature, BiomeGenBase.plains); | ||
if(FMLCommonHandler.instance().getSide() == Side.CLIENT) { | if(FMLCommonHandler.instance().getSide() == Side.CLIENT) { | ||
36行目: | 36行目: | ||
package mods.entity; | package mods.entity; | ||
− | public class EntitySample extends | + | 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) { | public EntitySample(World world) { | ||
super(world); | super(world); | ||
− | // | + | // うろうろ移動するAIの追加 |
this.tasks.addTask(1, new EntityAIWander(this, 1.0D)); | this.tasks.addTask(1, new EntityAIWander(this, 1.0D)); | ||
// 見回すAIの追加 | // 見回すAIの追加 | ||
78行目: | 88行目: | ||
package mods.entity; | package mods.entity; | ||
− | public class RenderSample extends | + | import net.minecraft.client.renderer.entity.RenderBiped; |
− | public RenderSample( | + | 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> | </source> |
2018年1月11日 (木) 17:35時点における最新版
この記事は"Minecraft Forge Universal 9.10.0.871~"を前提MODとしています。 |
このページは、編集中です。
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度ずつ回転 }