(Block,Item追加の場合に不備があったので追記) |
(SyntaxHighlight使用で編集) |
||
47行目: | 47行目: | ||
2.ModLoaderを継承参照している定義ModLoaderMpに修正します。<br /> | 2.ModLoaderを継承参照している定義ModLoaderMpに修正します。<br /> | ||
− | < | + | <source lang="java"> |
public class mod_*** extends BaseMod | public class mod_*** extends BaseMod | ||
− | </ | + | </source> |
これを<br/> | これを<br/> | ||
− | < | + | <source lang="java"> |
public class mod_*** extends BaseModMp | public class mod_*** extends BaseModMp | ||
− | </ | + | </source> |
に修正する。<br /> | に修正する。<br /> | ||
63行目: | 63行目: | ||
※既存EntityのClassファイルを参照する場合は必要ありません。<br /> | ※既存EntityのClassファイルを参照する場合は必要ありません。<br /> | ||
Client側:<br /> | Client側:<br /> | ||
− | < | + | <source lang="java"> |
ModLoaderMp.registerNetClientHandlerEntity(Entity***.clas, netID); | ModLoaderMp.registerNetClientHandlerEntity(Entity***.clas, netID); | ||
− | </ | + | </source> |
Server側:<br /> | Server側:<br /> | ||
− | < | + | <source lang="java"> |
ModLoaderMp.registerEntityTrackerEntry(Entity***.class, netID); | ModLoaderMp.registerEntityTrackerEntry(Entity***.class, netID); | ||
ModLoaderMp.registerEntityTracker(Entity***.class, 160, 5); | ModLoaderMp.registerEntityTracker(Entity***.class, 160, 5); | ||
− | </ | + | </source> |
※netIDは0~256の中で指定することとし、Client・Serverで共通であること。<br /> | ※netIDは0~256の中で指定することとし、Client・Serverで共通であること。<br /> | ||
86行目: | 86行目: | ||
大体の場合、Entity,TileEntity,BlockGUI設定場所に設定しているはず。 | 大体の場合、Entity,TileEntity,BlockGUI設定場所に設定しているはず。 | ||
− | < | + | <source lang="java"> |
ModLoader.OpenGUI(player, guiID, inventory, container); | ModLoader.OpenGUI(player, guiID, inventory, container); | ||
− | </ | + | </source> |
player:GUIを開こうとしているPlayer<br /> | player:GUIを開こうとしているPlayer<br /> | ||
97行目: | 97行目: | ||
2.Client側に設定処理を追加します。<br /> | 2.Client側に設定処理を追加します。<br /> | ||
大体の場合mod_*** | 大体の場合mod_*** | ||
− | < | + | <source lang="java"> |
ModLoaderMp.registerGUI(this, guiID); | ModLoaderMp.registerGUI(this, guiID); | ||
− | </ | + | </source> |
また、メソッドを追加します。 | また、メソッドを追加します。 | ||
− | < | + | <source lang="java"> |
public GuiScreen HandleGUI(int inventoryType) | public GuiScreen HandleGUI(int inventoryType) | ||
{ | { | ||
108行目: | 108行目: | ||
else return null; | else return null; | ||
} | } | ||
− | </ | + | </source> |
Gui***には追加GuiのClass名を指定してください。<br /> | Gui***には追加GuiのClass名を指定してください。<br /> | ||
argsはGUIの引数の場所<br /> | argsはGUIの引数の場所<br /> | ||
118行目: | 118行目: | ||
1.以下行を追加します。 | 1.以下行を追加します。 | ||
− | < | + | <source lang="java"> |
ModLoader.registerEntityID(Entity***.class, "EntityName", ModLoader.getUniqueEntiityID()); | ModLoader.registerEntityID(Entity***.class, "EntityName", ModLoader.getUniqueEntiityID()); | ||
− | </ | + | </source> |
Entity***:対象MobのEntityのclassファイルを指定<br /> | Entity***:対象MobのEntityのclassファイルを指定<br /> | ||
"EntityName":対象Mobの名前<br /> | "EntityName":対象Mobの名前<br /> | ||
126行目: | 126行目: | ||
2.上記よりこっちのがオススメかもしれません。 | 2.上記よりこっちのがオススメかもしれません。 | ||
− | < | + | <source lang="java"> |
ModLoader.registerEntityID(Entity***.class, "EntityName", ID); | ModLoader.registerEntityID(Entity***.class, "EntityName", ID); | ||
− | </ | + | </source> |
ID部分はClient,Server共に同じEntityIDを指定して下さい。<br /> | ID部分はClient,Server共に同じEntityIDを指定して下さい。<br /> | ||
※EntityIDは0~128までです。<br /> | ※EntityIDは0~128までです。<br /> |
2012年3月16日 (金) 00:22時点における版
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を追加する場合
自作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/