提供: Minecraft Modding Wiki
移動先: 案内検索
2行目: 2行目:
 
基本は、ModLoaderに付随して+α機能が付いていると認識されたほうがいいかもしれません。<br />
 
基本は、ModLoaderに付随して+α機能が付いていると認識されたほうがいいかもしれません。<br />
 
前提Modの導入方法は割愛します。<br/>
 
前提Modの導入方法は割愛します。<br/>
 +
 +
'''※別製作者のSSPMODをSMPにする場合はきちんと製作者のライセンスを見てからやってください。
 +
 コレすごく大事'''
  
 
※前提としてModLodaerとMCPの利用が可能なこととします。<br />
 
※前提としてModLodaerとMCPの利用が可能なこととします。<br />

2012年3月14日 (水) 13:53時点における版

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での操作

1.MCPの「decompile.bat」を動かす。
2.エラーがでますが気にしない。
3.エラーがでている部分を修正します。  ソースフォルダの/minecraft_server/net/minecraft/serverのMinecraftServer.javaを編集します。
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を追加する場合

Block,Itemを追加している記述部分に以下を付け加えます。
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/