[チュートリアル]単純な人型MOBの作成

クライアント/サーバーMODの開発に関する話題、技術交換はこちらで。質問は質問フォーラムへお願いします。
  • (PostNo.11642)

[チュートリアル]単純な人型MOBの作成

投稿記事by nankotsu230 » 2011年11月04日(金) 19:36

ModLoaderを使用します。
開発環境については日本WikiのModdingページを参考にしてください。


・新規作成
mod_newMob.java
EntityNewMob.java  MOBの本体。MOBの行動などを弄るはここを書き換えます。
ModelNewMob.java  MOBのモデル。
newMob.png      MOBのテクスチャ。


mod_newMob.java
package net.minecraft.src;

import java.util.Map;

public class mod_newMob extends BaseMod
{
 public mod_newMob()
 {
  ModLoader.RegisterEntityID(EntityNewMob.class, "NewMob", ModLoader.getUniqueEntityId());
  ModLoader.AddSpawn(EntityNewMob.class, 5, 1, 3, EnumCreatureType.monster);
  //引数 ( MOBのクラスインスタンス、湧きやすさ、グループ湧きの最小値、グループ湧きの最大値、MOBのタイプ )
 }

 public String Version()
 {
  return "1.0";
 }

 public void AddRenderer(Map map)
 {
  super.AddRenderer(map);
  map.put(EntityNewMob.class, new RenderBiped(new ModelNewMob(), 0.5F));
  //MOBのモデルを指定。
 }

}

解説
BaseModを継承。
ModLoader.RegisterEntityIDでMOBを登録。
ModLoader.AddSpawnで湧きを設定。


EntityNewMob.java
package net.minecraft.src;

import java.util.Random;

public class EntityNewMob extends EntityMob
{

  public EntityNewMob(World world)
  {
    super(world);
    texture = "/newMob.png";
    //スキンのパス
    moveSpeed = 0.5F;
    attackStrength = 5;
  }

  public void onLivingUpdate()
  {
    if(worldObj.isDaytime() && !worldObj.multiplayerWorld)
    {
      float f = getEntityBrightness(1.0F);
      if(f > 0.5F && worldObj.canBlockSeeTheSky(MathHelper.floor_double(posX), MathHelper.floor_double(posY), MathHelper.floor_double(posZ)) && rand.nextFloat() * 30F < (f - 0.4F) * 2.0F)
      {
        fire = 300;
      }
    }
    super.onLivingUpdate();
  }

  protected String getLivingSound()
  {
    return "mob.zombie";
  }

  protected String getHurtSound()
  {
    return "mob.zombiehurt";
  }

  protected String getDeathSound()
  {
    return "mob.zombiedeath";
  }

  protected int getDropItemId()
  {
    return Block.dirt.blockID;
    //ドロップアイテムのID
  }

  public boolean getCanSpawnHere() {
   return true;
   //明るさ、場所に関係なく湧くように。
  }
}

解説
EntityMobを継承。
ゾンビのソースをベースにしてます。
onLivingUpdate()で日光で燃える処理をしてます。


ModelNewMob.java
package net.minecraft.src;

public class ModelNewMob extends ModelBiped
{

  public ModelNewMob()
  {
  }

  public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5)
  {
    super.setRotationAngles(f, f1, f2, f3, f4, f5);
    float f6 = MathHelper.sin(onGround * 3.141593F);
    float f7 = MathHelper.sin((1.0F - (1.0F - onGround) * (1.0F - onGround)) * 3.141593F);
    bipedRightArm.rotateAngleZ = 0.0F;
    bipedLeftArm.rotateAngleZ = 0.0F;
    bipedRightArm.rotateAngleY = -(0.1F - f6 * 0.6F);
    bipedLeftArm.rotateAngleY = 0.1F - f6 * 0.6F;
    bipedRightArm.rotateAngleX = -1.570796F;
    bipedLeftArm.rotateAngleX = -1.570796F;
    bipedRightArm.rotateAngleX -= f6 * 1.2F - f7 * 0.4F;
    bipedLeftArm.rotateAngleX -= f6 * 1.2F - f7 * 0.4F;
    bipedRightArm.rotateAngleZ += MathHelper.cos(f2 * 0.09F) * 0.05F + 0.05F;
    bipedLeftArm.rotateAngleZ -= MathHelper.cos(f2 * 0.09F) * 0.05F + 0.05F;
    bipedRightArm.rotateAngleX += MathHelper.sin(f2 * 0.067F) * 0.05F;
    bipedLeftArm.rotateAngleX -= MathHelper.sin(f2 * 0.067F) * 0.05F;

    //ココらへんは他のMOBを参考にして試行錯誤してください。
  }
}

解説
setRotationAngles()
このメソッドで引数を元にモデルの腕や足などを動かします。


newMob.pngを/binに入れてください。
モデルの弄り方は後日。

ソースコード
ttr_newMob.zip
(3.66 KiB) ダウンロード数: 1306 回
アバター
nankotsu230
ID:286acf4f
石掘り
 
記事: 89
登録日時: 2011年8月05日(金) 15:15

  • (PostNo.11861)

Re: [チュートリアル]単純な人型MOBの作成

投稿記事by 名無しのマイクラくん » 2011年11月06日(日) 19:09

既存の効果音以外の効果音を設定する場合にはどうすればいいですか?
例えば猫を追加して猫の声にしたい場合など。
名無しのマイクラくん
ID:c2aac0d5
 

  • (PostNo.34028)

Re: [チュートリアル]単純な人型MOBの作成

投稿記事by aoisensi » 2012年4月11日(水) 18:36

参考にさせて頂きます!
あんまり投稿しません Java嫌いです Mod適当に作ってます
サイト:http://aoisensi.info
アバター
aoisensi
ID:ef0ade4d
木を殴ってる
 
記事: 18
登録日時: 2012年1月21日(土) 22:17

  • (PostNo.34044)

Re: [チュートリアル]単純な人型MOBの作成

投稿記事by aoisensi » 2012年4月11日(水) 20:22

名無しのマイクラくん さんが書きました:既存の効果音以外の効果音を設定する場合にはどうすればいいですか?
例えば猫を追加して猫の声にしたい場合など。

AudioMODと組み合わせてやればいいと思いますよ
あんまり投稿しません Java嫌いです Mod適当に作ってます
サイト:http://aoisensi.info
アバター
aoisensi
ID:ef0ade4d
木を殴ってる
 
記事: 18
登録日時: 2012年1月21日(土) 22:17

  • (PostNo.38957)

Re: [チュートリアル]単純な人型MOBの作成

投稿記事by ゲスト » 2012年5月17日(木) 01:31

プログラムはいじくってないのですが
このようなエラーがでるのですが
src\minecraft\net\minecraft\src\EntityNewMob.java:5: エラー: EntityNewMobはabstr
actでなく、EntityLiving内のabstractメソッドgetMaxHealth()をオーバーライドしませ

public class EntityNewMob extends EntityMob
^
オーバーライドなどがわからず進んでません><

出来れば教えていただけると助かります><
ゲスト
ID:70743d1d
 

  • (PostNo.39048)

Re: [チュートリアル]単純な人型MOBの作成

投稿記事by ayamitsu » 2012年5月17日(木) 16:49

ゲスト さんが書きました:プログラムはいじくってないのですが
このようなエラーがでるのですが
src\minecraft\net\minecraft\src\EntityNewMob.java:5: エラー: EntityNewMobはabstr
actでなく、EntityLiving内のabstractメソッドgetMaxHealth()をオーバーライドしませ

public class EntityNewMob extends EntityMob
^
オーバーライドなどがわからず進んでません><

出来れば教えていただけると助かります><


EntityLivingのクラスをみてください。("EntityLiving.java"というファイルの中身)
そこに、
コード: 全て選択
public abstract int getMaxHealth();

というのがあります。

EntityLivingのクラスを継承している、または継承しているクラスを継承している場合はabstractなメソッドをオーバーライドしなければなりません。
例えば、豚(EntityPig)の場合は、
コード: 全て選択
public int getMaxHealth()
    {
        return 10;
    }

となってます。
ここらへんを参考にしてくださればいいかと思います。
Minecraft Modding Wikiというサイトもあります。

あと、Javaなどのプログラミング関連については検索するとでてくるはずですので、一度調べてみてください。(オーバーライド(Override)も然り)
アバター
ayamitsu
ID:b39d215b
ラピスラズリ収集家
 
記事: 1068
登録日時: 2011年8月10日(水) 19:04

  • (PostNo.39620)

Re: [チュートリアル]単純な人型MOBの作成

投稿記事by ゲスト » 2012年5月20日(日) 12:08

ありがとうございます!

無事できました^^
ゲスト
ID:70743d1d
 

  • (PostNo.43906)

Re: [チュートリアル]単純な人型MOBの作成

投稿記事by redolyr » 2012年6月18日(月) 23:17

村人をベースにしたソースコードの
書き方を教えてください
redolyr
ID:51c02fec
 

  • (PostNo.137764)

Re: [チュートリアル]単純な人型MOBの作成

投稿記事by カイト » 2013年11月02日(土) 22:15

制作は知識0で始める場合どれくらいかかりますか?
カイト
ID:f1cbaa09
 

  • (PostNo.137803)

Re: [チュートリアル]単純な人型MOBの作成

投稿記事by mozipi » 2013年11月03日(日) 01:17

カイト さんが書きました:制作は知識0で始める場合どれくらいかかりますか?

ここで質問することではないと思ったけど知識0>このチュートリアルまでと解釈しておこう。うん

前提で、MinecraftはJavaというプログラミング言語でできています。
このチュートリアルは、中級~上級の難易度となりますので、Javaの最低限の知識は必要となります。

基礎の習得にはプログラミング経験0であれば、1~2ヶ月ほど、プログラミング経験がすでにある場合は1週間~1ヶ月程度で習得できると思います。

習得できれば、あとはチュートリアルに従えばいいのですが、このチュートリアルは古いので役にたたないかもしれません。
画像
UsefulMilletなどの製作を行っています。
よろしければどうぞ。
ニコニコミュニティ:co2105535
サイト:http://mozipi.jpn.ph/

NAGServerの運営もしております。ぜひ投票・サーバーログインお願い致します
画像
アバター
mozipi
ID:a69cb188
レッドストーン掘り
 
記事: 569
登録日時: 2011年12月26日(月) 19:44

  • (PostNo.138070)

Re: [チュートリアル]単純な人型MOBの作成

投稿記事by カイト » 2013年11月04日(月) 10:31

スレッドミスしてすみません、あと返信ありがとうございました(>_<)
カイト
ID:f1cbaa09
 

  • (PostNo.146906)

Re: [チュートリアル]単純な人型MOBの作成

投稿記事by terupeko11 » 2013年12月21日(土) 11:26

僕も、これ勉強して、一応エンダーマンみたいな感じの人型MOBは作れました。
公開する予定はありませんが、結構いいです
さあ!みんなもMODを作ろう。ブロック追加のMODなら制作依頼を
受け付けております。
もうちょいすごくなったら、テクスチャも作ろうと思います皆さんも頑張ってください!
アバター
terupeko11
ID:1805c295
水から上がったとこ
 
記事: 1
登録日時: 2013年12月21日(土) 11:07

  • (PostNo.170607)

Re: [チュートリアル]単純な人型MOBの作成

投稿記事by ゲスト » 2014年4月22日(火) 20:21

ソースコードを全コピしてrecompile.batを起動すると、エラーが100個出ます。
何が間違ってるか教えてください。
ゲスト
ID:f232f374
 

  • (PostNo.170720)

Re: [チュートリアル]単純な人型MOBの作成

投稿記事by ゲスト » 2014年4月23日(水) 18:54

上の質問に補足です。
MC1.5.2、ModLoderはあります。
エラーのほとんどは
src\minecraft\net\minecraft\src\mod_make\EntityNewMob.java:31: エラー: \12288は
不正な文字です
  {
^
のような感じです。
ゲスト
ID:f232f374
 

  • (PostNo.170721)

Re: [チュートリアル]単純な人型MOBの作成

投稿記事by ゲスト » 2014年4月23日(水) 18:54

上の質問に補足です。
MC1.5.2、ModLoderはあります。
エラーのほとんどは
src\minecraft\net\minecraft\src\mod_make\EntityNewMob.java:31: エラー: \12288は
不正な文字です
  {
^
のような感じです。
ゲスト
ID:f232f374
 

  • (PostNo.170824)

Re: [チュートリアル]単純な人型MOBの作成

投稿記事by CrafterKina » 2014年4月24日(木) 21:59

ゲスト さんが書きました:上の質問に補足です。
MC1.5.2、ModLoderはあります。
エラーのほとんどは
src\minecraft\net\minecraft\src\mod_make\EntityNewMob.java:31: エラー: \12288は
不正な文字です
  {
^
のような感じです。

スペースに全角スペースを使用していませんか?
アバター
CrafterKina
ID:10ad58cf
石炭掘り
 
記事: 190
登録日時: 2013年4月06日(土) 14:42

  • (PostNo.171072)

Re: [チュートリアル]単純な人型MOBの作成

投稿記事by ゲスト » 2014年4月26日(土) 19:00

CrafterKinaさんありがとうございます。
全角スペースになっていました。
ただ、下のように直しても6個エラーが出てしまいます。
「シンボルを見つけられません」となっているところは、最初の文字の大文字と小文字を変えてみましたが、変わりません。
間違いを教えてください。
== ERRORS FOUND ==

src\minecraft\net\minecraft\src\mod_make\EntityNewMob.java:14: エラー: シンボル
を見つけられません
attackStrength = 5;
^

シンボル: 変数 attackStrength
場所: クラス EntityNewMob
src\minecraft\net\minecraft\src\mod_make\EntityNewMob.java:20: エラー: シンボル
を見つけられません
float f = getEntityBrightness(1.0F);
^

シンボル: メソッド getEntityBrightness(float)
場所: クラス EntityNewMob
src\minecraft\net\minecraft\src\mod_make\EntityNewMob.java:23: エラー: fireはEnt
ityでprivateアクセスされます
fire = 300;
^

src\minecraft\net\minecraft\src\mod_make\ModelNewMob.java:12: エラー: setRotatio
nAnglesに適切なメソッドが見つかりません(float,float,float,float,float,float)
super.setRotationAngles(f, f1, f2, f3, f4, f5);
^

メソッド ModelBiped.setRotationAngles(float,float,float,float,float,float,En
tity)は使用できません
(実引数リストと仮引数リストの長さが異なります)
メソッド ModelBase.setRotationAngles(float,float,float,float,float,float,Ent
ity)は使用できません
(実引数リストと仮引数リストの長さが異なります)
src\minecraft\net\minecraft\src\mod_make\mod_newMob.java:5: エラー: mod_newMobは
abstractでなく、BaseMod内のabstractメソッドload()をオーバーライドしません
public class mod_newMob extends BaseMod
^

src\minecraft\net\minecraft\src\mod_make\mod_newMob.java:12: エラー: シンボルを
見つけられません
ModLoader.RegisterEntityID(EntityNewMob.class, "NewMob", ModLoader.getUniqueEnti
tyId());
^

シンボル: メソッド getUniqueEntityId()
場所: クラス ModLoader
注意:入力ファイルの操作のうち、未チェックまたは安全ではないものがあります。
注意:詳細は、-Xlint:uncheckedオプションを指定して再コンパイルしてください。
エラー6個
==================
ゲスト
ID:f232f374
 

  • (PostNo.179407)

Re: [チュートリアル]単純な人型MOBの作成

投稿記事by trough » 2014年6月26日(木) 21:21

ゲスト さんが書きました:CrafterKinaさんありがとうございます。
全角スペースになっていました。
ただ、下のように直しても6個エラーが出てしまいます。
「シンボルを見つけられません」となっているところは、最初の文字の大文字と小文字を変えてみましたが、変わりません。
間違いを教えてください。
== ERRORS FOUND ==

src\minecraft\net\minecraft\src\mod_make\EntityNewMob.java:14: エラー: シンボル
を見つけられません
attackStrength = 5;
^

シンボル: 変数 attackStrength
場所: クラス EntityNewMob
src\minecraft\net\minecraft\src\mod_make\EntityNewMob.java:20: エラー: シンボル
を見つけられません
float f = getEntityBrightness(1.0F);
^

シンボル: メソッド getEntityBrightness(float)
場所: クラス EntityNewMob
src\minecraft\net\minecraft\src\mod_make\EntityNewMob.java:23: エラー: fireはEnt
ityでprivateアクセスされます
fire = 300;
^

src\minecraft\net\minecraft\src\mod_make\ModelNewMob.java:12: エラー: setRotatio
nAnglesに適切なメソッドが見つかりません(float,float,float,float,float,float)
super.setRotationAngles(f, f1, f2, f3, f4, f5);
^

メソッド ModelBiped.setRotationAngles(float,float,float,float,float,float,En
tity)は使用できません
(実引数リストと仮引数リストの長さが異なります)
メソッド ModelBase.setRotationAngles(float,float,float,float,float,float,Ent
ity)は使用できません
(実引数リストと仮引数リストの長さが異なります)
src\minecraft\net\minecraft\src\mod_make\mod_newMob.java:5: エラー: mod_newMobは
abstractでなく、BaseMod内のabstractメソッドload()をオーバーライドしません
public class mod_newMob extends BaseMod
^

src\minecraft\net\minecraft\src\mod_make\mod_newMob.java:12: エラー: シンボルを
見つけられません
ModLoader.RegisterEntityID(EntityNewMob.class, "NewMob", ModLoader.getUniqueEnti
tyId());
^

シンボル: メソッド getUniqueEntityId()
場所: クラス ModLoader
注意:入力ファイルの操作のうち、未チェックまたは安全ではないものがあります。
注意:詳細は、-Xlint:uncheckedオプションを指定して再コンパイルしてください。
エラー6個
==================

バージョンの差じゃないですか?
ああ~心がぴょんぴょんしないんじゃあ~
github: https://github.com/trough33/
画像
画像
trough
ID:a4987e97
木を殴ってる
 
記事: 20
登録日時: 2013年4月28日(日) 16:56

  • (PostNo.183075)

Re: [チュートリアル]単純な人型MOBの作成

投稿記事by トゥーー » 2014年7月20日(日) 00:03

これのforgeで作りたいのですが、forgeでの作成はどうやるんですか
トゥーー
ID:31159c99
 


Return to 開発関連

x