提供: Minecraft Modding Wiki
移動先: 案内検索
 
(6人の利用者による、間の24版が非表示)
1行目: 1行目:
 
ModLoaderMPとは、マインクラフトのSMP(マルチのこと)に対応させるためのMOD作成・導入補助用のMODです。<br />
 
ModLoaderMPとは、マインクラフトのSMP(マルチのこと)に対応させるためのMOD作成・導入補助用のMODです。<br />
 
基本は、ModLoaderに付随して+α機能が付いていると認識されたほうがいいかもしれません。<br />
 
基本は、ModLoaderに付随して+α機能が付いていると認識されたほうがいいかもしれません。<br />
 +
前提Modの導入方法は割愛します。<br/>
  
 +
'''※別製作者のSSPMODをSMPにする場合はきちんと製作者のライセンスを見てからやってください。
 +
 コレすごく大事'''
  
 
※前提としてModLodaerとMCPの利用が可能なこととします。<br />
 
※前提としてModLodaerとMCPの利用が可能なこととします。<br />
  
 +
※1.2.3からは「元々ModLoaderMpを開発されていたSDK氏が復活しています。」<br />
 +
 また、MinecraftForge側もSDK氏作成のModLoaderMPを参照しているため<br />
 +
 1.2.3はSDK氏のModLoaderMPを推奨します。(以前のバージョンは除きます)<br />
 +
 +
<br />
 +
=環境構築=
 +
==事前準備==
 +
1.MCPフォルダの「Jar」フォルダにminecraft_sever.jarをコピーする。<br />
 +
2.minecraft_server.jarにModLoaderMP(Server版)を導入する。<br />
 +
3.同「Jar」フォルダにクライアント側の「bin」「resources」フォルダをコピーする。<br />
 +
4.のクライアント側のminecraft.jarには必ずクライアント用ModLoader、ModLoaderMPを導入しておきます。<br />
 
<br />
 
<br />
  
Step1<br />
+
==エラーの修正==
 MCPフォルダの「Jar」フォルダにminecraft_sever.jarをコピー<br />
+
MCPの「decompile.bat」を実行します。<br />
 minecraft_server.jarにModLoaderMP(Server版)を導入します。<br />
+
エラーが発生しますが、Decompileには成功しています。<br/>
 また、同「Jar」フォルダにクライアント側の「bin」「resources」フォルダをコピーしておきます。<br />
+
このままコンパイルするとエラーが発生しますので<br/>
 このクライアント側のminecraft.jarには必ずクライアント用ModLoader、ModLoaderMPを導入しておきます。<br />
+
MCPROOT/src/minecraft_server/net/minecraft/serverのMinecraftServer.javaを編集します。<br />
 +
====SDK ModLoaderMP v3の場合====
 +
517行目をコメントアウト<br />
 +
534行目から553行目までをコメントアウト<br />
 +
行数がずれている場合があるので、対象ソースの一部を記載しておきます。
 +
run()メソッドの
 +
<source lang="java">
 +
            finally
 +
            {
 +
                System.exit(0);
 +
            }/*
 +
 
 +
            break MISSING_BLOCK_LABEL_350;
 +
        }
 +
 
 +
        try
 +
        {
 +
            stopServer();
 +
            serverStopped = true;
 +
        }
 +
        catch (Throwable throwable)
 +
        {
 +
            throwable.printStackTrace();
 +
        }
 +
        finally
 +
        {
 +
            System.exit(0);
 +
        }
 +
 
 +
        break MISSING_BLOCK_LABEL_350;
 +
        Exception exception2;
 +
        exception2;
 +
 
 +
        try
 +
        {
 +
            stopServer();
 +
            serverStopped = true;
 +
        }
 +
        catch (Throwable throwable3)
 +
        {
 +
            throwable3.printStackTrace();
 +
        }
 +
        finally
 +
        {
 +
            System.exit(0);
 +
        }
 +
 
 +
 
 +
        throw exception2;
 +
        */
 +
        }
 +
    }
 +
</source>
 +
コメントアウトしてある部分が対象です。
 +
 
 +
===Flan ModLoaderMPの場合===
 +
'''Ver1.2.5の場合:519~555行目をコメントアウト'''<br />
 +
Ver1.2.3の場合:515~551行目をコメントアウト<br />
 +
Ver1.1.0の場合:400~431行目をコメントアウト<br />
 +
Ver1.0.1の場合:406~437行目をコメントアウト<br />
 +
Ver1.8.1の場合:344~375行目をコメントアウト<br />
 
<br />
 
<br />
 +
末尾に
 +
<pre>
 +
}
 +
</pre>
 +
を入れる。
  
Step2<br />
+
=実際のソースの変更部分=
 ここまで出来たらMCPの「decompile.bat」を動かしましょう。<br />
 
 エラーがでますが気にしない。<br />
 
 このままではリコンパイルする際にエラーを吐き出すので、以下/minecraft_server/net/minecraft/serverの<br />
 
 MinecraftServer.javaソースを編集します。<br />
 
 <br />
 
  
 Ver1.2.3<br />
+
==共通==
 515行目から551行目までをコメントアウトの後<br />
+
1.worldObj使用時にMCPのMappingデータによります。<br />
 +
 対象項目としては
 
<pre>
 
<pre>
 }<br />
+
   world.isRemote ←この部分(1.2.3時点では共通項目のはず。)
 
</pre>
 
</pre>
 を追加<br />
+
 
<br />
+
古いデータの場合以下のように直さないとエラーになるはずです。 
 Ver1.1の場合 400~431行目をコメントアウト<br />
+
<pre>
 Ver1.01の場合 406~437行目をコメントアウト<br />
 
 Ver1.8.1の場合 344~375行目をコメントアウト<br />
 
 他バージョンでも<br />
 
 <pre>
 
 }
 
 </pre>
 
 を入れるのを忘れないように。<br />
 
<br />
 
Step3<br />
 
 ①共通<br />
 
  Entity系コンテンツで、worldObjを呼び出している場合<br />
 
  MCPのバージョンとか、CSVファイルによりますがエラーが出ている可能性があります。<br />
 
  対象項目としては<br />
 
  <pre>
 
   world.isRemote ←この部分(1.2.3時点では共通項目です)
 
  </pre>
 
   古いデータの場合以下のように直します。 
 
  <pre>
 
 
   world.multiplayerWorld //ClientSide
 
   world.multiplayerWorld //ClientSide
 
   world.singleplayerWorld  //ServerSide
 
   world.singleplayerWorld  //ServerSide
  </pre>
+
</pre>
<br />
+
 
 +
2.ModLoaderを継承参照している定義ModLoaderMpに修正します。<br />
 +
 
 +
<source lang="java">
 +
public class mod_*** extends BaseMod
 +
</source>
 +
 
 +
これを<br/>
 +
 
 +
<source lang="java">
 +
public class mod_*** extends BaseModMp
 +
</source>
 +
に修正する。<br />
 +
 
 +
==Block,Itemを追加する場合==
 +
自作Entity.classを使用してBlock,Itemを追加している場合、
 +
以下の記述部分を付け加えます。<br />
 +
※既存EntityのClassファイルを参照する場合は必要ありません。<br />
 +
Client側:<br />
 +
<source lang="java">
 +
ModLoaderMp.registerNetClientHandlerEntity(Entity***.clas, netID);
 +
</source>
 +
 
 +
Server側:<br />
 +
 
 +
<source lang="java">
 +
ModLoaderMp.registerEntityTrackerEntry(Entity***.class, netID);
 +
ModLoaderMp.registerEntityTracker(Entity***.class, 160, 5);
 +
</source>
 +
 
 +
※netIDは0~256の中で指定することとし、Client・Serverで共通であること。<br />
 +
※ModLoaderMp.registerEntityTrackerは更新頻度を調整してます。<br/>
 +
 160は任意(だったはず。)5はticksを表しています。<br/>
 +
 
 +
==Guiを追加する場合==
 +
※そこまで詳しくないので詳しい人お願いします。<br />
 +
SMPのGUIを作るためにはGUIを呼び出すコードをServerに設定し<br />
 +
Client側に処理するメソッドを設定します。<br />
 +
 
 +
1.Server側に設定処理を追加します。<br />
 +
大体の場合、Entity,TileEntity,BlockGUI設定場所に設定しているはず。
 +
 
 +
<source lang="java">
 +
ModLoader.OpenGUI(player, guiID, inventory, container);
 +
</source>
  
 また、ModLoaderを継承参照している定義ModLoaderMpに修正します。<br />
+
player:GUIを開こうとしているPlayer<br />
  <pre>
+
guiID:対象GUIのID<br />
   public class mod_*** extends BaseMod
+
inventory:編集対象のinventory<br />
  </pre>
+
container:使用しているSlotのインターフェイス<br />
  
   これを<br />
+
2.Client側に設定処理を追加します。<br />
 +
大体の場合mod_***
 +
<source lang="java">
 +
ModLoaderMp.registerGUI(this, guiID);
 +
</source>
 +
また、メソッドを追加します。
 +
<source lang="java">
 +
public GuiScreen HandleGUI(int inventoryType)
 +
{
 +
   if(inventoryType == guiID)
 +
    return new Gui***(args);
 +
  else return null;
 +
}
 +
</source>
 +
Gui***には追加GuiのClass名を指定してください。<br />
 +
argsはGUIの引数の場所<br />
 +
ModLoader.getMinecraftinstance().thePlayer ←これ使うと楽かもしれない。<br />
  
  <pre>
+
==Mobを追加する場合==
   public class mod_*** extends BaseModMp
+
※そこまで詳しくないので詳しい人お願いします。<br />
    </pre>
+
以下1または2をClientとServer両方に追加します。(EntityIDは一緒にすること)<br />
  
  に修正する。<br />
+
1.以下行を追加します。
 ②アイテムを追加する場合<br />
+
<source lang="java">
  基本はmod_***に定義されているはずですが、loadメソッド内に以下も付け加えます。<br />
+
ModLoader.registerEntityID(Entity***.class, "EntityName", ModLoader.getUniqueEntiityID());
  Client側:<br />
+
</source> 
  <pre>
+
Entity***:対象MobのEntityのclassファイルを指定<br />
   ModLoaderMp.registerNetClientHandlerEntity(Entity***.clas, netID);
+
"EntityName":対象Mobの名前<br />
  </pre>
+
ModLoader.getUniqueEntityID:空いてるEntityIDから取得する<br />
  
  Server側:<br />
+
2.上記よりこっちのがオススメかもしれません。
  <pre>
+
<source lang="java">
   ModLoaderMp.registerEntityTrackerEntry(Entity***.class, netID);
+
ModLoader.registerEntityID(Entity***.class, "EntityName", ID);
      ModLoaderMp.registerEntityTracker(Entity***.class, 160, 5);
+
</source>
    </pre>
+
ID部分はClient,Server共に同じEntityIDを指定して下さい。<br />
 +
※EntityIDは0~128までです。<br />
  
    ※netIDは0~256の中で指定すること。<br />
+
==リコンパイル・検証作業==
  <br />
+
1.Server側にModel,Render系のclassは必要ありません。描画するわけじゃないので<br />
 ②Guiを追加してる場合<br />
 
 ③Modを追加する場合<br />
 
<br />
 
Step4<br />
 
 まず、Server側にModel,Render系のclassは必要ありません。<br />
 
 描画するわけじゃないので<br />
 
 
 また、ModLoader.addNameやAddRenderも必要ありません。表示させるわけじゃないですので。<br />
 
 また、ModLoader.addNameやAddRenderも必要ありません。表示させるわけじゃないですので。<br />
 ここまで出来て文法エラーがない場合、リコンパイルして実行してみましょう。<br />
+
 
 +
2.ここまで出来て文法エラーがない場合、リコンパイルして実行してみましょう。<br />
 
 あとは調整するのみです。<br />
 
 あとは調整するのみです。<br />
  
 
 参考資料:http://www.minecraftforum.net/topic/352121-smp-mods-modloadermp-modding-310511/ <br />
 
 参考資料:http://www.minecraftforum.net/topic/352121-smp-mods-modloadermp-modding-310511/ <br />
 +
 +
<comments />
 +
----
 +
* Ver1.2.5のコメントアウト部分を追加、太字表示、以前のバージョンの表記にばらつきがあったのを編集しました --[[利用者:@空|@空]] 2012年6月1日 (金) 19:42 (JST)
 +
----
 +
* ↓ミス。末尾に「 &#x7d; 」を入れるようです --[[特別:投稿記録/114.158.39.109|114.158.39.109]] 2012年4月13日 (金) 00:18 (JST)
 +
----
 +
* 1.2.5 v1 でMinecraftServer.javaは520-555をコメントアウト、末尾に&#x7d;&#x5d; --[[特別:投稿記録/114.158.39.109|114.158.39.109]] 2012年4月13日 (金) 00:15 (JST)
 +
----
 +
* ↓修正ありがとうございました。 とても分かりやすくなりました! --[[特別:投稿記録/59.156.113.141|59.156.113.141]] 2012年3月22日 (木) 17:38 (JST)
 +
----
 +
* 一度decompileに失敗(厳密に言うとdecompileは成功している)してから~の部分、間違ってる文章に編集されていたので、修正しておきました。 --[[利用者:Nagisawa|Nagisawa]] 2012年3月22日 (木) 16:36 (JST)
 +
----
 +
* ↓親階層からに修正しておきますた。後コメントアウト対象がわかりやすいよう一応一部ソースをコピーしておきました。 --[[利用者:Nagisawa|Nagisawa]] 2012年3月22日 (木) 16:24 (JST)
 +
----
 +
* ↓誤爆。『また、/MCPフォルダ/serc/minecraft_server...と親階層を明記・・・』のsercはsrcです。 すみません。 --[[特別:投稿記録/59.156.113.141|59.156.113.141]] 2012年3月22日 (木) 16:12 (JST)
 +
----
 +
* エラー修正の項目に「/minecraft_server/net/minecraft/serverのMinecraftServer.java」とありますが、これは一度decompileに失敗(厳密に言うとdecompileは成功している)してからじゃないと出現しません。また、/MCPフォルダ/serc/minecraft_server...と親階層を明記したほうがわかりやすいと思います。 --[[特別:投稿記録/59.156.113.141|59.156.113.141]] 2012年3月22日 (木) 16:11 (JST)
 +
----
 +
* SDK ModLoaderMP v3 を導入したはずですが、コメントアウトした箇所が違います。それぞれの2行上(515, 523-551)をコメントアウトしました。 行がずれることがあるようですね --[[特別:投稿記録/59.156.113.141|59.156.113.141]] 2012年3月22日 (木) 16:09 (JST)
 +
----
 +
* Midoriliさん>SDK氏と言われるとGun'sMOD系と勘違いしました。すみません。 --[[利用者:Nagisawa|Nagisawa]] 2012年3月19日 (月) 11:14 (JST)
 +
----
 +
* Nagisawaさん>すみません。どのModLoaderMPでの話かわからない、という意味で書いたのですが・・・。とりあえず自分の環境でのSDK ModLoaderMPv3の導入方法を記述しました。 --[[利用者:Midorili|Midorili]] 2012年3月19日 (月) 06:20 (JST)
 +
----
 +
* Midoriliさん>えっと、勘違いされると困るのですが、最低限部分の変更なのでそのとおりにやってもエラーが出るものは出ます。 --[[利用者:Nagisawa|Nagisawa]] 2012年3月18日 (日) 23:49 (JST)
 +
----
 +
* ModLoaderMPのページの通りにエラーの修正を行いましたがエラーが修正されませんでした。導入したのはSDK氏作のv3です。 --[[利用者:Midorili|Midorili]] 2012年3月18日 (日) 23:38 (JST)

2021年10月10日 (日) 09:50時点における最新版

ModLoaderMPとは、マインクラフトのSMP(マルチのこと)に対応させるためのMOD作成・導入補助用のMODです。
基本は、ModLoaderに付随して+α機能が付いていると認識されたほうがいいかもしれません。
前提Modの導入方法は割愛します。

※別製作者のSSPMODをSMPにする場合はきちんと製作者のライセンスを見てからやってください。  コレすごく大事

※前提としてModLodaerとMCPの利用が可能なこととします。

※1.2.3からは「元々ModLoaderMpを開発されていたSDK氏が復活しています。」
 また、MinecraftForge側もSDK氏作成のModLoaderMPを参照しているため
 1.2.3はSDK氏のModLoaderMPを推奨します。(以前のバージョンは除きます)


環境構築[編集]

事前準備[編集]

1.MCPフォルダの「Jar」フォルダにminecraft_sever.jarをコピーする。
2.minecraft_server.jarにModLoaderMP(Server版)を導入する。
3.同「Jar」フォルダにクライアント側の「bin」「resources」フォルダをコピーする。
4.のクライアント側のminecraft.jarには必ずクライアント用ModLoader、ModLoaderMPを導入しておきます。

エラーの修正[編集]

MCPの「decompile.bat」を実行します。
エラーが発生しますが、Decompileには成功しています。
このままコンパイルするとエラーが発生しますので
MCPROOT/src/minecraft_server/net/minecraft/serverのMinecraftServer.javaを編集します。

SDK ModLoaderMP v3の場合[編集]

517行目をコメントアウト
534行目から553行目までをコメントアウト
行数がずれている場合があるので、対象ソースの一部を記載しておきます。 run()メソッドの

finally
            {
                System.exit(0);
            }/*

            break MISSING_BLOCK_LABEL_350;
        }

        try
        {
            stopServer();
            serverStopped = true;
        }
        catch (Throwable throwable)
        {
            throwable.printStackTrace();
        }
        finally
        {
            System.exit(0);
        }

        break MISSING_BLOCK_LABEL_350;
        Exception exception2;
        exception2;

        try
        {
            stopServer();
            serverStopped = true;
        }
        catch (Throwable throwable3)
        {
            throwable3.printStackTrace();
        }
        finally
        {
            System.exit(0);
        }


        throw exception2;
        */
        }
    }

コメントアウトしてある部分が対象です。

Flan ModLoaderMPの場合[編集]

Ver1.2.5の場合:519~555行目をコメントアウト
Ver1.2.3の場合:515~551行目をコメントアウト
Ver1.1.0の場合:400~431行目をコメントアウト
Ver1.0.1の場合: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/ 


自分のコメントを追加
Minecraft Modding Wikiはすべてのコメントを歓迎します。匿名で投稿したくない場合は、アカウント作成またはログインしてください。無料です。


  • Ver1.2.5のコメントアウト部分を追加、太字表示、以前のバージョンの表記にばらつきがあったのを編集しました --@空 2012年6月1日 (金) 19:42 (JST)

  • ↓ミス。末尾に「 } 」を入れるようです --114.158.39.109 2012年4月13日 (金) 00:18 (JST)

  • 1.2.5 v1 でMinecraftServer.javaは520-555をコメントアウト、末尾に}] --114.158.39.109 2012年4月13日 (金) 00:15 (JST)

  • ↓修正ありがとうございました。 とても分かりやすくなりました! --59.156.113.141 2012年3月22日 (木) 17:38 (JST)

  • 一度decompileに失敗(厳密に言うとdecompileは成功している)してから~の部分、間違ってる文章に編集されていたので、修正しておきました。 --Nagisawa 2012年3月22日 (木) 16:36 (JST)

  • ↓親階層からに修正しておきますた。後コメントアウト対象がわかりやすいよう一応一部ソースをコピーしておきました。 --Nagisawa 2012年3月22日 (木) 16:24 (JST)

  • ↓誤爆。『また、/MCPフォルダ/serc/minecraft_server...と親階層を明記・・・』のsercはsrcです。 すみません。 --59.156.113.141 2012年3月22日 (木) 16:12 (JST)

  • エラー修正の項目に「/minecraft_server/net/minecraft/serverのMinecraftServer.java」とありますが、これは一度decompileに失敗(厳密に言うとdecompileは成功している)してからじゃないと出現しません。また、/MCPフォルダ/serc/minecraft_server...と親階層を明記したほうがわかりやすいと思います。 --59.156.113.141 2012年3月22日 (木) 16:11 (JST)

  • SDK ModLoaderMP v3 を導入したはずですが、コメントアウトした箇所が違います。それぞれの2行上(515, 523-551)をコメントアウトしました。 行がずれることがあるようですね --59.156.113.141 2012年3月22日 (木) 16:09 (JST)

  • 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)