旧ラwiki

Minecraft MOD研究部

最終更新:

ranamoneud

- view
だれでも歓迎! 編集
Minecraft MODDING CLUB
MOD開発部です。
マインクラフトのMODを『使って遊ぶ』のではなく、『作って遊ぶ』という部活です。
RPGツクールやデザエモン、ゲームのEDITモードが好きだったというタイプの人向きです。
javaコーディングによってMOD作成が可能です。プログラム知識がある部員、無い部員どちらも募集中!



クラスやメソッドのメモ


MCPでデコンパイル済のソースファイルを見たメモです。導入手順はこちら
メモなので、誤った情報、古い情報もおおいに載ってます。
誰でも編集可です。というか一人では絶対無理。お前ヒマだろ書けよ。

Ver1.8対応MPC配布開始

地形系の変化

ChunkProviderGenerate

シード値から生成される、基本地形の生成

BiomeDecorator

鉱物やら花、小キノコなどを生成

MapGenXXXX

洞窟や、炭鉱、村、地下要塞などを生成?
↓(呼び出す)

StructureXXXX

洞窟や、炭鉱、村、地下要塞などを生成?(MapGenとの関係性未調査)
↓(呼び出す)

ComponentXXXX

村の家1、家2 や、地下要塞の壁、階段、のように、Structureの構成要素単位を生成


+ Ver1.7の情報の為、綴じ。

World.java

ワールドに関するオブジェクト。光、時間、天候、現存キャラクターリスト など
  • getInitialSpawnLocation()
 初期スポーン座標の決定&保持。陸地かつ砂ブロックの高さ64。
  • getBlockId(i,j,k)
 座標(i,j,k)のブロックのIDを読む。帰ってきた結果が1なら石、2なら土、etc。ブロックIDはBlock.java内に記載されているし、ここにも一覧が記載されている

Blocj.java

ここに書かれてる
羊毛ブロック(wool)は、BlockClothなので注意。「wool」で検索しても出ません。
羊毛ブロックのIDは35ですが、ブロックの色はメタデータとしてセット、かつ画面更新フラグを立てるメソッドを使わないと反映されないので注意。
→world.setBlockMetadataWithNotify(i, j, k, l)

Item.java

  • setIconCoord(int i, int j)
 アイコンの画像(minecraft.jar内、gui>items.png)を指定する。左上のアイコンが(0,0)で、右下が(15,15)。iが横、jが縦。
  • public final int shiftedIndex
IDに256値をプラスしたもの。
例えば、豚が生肉をアイテムとしてドロップする場合は、
return Item.porkRaw.shiftedIndex;
という指定で生肉のIDを取得している。
ブロックのID(0~255)とアイテムのID(256~)はIDが重複しないようにしているが、
アイテムのIDはいちいち256足した所からカウントするとややこしい為、1から順にIDを割り当てている。
IDを呼ぶときのみ、値にプラス256を行うようになっている。
このプラス256するために噛ませているのがshiftedIndexという値。

EntityLiving.java

  • protected void dropFewItems()
生き物倒した時のアイテム数はここ?
0~2個のいずれかの個数からランダムでアイテムを落とす、という処理。

Chunk.java

ブロックの配置管理

ChunkProviderGenerate.java

マインクラフトの肝となる、地形や気候の生成ロジック。ワールド生成時のブロックを配置。
チャンク単位で生成される。

  • provideChunk(int i, int j)
 ここから各メソッド呼び出し。//つまり、ここのi.jで条件分岐させれば、チャンク毎にバラバラの地形生成が可能・・・?

  • generateTerrain(int i, int j, byte abyte0[], BiomeGenBase abiomegenbase[], double ad[])
 一番基礎となる地形の生成。石と水(氷)のみ配置。(陸地と海なのですね)
 abyte0[] = new byte[32768]; //32768=16*16*128:1チャンクのサイズ(縦横16ブロック、高さ128ブロック)。
 abyteの中に値をセットしている。このセット値がそのまま基本の地形となる。
 先頭から順に配列128個ごとに、高さ0から127までのブロックのIDを入れる。
 こうなっている感じ。(縦横の座標は適当)
 ad[]は気温?
 BioGenBaseは基本バイオーム(氷河とか砂漠とか森とか・・・)

  • replaceBlocksForBiome(int i, int j, byte abyte0[], BiomeGenBase abiomegenbase[])
 2番目に基礎となる地形。地盤、砂利、砂、砂石を配置

  • populate(IChunkProvider ichunkprovider, int i, int j)
 鉱物やら植物、洞窟生成や植物配置など、基盤ワールドにマインクラフトの要素を付加する大事なメソッド。
 何故かChunkProviderから呼ばれてる?
       if(rand.nextInt(4) == 0):4分の1の確率で、湖を作成するメソッドを呼び出す。
       {
           int i1 = k + rand.nextInt(16) + 8; //i1, l4, i8がワールドの座標i1, i8が横幅、奥行きで、l4は高さ。
           int l4 = rand.nextInt(128);
           int i8 = l + rand.nextInt(16) + 8;
           (new WorldGenLakes(Block.waterStill.blockID)).generate(worldObj, rand, i1, l4, i8);
       }

WorldGenerator.java

chunkProviderGenerate.populateから呼ばれて、鉱物やマグマやら植物やらカボチャやらのブロックを配置する。

マルチサーバーMODについてメモ

マインクラフトはminecraft.jar(クライアント:個人で遊ぶ用)とminecraft_server.jar(サーバー:マルチ提供用)の二種類があって、
マルチサーバー用は後者の中身をいじるだけかと思っていたけれど、実際はサーバーとクライアントと両方の中身を
同じように変更しないと駄目な場合がある事が判明。(サーバーだけ変えたら良い、という例は少ない…?調査不足中。)
例1:新アイテム追加の場合
新しいIDにアイテム割り当てを行う場合、サーバーのみにアイテムを追加しただけだと、
プレイ中に該当アイテムを落とした瞬間に画面が真っ青になった後ブラックアウトして落ちる。
クライアントにもアイテム追加した後だと落ちない。参加者全員にMOD導入の必要有り。
モブの落とすアイテムはサーバー側の設定に依存する。

例2:レコード曲追加の場合
minecraft_server.jarには曲に関する機能が無い??処理はクライアントのjarを参照しているっぽい。
レコード曲「cat」をマルチで流す時は、各クライアントのローカルファイル上のcat.oggを鳴らす指示が出されている。
なので、曲を追加したければ、参加者全員に曲ファイルを指定フォルダに導入してもらう必要有り。
サーバー単体で動くわけではなく、クライアントのjarも参照して色々やってるらしいので、やや複雑。テストも困難。
ModLoaderとAudioModを入れたら上手くいきますね by セギナー
↑上手くいくってのは、どこにどういうものを導入した時でしょうか?手順も含めお願いします
↑クライアントjarに対して、レコードとBGMを追加するMOD「Dubstep Discs」のレコード情報対応部分を書き換えたらシングル・マルチ両方で希望の音楽を再生できるようになりました。
取得条件を追加すればレコードもしっかりアイテムとして入手できます。
「Dubstep Discs」の.java内には読みだしコードのようなものは見当たらなかったので、読み出しはModLoaderかAudioModのどちらかに依存しているようです。
サーバーはアイテム情報と取得条件を追加するだけ。まだ他の人にテストしてもらってないので不確定です。
手順は後でマルチのページにも載せようと思ってます。
+ 手順
※MOD導入の前に「mcrunman」などのMOD使い分けソフトを入れるのを推奨
※minecraft.jarは\AppData\Roaming\.minecraft\binにある


○用意するもの
  • ModLoader マイクラwikiのMODの項参照
  • AudioMod マイクラwikiのMODの項参照

  • 7-ZipやExplznなどのjar形式に対応した展開ソフト
(ドラッグ&ドロップでminecraft.jarの中に直接ファイルをコピーすることが出来る)

  • 配布するファイル群


○導入方法
1.ModLoaderを展開して出てくるファイルをminecraft.jar内に上書き
2.AudioModを展開して出てくるファイルをminecraft.jar内に上書き
3.一度マインクラフトを起動させ、終了する


4.配布する5つの.classファイルをminecraft.jar内に上書き
5.recordフォルダをminecraft.jar内にコピー
6.appdata内の .minecraft -> resources -> mod -> streamingとフォルダを辿り、
その中にoggファイルをコピー。 "mod"フォルダ内なので間違えないように

7.マルチサーバーに入って動作確認をする


製作物

MAP生成系

面白い地形を作れるように改造して遊ぶ。

大陸MOD


テスト1

白い雪ブロックが縦に並ぶだけのMOD。縦座標がランダムでそこそこ面白い。
ランダムってのがこの生成系MODのキモですね。ランダムをいかに活用しつつも面白い地形を誘発させるか。
海中にも生えてる。洞窟内を探したのですが見つかりませんでした。
同じ空でも、出る地形と出ない地形が存在している。

テクスチャ系

DOK犬

20分くらいで作った妥協作

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

記事メニュー
目安箱バナー