提供: Minecraft Modding Wiki
移動先: 案内検索
(SendKeyメソッドまで加筆)
138行目: 138行目:
 
</source>
 
</source>
 
instance:クラスファイルでの静的インスタンス
 
instance:クラスファイルでの静的インスタンス
key:キーコードリストを参照してください。
+
key:キーコードリストを参照してください。<br/>
 
 URL:http://lwjgl.org/javadoc/constant-values.html#org.lwjgl.input.Keyboard.EVENT_SIZE
 
 URL:http://lwjgl.org/javadoc/constant-values.html#org.lwjgl.input.Keyboard.EVENT_SIZE
  
 
使用例
 
使用例
 
<source lang="java">
 
<source lang="java">
public class mod_hoge extends BaseModMp
+
package net.minecraft.src;
{
+
 
public statice mod_hoge instance;
+
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>
 +
ただの適当に作ったサンプルですが、
 +
mod_hogehogeをINSERTキー(210がInsertキー)入力時にパケット送信します。
  
 public sethogeKey();
+
別として以下のように
  {
+
<source lang="java">
    ModLoaderMp.SendKey(instance,key);
+
import org.lwjgl.input.Keyboard;
  }
+
</source>
 +
JavaのKeyboardクラスを呼び出して
 +
<source lang="java">
 +
Keyboard.KEY_....
 +
</source>
 +
で使用も可能です。
  
 +
サーバー側の受信はHandleSendKeyメソッドを使用します。
 +
<source lang="java">
 +
public void HandleSendKey(EntityPlayerMp entityplayermp, int key)
 +
{
 
}
 
}
 
</source>
 
</source>
 +
entityplayermpはkeyを押したプレイヤーです。
 +
 +
'''注意'''
 +
このSendKeyメソッドを使う場合は
 +
ユーザーのMinecraftでのキーコンフィグに出て来ませんので
 +
(キー設定変更がユーザーにできないので)
 +
注意してください。
 +
  
↑サンプル執筆中
 
 
===コマンドによるPacket送信処理===
 
===コマンドによるPacket送信処理===
  
 
執筆中...
 
執筆中...

2012年3月17日 (土) 10:16時点における版

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

この記事は"ModLoaderMp"を前提MODとしています。


カスタムパケットの基本

送付できる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

使用例

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);
	}
}

ただの適当に作ったサンプルですが、 mod_hogehogeをINSERTキー(210がInsertキー)入力時にパケット送信します。

別として以下のように

import org.lwjgl.input.Keyboard;

JavaのKeyboardクラスを呼び出して

Keyboard.KEY_....

で使用も可能です。

サーバー側の受信はHandleSendKeyメソッドを使用します。

public void HandleSendKey(EntityPlayerMp entityplayermp, int key)
{
}

entityplayermpはkeyを押したプレイヤーです。

注意 このSendKeyメソッドを使う場合は ユーザーのMinecraftでのキーコンフィグに出て来ませんので (キー設定変更がユーザーにできないので) 注意してください。


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

執筆中...