提供: Minecraft Modding Wiki
移動先: 案内検索

警告: ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。ログインまたはアカウントを作成すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 編集中の文章
1行目: 1行目:
ModLoaderMpで使用できるCustumPacketsの設定方法を記載します。{{前提MOD|reqmod="ModLoaderMp"}}<br/>
+
ModLoaderMpで使用できるCustumPacketsの設定方法を記載します。<br/>
  
 
==カスタムパケットの基本==
 
==カスタムパケットの基本==
8行目: 8行目:
  
 
Ex:以下のように設定します。<br/>
 
Ex:以下のように設定します。<br/>
<source lang="java">
+
<pre>
 
float[] dataFloat = new float[numberOfFloats];
 
float[] dataFloat = new float[numberOfFloats];
 
dataFloat[0] = xxxx;
 
dataFloat[0] = xxxx;
23行目: 23行目:
 
dataString[1] = cccc;
 
dataString[1] = cccc;
 
....
 
....
</source>
+
</pre>
  
 
===インターフェイスを実装する===
 
===インターフェイスを実装する===
 
ISpawnableインターフェイスを実装します。<br/>
 
ISpawnableインターフェイスを実装します。<br/>
 
Ex:
 
Ex:
<source lang="java">
+
<pre>
 
public class ClassName extends Entity implements ISpawnable {
 
public class ClassName extends Entity implements ISpawnable {
</source>
+
</pre>
 
上記はClassNameクラスにEntityクラスを継承してISpawnableインターフェイスを実装しています。<br/>
 
上記はClassNameクラスにEntityクラスを継承してISpawnableインターフェイスを実装しています。<br/>
 
<br/>
 
<br/>
 
ISpawnableインターフェイスを実装した後、<br/>
 
ISpawnableインターフェイスを実装した後、<br/>
 
Server側でgetSpawnPacketメソッドを追加した場合の例
 
Server側でgetSpawnPacketメソッドを追加した場合の例
<source lang="java">
+
<pre>
 
public Packet230ModLoader getSpawnPacket()
 
public Packet230ModLoader getSpawnPacket()
 
{
 
{
49行目: 49行目:
 
     return packet;
 
     return packet;
 
}
 
}
</source>
+
</pre>
 
packetType = 0:アップデートフラグとして<br/>
 
packetType = 0:アップデートフラグとして<br/>
 
packetType = 1:送信フラグとして<br/>
 
packetType = 1:送信フラグとして<br/>
77行目: 77行目:
 
<br/>
 
<br/>
 
使用例
 
使用例
<source lang="java">
+
<pre>
 
public void sendInthoge(EntityPlayerMP entityPlayerMp, int inthoge)
 
public void sendInthoge(EntityPlayerMP entityPlayerMp, int inthoge)
 
{
 
{
91行目: 91行目:
 
   }
 
   }
 
}
 
}
</source>
+
</pre>
 
上記では、sendInthogeメソッドが呼び出された場合、<br/>
 
上記では、sendInthogeメソッドが呼び出された場合、<br/>
 
entityPlayerMp.ridingEntityがEntityをクラスを実装していればTrueとして(←ここは特に関係ない)<br/>
 
entityPlayerMp.ridingEntityがEntityをクラスを実装していればTrueとして(←ここは特に関係ない)<br/>
99行目: 99行目:
  
 
===HandlePacket===
 
===HandlePacket===
Packetを受信した際の処理を行わせるためのメソッドです。<br/>
 
サンプルを以下に書いておきます。<br/>
 
 
クライアント側
 
<source lang="java">
 
public void HandlePacket(Packet230ModLoader packet)
 
{
 
  switch(packet.packetType)
 
  {
 
      case 0:
 
      {
 
          //ここに処理内容を書く
 
     //packet.dataint[0]とか
 
      }
 
  }
 
}
 
</source>
 
 
サーバー側
 
<source lang="java">
 
public void HandlePacket(Packet230ModLoader packet, EntityPlayerMp player)
 
{
 
  switch(packet.packetType)
 
  {
 
      case 0:
 
      {
 
          //ここに処理内容を書く
 
     //packet.dataint[0]とか、playerに対する処理とか
 
      }
 
  }
 
}
 
</source>
 
 
 
===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)
 

Minecraft Modding Wikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細はMinecraft Modding Wiki:著作権を参照)。 著作権保護されている作品は、許諾なしに投稿しないでください!

このページを編集するには、下記の確認用の質問に回答してください (詳細):

取り消し 編集の仕方 (新しいウィンドウで開きます)

このページで使用されているテンプレート: