提供: Minecraft Modding Wiki
2012年3月16日 (金) 00:49時点におけるNagisawa (トーク | 投稿記録)による版 (HandlePacketまで更新)
移動先: 案内検索

ModLoaderMpで使用できるCustumPacketsの設定方法を記載します。

カスタムパケットの基本

送付できるPacketの種類

1.int型
2.float型
3.String型

Ex:以下のように設定します。

float[] dataFloat = new float[numberOfFloats];
dataFloat[0] = xxxx;
dataFloat[1] = yyyy;
....

int[] dataInt = new int[numberOfInts];
dataInt[0] = zzzz;
dataInt[1] = bbbb;
....

String[] dataString = new loat[numberOfStrings];
dataString[0] = aaaa;
dataString[1] = cccc;
....

インターフェイスを実装する

ISpawnableインターフェイスを実装します。
Ex:

public class ClassName extends Entity implements ISpawnable {

上記はClassNameクラスにEntityクラスを継承してISpawnableインターフェイスを実装しています。

ISpawnableインターフェイスを実装した後、
Server側でgetSpawnPacketメソッドを追加した場合の例

public Packet230ModLoader getSpawnPacket()
{
    Packet230ModLoader packet = new Packet230ModLoader();
  packet.packetType = 0;    
    packet.dataInt = new int[1];
    packet.dataInt[0] = entityColor;
    packet.dataFloat = new float[2];
    packet.dataFloat[0] = (float)posX;
    packet.dataFloat[1] = posY;
    packet.dataString = new String;
    packet.dataString[0] = dataString;
    return packet;
}

packetType = 0:アップデートフラグとして
packetType = 1:送信フラグとして
※言葉が書きづらい・・・。もっとわかりやすく書ける方お願いします。

Packetの送信方法

ModLoaderMp.SendPacket

使用方法は基本同じなので、まとめてあります。
1.ModLoaderMp.SendPacket
 クライアントからサーバー側へデータを送るために使用するメソッドです。
 ModloaderMp.SendPacket(this, packet) 
   this:送付データ 
   packet:送付時に使用するclass 

2.ModLoaderMp.SendPacketTo
 サーバーからクライアント側へデータを送るために使用するメソッドです。
 ModLoaderMp.SendPacketTo(this, player, packet) 
   this:送付データ 
   player:送付先のEntity 
   packet:送付時に使用するclass 

3.ModLoaderMp.SendPacketAll
 サーバーからクライアント側へデータを送るために使用するメソッドです。
 ModLoderMp.SendPacketAll(this, packet) 
   this:送付データ 
   packet:送付時に使用するclass 

使用例

public void sendInthoge(EntityPlayerMP entityPlayerMp, int inthoge)
{
   if(entityPlayerMp.ridingEntity instanceof Entity)
   {
      int[] dataInt = new int[1];
      dataInt[0] = inthoge;
                    
      Packet230ModLoader packet = new Packet230ModLoader();
      packet.packetType = 0;
      packet.dataInt = dataInt;
      ModLoaderMp.SendPacketTo(this, entityPlayerMp, packet);
   }
}

上記では、sendInthogeメソッドが呼び出された場合、
entityPlayerMp.ridingEntityがEntityをクラスを実装していればTrueとして(←ここは特に関係ない)
dataInt[0]にinthogeを格納し、ModLoaderMp.SendPacketToにてデータを対象クライアントに送付してます。

やっぱり書きづらい。もっとわかりやすく書ける方お願いします。

HandlePacket

Packetを受信した際の処理を行わせるためのメソッドです。 サンプルを以下に書いておきます。

クライアント側

public void HandlePacket(Packet230ModLoader packet)
{
   switch(packet.packetType)
   {
      case 0:
      {
          //ここに処理内容を書く
     //packet.dataint[0]とか
      }
   }
}

サーバー側

public void HandlePacket(Packet230ModLoader packet, EntityPlayerMp player)
{
   switch(packet.packetType)
   {
      case 0:
      {
          //ここに処理内容を書く
     //packet.dataint[0]とか、playerに対する処理とか
      }
   }
}

SendKey

キーボード入力をサーバー側に送信したいときに使うメソッドです。

ModLoaderMp.SendKey(instance, key);

instance:クラスファイルでの静的インスタンス key:キーコードリストを参照してください。  URL:http://lwjgl.org/javadoc/constant-values.html#org.lwjgl.input.Keyboard.EVENT_SIZE

使用例

public class mod_hoge extends BaseModMp
{
public statice mod_hoge instance;

 public sethogeKey();
  {
    ModLoaderMp.SendKey(instance,key);
  }

}

↑サンプル執筆中

コマンドによるPacket送信処理

執筆中...