最新版 |
編集中の文章 |
1行目: |
1行目: |
− | ModLoaderMpで使用できるCustumPacketsの設定方法を記載します。{{前提MOD|reqmod="ModLoaderMp"}}<br/> | + | ModLoaderMpで使用できるCustumPacketsの設定方法を記載します。<br/> |
| | | |
| ==カスタムパケットの基本== | | ==カスタムパケットの基本== |
99行目: |
99行目: |
| | | |
| ===HandlePacket=== | | ===HandlePacket=== |
− | Packetを受信した際の処理を行わせるためのメソッドです。<br/> | + | Packetを受信した際の処理を行わせるためのメソッドです。 |
− | サンプルを以下に書いておきます。<br/> | + | サンプルを以下に書いておきます。 |
| | | |
| クライアント側 | | クライアント側 |
133行目: |
133行目: |
| | | |
| ===SendKey=== | | ===SendKey=== |
− | キーボード入力をサーバー側に送信したいときに使うメソッドです。
| |
− | <source lang="java">
| |
− | ModLoaderMp.SendKey(instance, key);
| |
− | </source>
| |
− | instance:クラスファイルでの静的インスタンス<br/>
| |
− | key:キーコードリストを参照してください。<br/>
| |
− | URL:http://lwjgl.org/javadoc/constant-values.html#org.lwjgl.input.Keyboard.EVENT_SIZE
| |
− |
| |
− | 使用例
| |
− | <source lang="java">
| |
− | package net.minecraft.src;
| |
− |
| |
− | public class mod_hogehoge extends BaseModMp{
| |
− | public static mod_hogehoge instance;
| |
− | @Override
| |
− | public String getVersion() {
| |
− | return "";
| |
− | }
| |
− | @Override
| |
− | public void load() {
| |
− | ModLoaderMp.SendKey(instance, 210);
| |
− | }
| |
− | }
| |
− | </source>
| |
− | ただの適当に作ったサンプルですが、<br/>
| |
− | mod_hogehogeをINSERTキー(210がInsertキー)入力時にパケット送信します。<br/>
| |
− |
| |
− | 別として以下のように<br/>
| |
− | <source lang="java">
| |
− | import org.lwjgl.input.Keyboard;
| |
− | </source>
| |
− | JavaのKeyboardクラスを呼び出して
| |
− | <source lang="java">
| |
− | Keyboard.KEY_....
| |
− | </source>
| |
− | で使用も可能です。<br/>
| |
− |
| |
− | サーバー側の受信はHandleSendKeyメソッドを使用します。
| |
− | <source lang="java">
| |
− | public void HandleSendKey(EntityPlayerMp entityplayermp, int key)
| |
− | {
| |
− | }
| |
− | </source>
| |
− | entityplayermpはkeyを押したプレイヤーです。<br/>
| |
− |
| |
− | '''注意'''<br/>
| |
− | このSendKeyメソッドを使う場合は、ユーザーのMinecraftでのキーコンフィグに出て来ませんので<br/>
| |
− | (キー設定変更がユーザーにできないので)注意してください。<br/>
| |
− |
| |
− |
| |
| ===コマンドによるPacket送信処理=== | | ===コマンドによるPacket送信処理=== |
| | | |
− | ModLoaderMpにはOPコマンドやサーバーコンソールコマンドを追加する機能が含まれています。<br/>
| + | 執筆中... |
− | Server側のmod_***クラスに2つメソッドを追加します。<br/>
| |
− | ちなみに筆者は「これを使って作ったことはありません」ので間違ってた場合修正願います。<br/>
| |
− | | |
− | 1.getCommandInfo<br/>
| |
− | 利用可能なコンソールをクライアントのログに記載します。
| |
− | | |
− | <source lang="java">
| |
− | public void GetCommandInfo(ICommandListener icommandlistener)
| |
− | {
| |
− | icommandlistener.log("MpUtils : Op only commands");
| |
− | icommandlistener.log(" i <id> [num] [meta] gives you [num] of <id> with damage [meta]");
| |
− | icommandlistener.log(" heal heals you to full health");
| |
− | icommandlistener.log(" warp <x> <y> <z> moves you to x,y,z");
| |
− | }
| |
− | </source>
| |
− | 上記メソッドを呼び出した場合、<br/>
| |
− | クライアント側にlog("")で設定したテキストが書き出されます。<br/>
| |
− | | |
− | 2.HandleCommand
| |
− | サーバーに送信されるコマンドを制御します。
| |
− | | |
− | <source lang="java">
| |
− | public boolean HandleCommand(String command, String username, Logger logger, boolean isOp)
| |
− | {
| |
− | {
| |
− | }
| |
− | </source>
| |
− | command:入力されるコマンド文字列(上記GetCommandInfoの例でいうと heal)最初の"/"は除かれるので注意<br/>
| |
− | username:其名の通りユーザーの名前(またはコンソール)<br/>
| |
− | Logger:使用されたコマンドのメッセージを他のプレイヤーに伝える文章<br/>
| |
− | isOp:Op権限を有してるかどうか判定<br/>
| |
− | | |
− | 送られたコマンドを検出・処理する方法として
| |
− | <source lang="java">
| |
− | if(command.toLowerCase().startsWith("command "))
| |
− | {
| |
− | </source>
| |
− | で判定しifの中に処理内容を書くといいと思います。
| |
− | | |
− | また、ほとんどのコマンドが複数の引数を取るので、<br/>
| |
− | コマンドの文字列を分割する必要があります。<br/>
| |
− | 下記サンプルではスペースで分割し長さを判定します。<br/>
| |
− | コマンドが間違ってた場合Falseを返す形になります。<br/>
| |
− | <source lang="java">
| |
− | String commandSplit[] = command.split(" ");
| |
− | if(commandSplit.length != 2)
| |
− | {
| |
− | return false;
| |
− | }
| |
− | </source>
| |
− | 1行目でスペース分割<br/>
| |
− | 2行目のifで分割した文字列の長さを判定<br/>
| |
− | おかしかったら return false<br/>
| |
− | | |
− | 次に文字列配列のcomandSplit[]を使用します。<br/>
| |
− | コマンドはエラーが発生した場合、下記メソッドを使用する必要があります。
| |
− | <source lang="java">
| |
− | logger.fine((new StringBuilder()).append("There's no item with id ").append(itemID).toString());
| |
− | </source>
| |
− | StringBuilderは"There's no item with id "を受け取り、<br/>
| |
− | (commandSplitから取得した)ItemIDをつけて送ります。<br/>
| |
− | toString()を末尾に忘れると、文字列にならないので注意<br/>
| |
− | | |
− | 正常にコマンドが実行された場合はTrueを返してOPに通知させます。
| |
− | <source lang="java">
| |
− | ModLoaderMp.sendChatToOps(username, (new StringBuilder()).append("Giving ").append(player.username).append(" some ").append(itemID).toString());
| |
− | </source>
| |
− | 上記はGiveコマンドを想定したOPへの通知内容です。<br/>
| |
− | | |
− | また、コマンド作成に使えると思われるメソッドが<br/>
| |
− | hasClientSide()
| |
− | です。
| |
− | <source lang="java">
| |
− | public boolean hasClientSide()
| |
− | {
| |
− | return false;
| |
− | }
| |
− | </source>
| |
− | | |
− | 参考:http://www.minecraftforum.net/topic/352121-smp-mods-modloadermp-modding-310511/
| |
− | | |
− | <comments />
| |
− | ----
| |
− | * ModLoaderMp.SendPacketを使い、左クリックすると変数に値が入るようにして、そのデータを送る形にすればいいかと思います。 --[[利用者:Nagisawa|Nagisawa]] 2012年4月11日 (水) 13:38 (JST)
| |
− | ----
| |
− | * sendkeyのかわりにマウスのクリックを送信するにはどうすればいいでしょうか? --[[特別:投稿記録/221.170.40.37|221.170.40.37]] 2012年4月11日 (水) 00:27 (JST)
| |