ModLoaderMPとは、マインクラフトのSMP(マルチのこと)に対応させるためのMOD作成・導入補助用のMODです。
基本は、ModLoaderに付随して+α機能が付いていると認識されたほうがいいかもしれません。
前提Modの導入方法は割愛します。
※別製作者のSSPMODをSMPにする場合はきちんと製作者のライセンスを見てからやってください。 コレすごく大事
※前提としてModLodaerとMCPの利用が可能なこととします。
目次
環境構築
事前準備
1.MCPフォルダの「Jar」フォルダにminecraft_sever.jarをコピーする。
2.minecraft_server.jarにModLoaderMP(Server版)を導入する。
3.同「Jar」フォルダにクライアント側の「bin」「resources」フォルダをコピーする。
4.のクライアント側のminecraft.jarには必ずクライアント用ModLoader、ModLoaderMPを導入しておきます。
エラーの修正
このままMCPの「decompile.bat」を実行してもエラーが発生してしまいます。
そのためエラーの原因である/minecraft_server/net/minecraft/serverのMinecraftServer.javaを編集します。
SDK ModLoaderMP v3の場合
517行目をコメントアウト
534行目から553行目までをコメントアウト
Flan ModLoaderMPの場合
Ver1.2.3の場合:515行目から551行目をコメントアウト
Ver1.1の場合:400~431行目をコメントアウト
Ver1.01の場合:406~437行目をコメントアウト
Ver1.8.1の場合:344~375行目をコメントアウト
末尾に
}
を入れる。
実際のソースの変更部分
共通
1.worldObj使用時にMCPのMappingデータによります。
対象項目としては
world.isRemote ←この部分(1.2.3時点では共通項目のはず。)
古いデータの場合以下のように直さないとエラーになるはずです。
world.multiplayerWorld //ClientSide world.singleplayerWorld //ServerSide
2.ModLoaderを継承参照している定義ModLoaderMpに修正します。
public class mod_*** extends BaseMod
これを
public class mod_*** extends BaseModMp
に修正する。
Block,Itemを追加する場合
自作Entity.classを使用してBlock,Itemを追加している場合、
以下の記述部分を付け加えます。
※既存EntityのClassファイルを参照する場合は必要ありません。
Client側:
ModLoaderMp.registerNetClientHandlerEntity(Entity***.clas, netID);
Server側:
ModLoaderMp.registerEntityTrackerEntry(Entity***.class, netID); ModLoaderMp.registerEntityTracker(Entity***.class, 160, 5);
※netIDは0~256の中で指定することとし、Client・Serverで共通であること。
※ModLoaderMp.registerEntityTrackerは更新頻度を調整してます。
160は任意(だったはず。)5はticksを表しています。
Guiを追加する場合
※そこまで詳しくないので詳しい人お願いします。
SMPのGUIを作るためにはGUIを呼び出すコードをServerに設定し
Client側に処理するメソッドを設定します。
1.Server側に設定処理を追加します。
大体の場合、Entity,TileEntity,BlockGUI設定場所に設定しているはず。
ModLoader.OpenGUI(player, guiID, inventory, container);
player:GUIを開こうとしているPlayer
guiID:対象GUIのID
inventory:編集対象のinventory
container:使用しているSlotのインターフェイス
2.Client側に設定処理を追加します。
大体の場合mod_***
ModLoaderMp.registerGUI(this, guiID);
また、メソッドを追加します。
public GuiScreen HandleGUI(int inventoryType) { if(inventoryType == guiID) return new Gui***(args); else return null; }
Gui***には追加GuiのClass名を指定してください。
argsはGUIの引数の場所
ModLoader.getMinecraftinstance().thePlayer ←これ使うと楽かもしれない。
Mobを追加する場合
※そこまで詳しくないので詳しい人お願いします。
以下1または2をClientとServer両方に追加します。(EntityIDは一緒にすること)
1.以下行を追加します。
ModLoader.registerEntityID(Entity***.class, "EntityName", ModLoader.getUniqueEntiityID());
Entity***:対象MobのEntityのclassファイルを指定
"EntityName":対象Mobの名前
ModLoader.getUniqueEntityID:空いてるEntityIDから取得する
2.上記よりこっちのがオススメかもしれません。
ModLoader.registerEntityID(Entity***.class, "EntityName", ID);
ID部分はClient,Server共に同じEntityIDを指定して下さい。
※EntityIDは0~128までです。
リコンパイル・検証作業
1.Server側にModel,Render系のclassは必要ありません。描画するわけじゃないので
また、ModLoader.addNameやAddRenderも必要ありません。表示させるわけじゃないですので。
2.ここまで出来て文法エラーがない場合、リコンパイルして実行してみましょう。
あとは調整するのみです。
参考資料:http://www.minecraftforum.net/topic/352121-smp-mods-modloadermp-modding-310511/
- Midoriliさん>SDK氏と言われるとGun'sMOD系と勘違いしました。すみません。 --Nagisawa 2012年3月19日 (月) 11:14 (JST)
- Nagisawaさん>すみません。どのModLoaderMPでの話かわからない、という意味で書いたのですが・・・。とりあえず自分の環境でのSDK ModLoaderMPv3の導入方法を記述しました。 --Midorili 2012年3月19日 (月) 06:20 (JST)
- Midoriliさん>えっと、勘違いされると困るのですが、最低限部分の変更なのでそのとおりにやってもエラーが出るものは出ます。 --Nagisawa 2012年3月18日 (日) 23:49 (JST)
- ModLoaderMPのページの通りにエラーの修正を行いましたがエラーが修正されませんでした。導入したのはSDK氏作のv3です。 --Midorili 2012年3月18日 (日) 23:38 (JST)
コメントの自動更新を有効化