custom parser flow for block messages
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit

This commit is contained in:
austin 2025-05-26 11:06:33 -04:00
parent accf7d32b8
commit bb48ca0663
14 changed files with 242 additions and 178 deletions

View File

@ -4,9 +4,13 @@ import electrosphere.engine.Globals;
import electrosphere.logger.LoggerInterface; import electrosphere.logger.LoggerInterface;
import electrosphere.net.parser.net.message.NetworkMessage; import electrosphere.net.parser.net.message.NetworkMessage;
import electrosphere.net.parser.net.message.ServerMessage; import electrosphere.net.parser.net.message.ServerMessage;
import electrosphere.net.parser.net.message.TerrainMessage;
import electrosphere.net.parser.net.message.TypeBytes;
import electrosphere.net.parser.net.message.NetworkMessage.MessageType; import electrosphere.net.parser.net.message.NetworkMessage.MessageType;
import electrosphere.net.parser.net.message.ServerMessage.ServerMessageType; import electrosphere.net.parser.net.message.ServerMessage.ServerMessageType;
import electrosphere.net.parser.net.raw.NetworkParser; import electrosphere.net.parser.net.raw.NetworkParser;
import electrosphere.net.parser.util.ByteStreamUtils;
import io.github.studiorailgun.CircularByteBuffer;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
@ -167,6 +171,18 @@ public class ClientNetworking implements Runnable {
//create parser //create parser
parser = new NetworkParser(inputStream,outputStream); parser = new NetworkParser(inputStream,outputStream);
//
//register custom message parsers
parser.registerCustomParser(TypeBytes.MESSAGE_TYPE_TERRAIN, TypeBytes.TERRAIN_MESSAGE_TYPE_SENDREDUCEDBLOCKDATA, (NetworkMessage message, CircularByteBuffer buff) -> {
TerrainMessage castMessage = (TerrainMessage)message;
castMessage.setworldX(ByteStreamUtils.popIntFromByteQueue(buff));
castMessage.setworldY(ByteStreamUtils.popIntFromByteQueue(buff));
castMessage.setworldZ(ByteStreamUtils.popIntFromByteQueue(buff));
castMessage.setchunkResolution(ByteStreamUtils.popIntFromByteQueue(buff));
castMessage.sethomogenousValue(ByteStreamUtils.popIntFromByteQueue(buff));
castMessage.setchunkData(ByteStreamUtils.popByteArrayFromByteQueue(buff));
});

View File

@ -7,6 +7,9 @@ import electrosphere.net.parser.util.ByteStreamUtils;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
public class AuthMessage extends NetworkMessage { public class AuthMessage extends NetworkMessage {
/** /**
@ -117,7 +120,7 @@ public class AuthMessage extends NetworkMessage {
/** /**
* Parses a message of type AuthRequest * Parses a message of type AuthRequest
*/ */
public static AuthMessage parseAuthRequestMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static AuthMessage parseAuthRequestMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
AuthMessage rVal = (AuthMessage)pool.get(MessageType.AUTH_MESSAGE); AuthMessage rVal = (AuthMessage)pool.get(MessageType.AUTH_MESSAGE);
rVal.messageType = AuthMessageType.AUTHREQUEST; rVal.messageType = AuthMessageType.AUTHREQUEST;
AuthMessage.stripPacketHeader(byteBuffer); AuthMessage.stripPacketHeader(byteBuffer);
@ -170,7 +173,7 @@ public class AuthMessage extends NetworkMessage {
/** /**
* Parses a message of type AuthDetails * Parses a message of type AuthDetails
*/ */
public static AuthMessage parseAuthDetailsMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static AuthMessage parseAuthDetailsMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
AuthMessage rVal = (AuthMessage)pool.get(MessageType.AUTH_MESSAGE); AuthMessage rVal = (AuthMessage)pool.get(MessageType.AUTH_MESSAGE);
rVal.messageType = AuthMessageType.AUTHDETAILS; rVal.messageType = AuthMessageType.AUTHDETAILS;
AuthMessage.stripPacketHeader(byteBuffer); AuthMessage.stripPacketHeader(byteBuffer);
@ -192,7 +195,7 @@ public class AuthMessage extends NetworkMessage {
/** /**
* Parses a message of type AuthSuccess * Parses a message of type AuthSuccess
*/ */
public static AuthMessage parseAuthSuccessMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static AuthMessage parseAuthSuccessMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
AuthMessage rVal = (AuthMessage)pool.get(MessageType.AUTH_MESSAGE); AuthMessage rVal = (AuthMessage)pool.get(MessageType.AUTH_MESSAGE);
rVal.messageType = AuthMessageType.AUTHSUCCESS; rVal.messageType = AuthMessageType.AUTHSUCCESS;
AuthMessage.stripPacketHeader(byteBuffer); AuthMessage.stripPacketHeader(byteBuffer);
@ -210,7 +213,7 @@ public class AuthMessage extends NetworkMessage {
/** /**
* Parses a message of type AuthFailure * Parses a message of type AuthFailure
*/ */
public static AuthMessage parseAuthFailureMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static AuthMessage parseAuthFailureMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
AuthMessage rVal = (AuthMessage)pool.get(MessageType.AUTH_MESSAGE); AuthMessage rVal = (AuthMessage)pool.get(MessageType.AUTH_MESSAGE);
rVal.messageType = AuthMessageType.AUTHFAILURE; rVal.messageType = AuthMessageType.AUTHFAILURE;
AuthMessage.stripPacketHeader(byteBuffer); AuthMessage.stripPacketHeader(byteBuffer);

View File

@ -7,6 +7,9 @@ import electrosphere.net.parser.util.ByteStreamUtils;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
public class CharacterMessage extends NetworkMessage { public class CharacterMessage extends NetworkMessage {
/** /**
@ -118,7 +121,7 @@ public class CharacterMessage extends NetworkMessage {
/** /**
* Parses a message of type RequestCharacterList * Parses a message of type RequestCharacterList
*/ */
public static CharacterMessage parseRequestCharacterListMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static CharacterMessage parseRequestCharacterListMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
CharacterMessage rVal = (CharacterMessage)pool.get(MessageType.CHARACTER_MESSAGE); CharacterMessage rVal = (CharacterMessage)pool.get(MessageType.CHARACTER_MESSAGE);
rVal.messageType = CharacterMessageType.REQUESTCHARACTERLIST; rVal.messageType = CharacterMessageType.REQUESTCHARACTERLIST;
CharacterMessage.stripPacketHeader(byteBuffer); CharacterMessage.stripPacketHeader(byteBuffer);
@ -158,7 +161,7 @@ public class CharacterMessage extends NetworkMessage {
/** /**
* Parses a message of type ResponseCharacterList * Parses a message of type ResponseCharacterList
*/ */
public static CharacterMessage parseResponseCharacterListMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static CharacterMessage parseResponseCharacterListMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
CharacterMessage rVal = (CharacterMessage)pool.get(MessageType.CHARACTER_MESSAGE); CharacterMessage rVal = (CharacterMessage)pool.get(MessageType.CHARACTER_MESSAGE);
rVal.messageType = CharacterMessageType.RESPONSECHARACTERLIST; rVal.messageType = CharacterMessageType.RESPONSECHARACTERLIST;
CharacterMessage.stripPacketHeader(byteBuffer); CharacterMessage.stripPacketHeader(byteBuffer);
@ -200,7 +203,7 @@ public class CharacterMessage extends NetworkMessage {
/** /**
* Parses a message of type RequestCreateCharacter * Parses a message of type RequestCreateCharacter
*/ */
public static CharacterMessage parseRequestCreateCharacterMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static CharacterMessage parseRequestCreateCharacterMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
CharacterMessage rVal = (CharacterMessage)pool.get(MessageType.CHARACTER_MESSAGE); CharacterMessage rVal = (CharacterMessage)pool.get(MessageType.CHARACTER_MESSAGE);
rVal.messageType = CharacterMessageType.REQUESTCREATECHARACTER; rVal.messageType = CharacterMessageType.REQUESTCREATECHARACTER;
CharacterMessage.stripPacketHeader(byteBuffer); CharacterMessage.stripPacketHeader(byteBuffer);
@ -220,7 +223,7 @@ public class CharacterMessage extends NetworkMessage {
/** /**
* Parses a message of type ResponseCreateCharacterSuccess * Parses a message of type ResponseCreateCharacterSuccess
*/ */
public static CharacterMessage parseResponseCreateCharacterSuccessMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static CharacterMessage parseResponseCreateCharacterSuccessMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
CharacterMessage rVal = (CharacterMessage)pool.get(MessageType.CHARACTER_MESSAGE); CharacterMessage rVal = (CharacterMessage)pool.get(MessageType.CHARACTER_MESSAGE);
rVal.messageType = CharacterMessageType.RESPONSECREATECHARACTERSUCCESS; rVal.messageType = CharacterMessageType.RESPONSECREATECHARACTERSUCCESS;
CharacterMessage.stripPacketHeader(byteBuffer); CharacterMessage.stripPacketHeader(byteBuffer);
@ -238,7 +241,7 @@ public class CharacterMessage extends NetworkMessage {
/** /**
* Parses a message of type ResponseCreateCharacterFailure * Parses a message of type ResponseCreateCharacterFailure
*/ */
public static CharacterMessage parseResponseCreateCharacterFailureMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static CharacterMessage parseResponseCreateCharacterFailureMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
CharacterMessage rVal = (CharacterMessage)pool.get(MessageType.CHARACTER_MESSAGE); CharacterMessage rVal = (CharacterMessage)pool.get(MessageType.CHARACTER_MESSAGE);
rVal.messageType = CharacterMessageType.RESPONSECREATECHARACTERFAILURE; rVal.messageType = CharacterMessageType.RESPONSECREATECHARACTERFAILURE;
CharacterMessage.stripPacketHeader(byteBuffer); CharacterMessage.stripPacketHeader(byteBuffer);
@ -278,7 +281,7 @@ public class CharacterMessage extends NetworkMessage {
/** /**
* Parses a message of type RequestSpawnCharacter * Parses a message of type RequestSpawnCharacter
*/ */
public static CharacterMessage parseRequestSpawnCharacterMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static CharacterMessage parseRequestSpawnCharacterMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
CharacterMessage rVal = (CharacterMessage)pool.get(MessageType.CHARACTER_MESSAGE); CharacterMessage rVal = (CharacterMessage)pool.get(MessageType.CHARACTER_MESSAGE);
rVal.messageType = CharacterMessageType.REQUESTSPAWNCHARACTER; rVal.messageType = CharacterMessageType.REQUESTSPAWNCHARACTER;
CharacterMessage.stripPacketHeader(byteBuffer); CharacterMessage.stripPacketHeader(byteBuffer);
@ -320,7 +323,7 @@ public class CharacterMessage extends NetworkMessage {
/** /**
* Parses a message of type ResponseSpawnCharacter * Parses a message of type ResponseSpawnCharacter
*/ */
public static CharacterMessage parseResponseSpawnCharacterMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static CharacterMessage parseResponseSpawnCharacterMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
CharacterMessage rVal = (CharacterMessage)pool.get(MessageType.CHARACTER_MESSAGE); CharacterMessage rVal = (CharacterMessage)pool.get(MessageType.CHARACTER_MESSAGE);
rVal.messageType = CharacterMessageType.RESPONSESPAWNCHARACTER; rVal.messageType = CharacterMessageType.RESPONSESPAWNCHARACTER;
CharacterMessage.stripPacketHeader(byteBuffer); CharacterMessage.stripPacketHeader(byteBuffer);
@ -340,7 +343,7 @@ public class CharacterMessage extends NetworkMessage {
/** /**
* Parses a message of type EditorSwap * Parses a message of type EditorSwap
*/ */
public static CharacterMessage parseEditorSwapMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static CharacterMessage parseEditorSwapMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
CharacterMessage rVal = (CharacterMessage)pool.get(MessageType.CHARACTER_MESSAGE); CharacterMessage rVal = (CharacterMessage)pool.get(MessageType.CHARACTER_MESSAGE);
rVal.messageType = CharacterMessageType.EDITORSWAP; rVal.messageType = CharacterMessageType.EDITORSWAP;
CharacterMessage.stripPacketHeader(byteBuffer); CharacterMessage.stripPacketHeader(byteBuffer);

View File

@ -7,6 +7,9 @@ import electrosphere.net.parser.util.ByteStreamUtils;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
public class CombatMessage extends NetworkMessage { public class CombatMessage extends NetworkMessage {
/** /**
@ -299,7 +302,7 @@ public class CombatMessage extends NetworkMessage {
/** /**
* Parses a message of type serverReportHitboxCollision * Parses a message of type serverReportHitboxCollision
*/ */
public static CombatMessage parseserverReportHitboxCollisionMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static CombatMessage parseserverReportHitboxCollisionMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
CombatMessage rVal = (CombatMessage)pool.get(MessageType.COMBAT_MESSAGE); CombatMessage rVal = (CombatMessage)pool.get(MessageType.COMBAT_MESSAGE);
rVal.messageType = CombatMessageType.SERVERREPORTHITBOXCOLLISION; rVal.messageType = CombatMessageType.SERVERREPORTHITBOXCOLLISION;
CombatMessage.stripPacketHeader(byteBuffer); CombatMessage.stripPacketHeader(byteBuffer);

View File

@ -7,6 +7,9 @@ import electrosphere.net.parser.util.ByteStreamUtils;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
public class EntityMessage extends NetworkMessage { public class EntityMessage extends NetworkMessage {
/** /**
@ -715,7 +718,7 @@ public class EntityMessage extends NetworkMessage {
/** /**
* Parses a message of type Create * Parses a message of type Create
*/ */
public static EntityMessage parseCreateMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static EntityMessage parseCreateMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE); EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE);
rVal.messageType = EntityMessageType.CREATE; rVal.messageType = EntityMessageType.CREATE;
EntityMessage.stripPacketHeader(byteBuffer); EntityMessage.stripPacketHeader(byteBuffer);
@ -755,7 +758,7 @@ public class EntityMessage extends NetworkMessage {
/** /**
* Parses a message of type moveUpdate * Parses a message of type moveUpdate
*/ */
public static EntityMessage parsemoveUpdateMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static EntityMessage parsemoveUpdateMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE); EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE);
rVal.messageType = EntityMessageType.MOVEUPDATE; rVal.messageType = EntityMessageType.MOVEUPDATE;
EntityMessage.stripPacketHeader(byteBuffer); EntityMessage.stripPacketHeader(byteBuffer);
@ -797,7 +800,7 @@ public class EntityMessage extends NetworkMessage {
/** /**
* Parses a message of type attackUpdate * Parses a message of type attackUpdate
*/ */
public static EntityMessage parseattackUpdateMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static EntityMessage parseattackUpdateMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE); EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE);
rVal.messageType = EntityMessageType.ATTACKUPDATE; rVal.messageType = EntityMessageType.ATTACKUPDATE;
EntityMessage.stripPacketHeader(byteBuffer); EntityMessage.stripPacketHeader(byteBuffer);
@ -835,7 +838,7 @@ public class EntityMessage extends NetworkMessage {
/** /**
* Parses a message of type startAttack * Parses a message of type startAttack
*/ */
public static EntityMessage parsestartAttackMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static EntityMessage parsestartAttackMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE); EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE);
rVal.messageType = EntityMessageType.STARTATTACK; rVal.messageType = EntityMessageType.STARTATTACK;
EntityMessage.stripPacketHeader(byteBuffer); EntityMessage.stripPacketHeader(byteBuffer);
@ -853,7 +856,7 @@ public class EntityMessage extends NetworkMessage {
/** /**
* Parses a message of type Kill * Parses a message of type Kill
*/ */
public static EntityMessage parseKillMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static EntityMessage parseKillMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE); EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE);
rVal.messageType = EntityMessageType.KILL; rVal.messageType = EntityMessageType.KILL;
EntityMessage.stripPacketHeader(byteBuffer); EntityMessage.stripPacketHeader(byteBuffer);
@ -875,7 +878,7 @@ public class EntityMessage extends NetworkMessage {
/** /**
* Parses a message of type Destroy * Parses a message of type Destroy
*/ */
public static EntityMessage parseDestroyMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static EntityMessage parseDestroyMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE); EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE);
rVal.messageType = EntityMessageType.DESTROY; rVal.messageType = EntityMessageType.DESTROY;
EntityMessage.stripPacketHeader(byteBuffer); EntityMessage.stripPacketHeader(byteBuffer);
@ -895,7 +898,7 @@ public class EntityMessage extends NetworkMessage {
/** /**
* Parses a message of type setProperty * Parses a message of type setProperty
*/ */
public static EntityMessage parsesetPropertyMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static EntityMessage parsesetPropertyMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE); EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE);
rVal.messageType = EntityMessageType.SETPROPERTY; rVal.messageType = EntityMessageType.SETPROPERTY;
EntityMessage.stripPacketHeader(byteBuffer); EntityMessage.stripPacketHeader(byteBuffer);
@ -949,7 +952,7 @@ public class EntityMessage extends NetworkMessage {
/** /**
* Parses a message of type attachEntityToEntity * Parses a message of type attachEntityToEntity
*/ */
public static EntityMessage parseattachEntityToEntityMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static EntityMessage parseattachEntityToEntityMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE); EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE);
rVal.messageType = EntityMessageType.ATTACHENTITYTOENTITY; rVal.messageType = EntityMessageType.ATTACHENTITYTOENTITY;
EntityMessage.stripPacketHeader(byteBuffer); EntityMessage.stripPacketHeader(byteBuffer);
@ -973,7 +976,7 @@ public class EntityMessage extends NetworkMessage {
/** /**
* Parses a message of type updateEntityViewDir * Parses a message of type updateEntityViewDir
*/ */
public static EntityMessage parseupdateEntityViewDirMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static EntityMessage parseupdateEntityViewDirMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE); EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE);
rVal.messageType = EntityMessageType.UPDATEENTITYVIEWDIR; rVal.messageType = EntityMessageType.UPDATEENTITYVIEWDIR;
EntityMessage.stripPacketHeader(byteBuffer); EntityMessage.stripPacketHeader(byteBuffer);
@ -1001,7 +1004,7 @@ public class EntityMessage extends NetworkMessage {
/** /**
* Parses a message of type syncPhysics * Parses a message of type syncPhysics
*/ */
public static EntityMessage parsesyncPhysicsMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static EntityMessage parsesyncPhysicsMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE); EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE);
rVal.messageType = EntityMessageType.SYNCPHYSICS; rVal.messageType = EntityMessageType.SYNCPHYSICS;
EntityMessage.stripPacketHeader(byteBuffer); EntityMessage.stripPacketHeader(byteBuffer);
@ -1086,7 +1089,7 @@ public class EntityMessage extends NetworkMessage {
/** /**
* Parses a message of type interact * Parses a message of type interact
*/ */
public static EntityMessage parseinteractMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static EntityMessage parseinteractMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE); EntityMessage rVal = (EntityMessage)pool.get(MessageType.ENTITY_MESSAGE);
rVal.messageType = EntityMessageType.INTERACT; rVal.messageType = EntityMessageType.INTERACT;
EntityMessage.stripPacketHeader(byteBuffer); EntityMessage.stripPacketHeader(byteBuffer);

View File

@ -7,6 +7,9 @@ import electrosphere.net.parser.util.ByteStreamUtils;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
public class InventoryMessage extends NetworkMessage { public class InventoryMessage extends NetworkMessage {
/** /**
@ -414,7 +417,7 @@ public class InventoryMessage extends NetworkMessage {
/** /**
* Parses a message of type addItemToInventory * Parses a message of type addItemToInventory
*/ */
public static InventoryMessage parseaddItemToInventoryMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static InventoryMessage parseaddItemToInventoryMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE);
rVal.messageType = InventoryMessageType.ADDITEMTOINVENTORY; rVal.messageType = InventoryMessageType.ADDITEMTOINVENTORY;
InventoryMessage.stripPacketHeader(byteBuffer); InventoryMessage.stripPacketHeader(byteBuffer);
@ -438,7 +441,7 @@ public class InventoryMessage extends NetworkMessage {
/** /**
* Parses a message of type removeItemFromInventory * Parses a message of type removeItemFromInventory
*/ */
public static InventoryMessage parseremoveItemFromInventoryMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static InventoryMessage parseremoveItemFromInventoryMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE);
rVal.messageType = InventoryMessageType.REMOVEITEMFROMINVENTORY; rVal.messageType = InventoryMessageType.REMOVEITEMFROMINVENTORY;
InventoryMessage.stripPacketHeader(byteBuffer); InventoryMessage.stripPacketHeader(byteBuffer);
@ -483,7 +486,7 @@ public class InventoryMessage extends NetworkMessage {
/** /**
* Parses a message of type clientRequestEquipItem * Parses a message of type clientRequestEquipItem
*/ */
public static InventoryMessage parseclientRequestEquipItemMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static InventoryMessage parseclientRequestEquipItemMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE);
rVal.messageType = InventoryMessageType.CLIENTREQUESTEQUIPITEM; rVal.messageType = InventoryMessageType.CLIENTREQUESTEQUIPITEM;
InventoryMessage.stripPacketHeader(byteBuffer); InventoryMessage.stripPacketHeader(byteBuffer);
@ -533,7 +536,7 @@ public class InventoryMessage extends NetworkMessage {
/** /**
* Parses a message of type serverCommandMoveItemContainer * Parses a message of type serverCommandMoveItemContainer
*/ */
public static InventoryMessage parseserverCommandMoveItemContainerMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static InventoryMessage parseserverCommandMoveItemContainerMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE);
rVal.messageType = InventoryMessageType.SERVERCOMMANDMOVEITEMCONTAINER; rVal.messageType = InventoryMessageType.SERVERCOMMANDMOVEITEMCONTAINER;
InventoryMessage.stripPacketHeader(byteBuffer); InventoryMessage.stripPacketHeader(byteBuffer);
@ -601,7 +604,7 @@ public class InventoryMessage extends NetworkMessage {
/** /**
* Parses a message of type serverCommandEquipItem * Parses a message of type serverCommandEquipItem
*/ */
public static InventoryMessage parseserverCommandEquipItemMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static InventoryMessage parseserverCommandEquipItemMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE);
rVal.messageType = InventoryMessageType.SERVERCOMMANDEQUIPITEM; rVal.messageType = InventoryMessageType.SERVERCOMMANDEQUIPITEM;
InventoryMessage.stripPacketHeader(byteBuffer); InventoryMessage.stripPacketHeader(byteBuffer);
@ -657,7 +660,7 @@ public class InventoryMessage extends NetworkMessage {
/** /**
* Parses a message of type serverCommandUnequipItem * Parses a message of type serverCommandUnequipItem
*/ */
public static InventoryMessage parseserverCommandUnequipItemMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static InventoryMessage parseserverCommandUnequipItemMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE);
rVal.messageType = InventoryMessageType.SERVERCOMMANDUNEQUIPITEM; rVal.messageType = InventoryMessageType.SERVERCOMMANDUNEQUIPITEM;
InventoryMessage.stripPacketHeader(byteBuffer); InventoryMessage.stripPacketHeader(byteBuffer);
@ -703,7 +706,7 @@ public class InventoryMessage extends NetworkMessage {
/** /**
* Parses a message of type clientRequestUnequipItem * Parses a message of type clientRequestUnequipItem
*/ */
public static InventoryMessage parseclientRequestUnequipItemMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static InventoryMessage parseclientRequestUnequipItemMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE);
rVal.messageType = InventoryMessageType.CLIENTREQUESTUNEQUIPITEM; rVal.messageType = InventoryMessageType.CLIENTREQUESTUNEQUIPITEM;
InventoryMessage.stripPacketHeader(byteBuffer); InventoryMessage.stripPacketHeader(byteBuffer);
@ -754,7 +757,7 @@ public class InventoryMessage extends NetworkMessage {
/** /**
* Parses a message of type clientRequestStoreItem * Parses a message of type clientRequestStoreItem
*/ */
public static InventoryMessage parseclientRequestStoreItemMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static InventoryMessage parseclientRequestStoreItemMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE);
rVal.messageType = InventoryMessageType.CLIENTREQUESTSTOREITEM; rVal.messageType = InventoryMessageType.CLIENTREQUESTSTOREITEM;
InventoryMessage.stripPacketHeader(byteBuffer); InventoryMessage.stripPacketHeader(byteBuffer);
@ -824,7 +827,7 @@ public class InventoryMessage extends NetworkMessage {
/** /**
* Parses a message of type serverCommandStoreItem * Parses a message of type serverCommandStoreItem
*/ */
public static InventoryMessage parseserverCommandStoreItemMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static InventoryMessage parseserverCommandStoreItemMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE);
rVal.messageType = InventoryMessageType.SERVERCOMMANDSTOREITEM; rVal.messageType = InventoryMessageType.SERVERCOMMANDSTOREITEM;
InventoryMessage.stripPacketHeader(byteBuffer); InventoryMessage.stripPacketHeader(byteBuffer);
@ -852,7 +855,7 @@ public class InventoryMessage extends NetworkMessage {
/** /**
* Parses a message of type clientRequestWatchInventory * Parses a message of type clientRequestWatchInventory
*/ */
public static InventoryMessage parseclientRequestWatchInventoryMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static InventoryMessage parseclientRequestWatchInventoryMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE);
rVal.messageType = InventoryMessageType.CLIENTREQUESTWATCHINVENTORY; rVal.messageType = InventoryMessageType.CLIENTREQUESTWATCHINVENTORY;
InventoryMessage.stripPacketHeader(byteBuffer); InventoryMessage.stripPacketHeader(byteBuffer);
@ -872,7 +875,7 @@ public class InventoryMessage extends NetworkMessage {
/** /**
* Parses a message of type clientRequestUnwatchInventory * Parses a message of type clientRequestUnwatchInventory
*/ */
public static InventoryMessage parseclientRequestUnwatchInventoryMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static InventoryMessage parseclientRequestUnwatchInventoryMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE);
rVal.messageType = InventoryMessageType.CLIENTREQUESTUNWATCHINVENTORY; rVal.messageType = InventoryMessageType.CLIENTREQUESTUNWATCHINVENTORY;
InventoryMessage.stripPacketHeader(byteBuffer); InventoryMessage.stripPacketHeader(byteBuffer);
@ -892,7 +895,7 @@ public class InventoryMessage extends NetworkMessage {
/** /**
* Parses a message of type clientRequestAddToolbar * Parses a message of type clientRequestAddToolbar
*/ */
public static InventoryMessage parseclientRequestAddToolbarMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static InventoryMessage parseclientRequestAddToolbarMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE);
rVal.messageType = InventoryMessageType.CLIENTREQUESTADDTOOLBAR; rVal.messageType = InventoryMessageType.CLIENTREQUESTADDTOOLBAR;
InventoryMessage.stripPacketHeader(byteBuffer); InventoryMessage.stripPacketHeader(byteBuffer);
@ -914,7 +917,7 @@ public class InventoryMessage extends NetworkMessage {
/** /**
* Parses a message of type clientRequestAddNatural * Parses a message of type clientRequestAddNatural
*/ */
public static InventoryMessage parseclientRequestAddNaturalMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static InventoryMessage parseclientRequestAddNaturalMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE);
rVal.messageType = InventoryMessageType.CLIENTREQUESTADDNATURAL; rVal.messageType = InventoryMessageType.CLIENTREQUESTADDNATURAL;
InventoryMessage.stripPacketHeader(byteBuffer); InventoryMessage.stripPacketHeader(byteBuffer);
@ -934,7 +937,7 @@ public class InventoryMessage extends NetworkMessage {
/** /**
* Parses a message of type clientUpdateToolbar * Parses a message of type clientUpdateToolbar
*/ */
public static InventoryMessage parseclientUpdateToolbarMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static InventoryMessage parseclientUpdateToolbarMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE);
rVal.messageType = InventoryMessageType.CLIENTUPDATETOOLBAR; rVal.messageType = InventoryMessageType.CLIENTUPDATETOOLBAR;
InventoryMessage.stripPacketHeader(byteBuffer); InventoryMessage.stripPacketHeader(byteBuffer);
@ -991,7 +994,7 @@ public class InventoryMessage extends NetworkMessage {
/** /**
* Parses a message of type clientRequestPerformItemAction * Parses a message of type clientRequestPerformItemAction
*/ */
public static InventoryMessage parseclientRequestPerformItemActionMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static InventoryMessage parseclientRequestPerformItemActionMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE);
rVal.messageType = InventoryMessageType.CLIENTREQUESTPERFORMITEMACTION; rVal.messageType = InventoryMessageType.CLIENTREQUESTPERFORMITEMACTION;
InventoryMessage.stripPacketHeader(byteBuffer); InventoryMessage.stripPacketHeader(byteBuffer);
@ -1021,7 +1024,7 @@ public class InventoryMessage extends NetworkMessage {
/** /**
* Parses a message of type clientRequestCraft * Parses a message of type clientRequestCraft
*/ */
public static InventoryMessage parseclientRequestCraftMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static InventoryMessage parseclientRequestCraftMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE);
rVal.messageType = InventoryMessageType.CLIENTREQUESTCRAFT; rVal.messageType = InventoryMessageType.CLIENTREQUESTCRAFT;
InventoryMessage.stripPacketHeader(byteBuffer); InventoryMessage.stripPacketHeader(byteBuffer);
@ -1045,7 +1048,7 @@ public class InventoryMessage extends NetworkMessage {
/** /**
* Parses a message of type serverUpdateItemCharges * Parses a message of type serverUpdateItemCharges
*/ */
public static InventoryMessage parseserverUpdateItemChargesMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static InventoryMessage parseserverUpdateItemChargesMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE); InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE);
rVal.messageType = InventoryMessageType.SERVERUPDATEITEMCHARGES; rVal.messageType = InventoryMessageType.SERVERUPDATEITEMCHARGES;
InventoryMessage.stripPacketHeader(byteBuffer); InventoryMessage.stripPacketHeader(byteBuffer);

View File

@ -7,6 +7,9 @@ import electrosphere.net.parser.util.ByteStreamUtils;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
public class LoreMessage extends NetworkMessage { public class LoreMessage extends NetworkMessage {
/** /**
@ -88,7 +91,7 @@ public class LoreMessage extends NetworkMessage {
/** /**
* Parses a message of type RequestRaces * Parses a message of type RequestRaces
*/ */
public static LoreMessage parseRequestRacesMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static LoreMessage parseRequestRacesMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
LoreMessage rVal = (LoreMessage)pool.get(MessageType.LORE_MESSAGE); LoreMessage rVal = (LoreMessage)pool.get(MessageType.LORE_MESSAGE);
rVal.messageType = LoreMessageType.REQUESTRACES; rVal.messageType = LoreMessageType.REQUESTRACES;
LoreMessage.stripPacketHeader(byteBuffer); LoreMessage.stripPacketHeader(byteBuffer);
@ -128,7 +131,7 @@ public class LoreMessage extends NetworkMessage {
/** /**
* Parses a message of type ResponseRaces * Parses a message of type ResponseRaces
*/ */
public static LoreMessage parseResponseRacesMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static LoreMessage parseResponseRacesMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
LoreMessage rVal = (LoreMessage)pool.get(MessageType.LORE_MESSAGE); LoreMessage rVal = (LoreMessage)pool.get(MessageType.LORE_MESSAGE);
rVal.messageType = LoreMessageType.RESPONSERACES; rVal.messageType = LoreMessageType.RESPONSERACES;
LoreMessage.stripPacketHeader(byteBuffer); LoreMessage.stripPacketHeader(byteBuffer);

View File

@ -4,6 +4,8 @@ import io.github.studiorailgun.CircularByteBuffer;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.util.Map;
import java.util.function.BiConsumer;
/** /**
* A network message * A network message
@ -61,9 +63,10 @@ public abstract class NetworkMessage {
* Parses the byte stream for the next message * Parses the byte stream for the next message
* @param byteBuffer The byte buffer * @param byteBuffer The byte buffer
* @param pool The message pool * @param pool The message pool
* @param customParserMap The map of message type/subtype to parser
* @return The message if one is at the front of the byte stream, null otherwise * @return The message if one is at the front of the byte stream, null otherwise
*/ */
public static NetworkMessage parseBytestreamForMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static NetworkMessage parseBytestreamForMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
NetworkMessage rVal = null; NetworkMessage rVal = null;
byte firstByte; byte firstByte;
byte secondByte; byte secondByte;
@ -75,57 +78,57 @@ public abstract class NetworkMessage {
switch(secondByte){ switch(secondByte){
case TypeBytes.ENTITY_MESSAGE_TYPE_CREATE: case TypeBytes.ENTITY_MESSAGE_TYPE_CREATE:
if(EntityMessage.canParseMessage(byteBuffer,secondByte)){ if(EntityMessage.canParseMessage(byteBuffer,secondByte)){
rVal = EntityMessage.parseCreateMessage(byteBuffer,pool); rVal = EntityMessage.parseCreateMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.ENTITY_MESSAGE_TYPE_MOVEUPDATE: case TypeBytes.ENTITY_MESSAGE_TYPE_MOVEUPDATE:
if(EntityMessage.canParseMessage(byteBuffer,secondByte)){ if(EntityMessage.canParseMessage(byteBuffer,secondByte)){
rVal = EntityMessage.parsemoveUpdateMessage(byteBuffer,pool); rVal = EntityMessage.parsemoveUpdateMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.ENTITY_MESSAGE_TYPE_ATTACKUPDATE: case TypeBytes.ENTITY_MESSAGE_TYPE_ATTACKUPDATE:
if(EntityMessage.canParseMessage(byteBuffer,secondByte)){ if(EntityMessage.canParseMessage(byteBuffer,secondByte)){
rVal = EntityMessage.parseattackUpdateMessage(byteBuffer,pool); rVal = EntityMessage.parseattackUpdateMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.ENTITY_MESSAGE_TYPE_STARTATTACK: case TypeBytes.ENTITY_MESSAGE_TYPE_STARTATTACK:
if(EntityMessage.canParseMessage(byteBuffer,secondByte)){ if(EntityMessage.canParseMessage(byteBuffer,secondByte)){
rVal = EntityMessage.parsestartAttackMessage(byteBuffer,pool); rVal = EntityMessage.parsestartAttackMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.ENTITY_MESSAGE_TYPE_KILL: case TypeBytes.ENTITY_MESSAGE_TYPE_KILL:
if(EntityMessage.canParseMessage(byteBuffer,secondByte)){ if(EntityMessage.canParseMessage(byteBuffer,secondByte)){
rVal = EntityMessage.parseKillMessage(byteBuffer,pool); rVal = EntityMessage.parseKillMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.ENTITY_MESSAGE_TYPE_DESTROY: case TypeBytes.ENTITY_MESSAGE_TYPE_DESTROY:
if(EntityMessage.canParseMessage(byteBuffer,secondByte)){ if(EntityMessage.canParseMessage(byteBuffer,secondByte)){
rVal = EntityMessage.parseDestroyMessage(byteBuffer,pool); rVal = EntityMessage.parseDestroyMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.ENTITY_MESSAGE_TYPE_SETPROPERTY: case TypeBytes.ENTITY_MESSAGE_TYPE_SETPROPERTY:
if(EntityMessage.canParseMessage(byteBuffer,secondByte)){ if(EntityMessage.canParseMessage(byteBuffer,secondByte)){
rVal = EntityMessage.parsesetPropertyMessage(byteBuffer,pool); rVal = EntityMessage.parsesetPropertyMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.ENTITY_MESSAGE_TYPE_ATTACHENTITYTOENTITY: case TypeBytes.ENTITY_MESSAGE_TYPE_ATTACHENTITYTOENTITY:
if(EntityMessage.canParseMessage(byteBuffer,secondByte)){ if(EntityMessage.canParseMessage(byteBuffer,secondByte)){
rVal = EntityMessage.parseattachEntityToEntityMessage(byteBuffer,pool); rVal = EntityMessage.parseattachEntityToEntityMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.ENTITY_MESSAGE_TYPE_UPDATEENTITYVIEWDIR: case TypeBytes.ENTITY_MESSAGE_TYPE_UPDATEENTITYVIEWDIR:
if(EntityMessage.canParseMessage(byteBuffer,secondByte)){ if(EntityMessage.canParseMessage(byteBuffer,secondByte)){
rVal = EntityMessage.parseupdateEntityViewDirMessage(byteBuffer,pool); rVal = EntityMessage.parseupdateEntityViewDirMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.ENTITY_MESSAGE_TYPE_SYNCPHYSICS: case TypeBytes.ENTITY_MESSAGE_TYPE_SYNCPHYSICS:
if(EntityMessage.canParseMessage(byteBuffer,secondByte)){ if(EntityMessage.canParseMessage(byteBuffer,secondByte)){
rVal = EntityMessage.parsesyncPhysicsMessage(byteBuffer,pool); rVal = EntityMessage.parsesyncPhysicsMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.ENTITY_MESSAGE_TYPE_INTERACT: case TypeBytes.ENTITY_MESSAGE_TYPE_INTERACT:
if(EntityMessage.canParseMessage(byteBuffer,secondByte)){ if(EntityMessage.canParseMessage(byteBuffer,secondByte)){
rVal = EntityMessage.parseinteractMessage(byteBuffer,pool); rVal = EntityMessage.parseinteractMessage(byteBuffer,pool,customParserMap);
} }
break; break;
} }
@ -135,12 +138,12 @@ public abstract class NetworkMessage {
switch(secondByte){ switch(secondByte){
case TypeBytes.LORE_MESSAGE_TYPE_REQUESTRACES: case TypeBytes.LORE_MESSAGE_TYPE_REQUESTRACES:
if(LoreMessage.canParseMessage(byteBuffer,secondByte)){ if(LoreMessage.canParseMessage(byteBuffer,secondByte)){
rVal = LoreMessage.parseRequestRacesMessage(byteBuffer,pool); rVal = LoreMessage.parseRequestRacesMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.LORE_MESSAGE_TYPE_RESPONSERACES: case TypeBytes.LORE_MESSAGE_TYPE_RESPONSERACES:
if(LoreMessage.canParseMessage(byteBuffer,secondByte)){ if(LoreMessage.canParseMessage(byteBuffer,secondByte)){
rVal = LoreMessage.parseResponseRacesMessage(byteBuffer,pool); rVal = LoreMessage.parseResponseRacesMessage(byteBuffer,pool,customParserMap);
} }
break; break;
} }
@ -150,12 +153,12 @@ public abstract class NetworkMessage {
switch(secondByte){ switch(secondByte){
case TypeBytes.PLAYER_MESSAGE_TYPE_SET_ID: case TypeBytes.PLAYER_MESSAGE_TYPE_SET_ID:
if(PlayerMessage.canParseMessage(byteBuffer,secondByte)){ if(PlayerMessage.canParseMessage(byteBuffer,secondByte)){
rVal = PlayerMessage.parseSet_IDMessage(byteBuffer,pool); rVal = PlayerMessage.parseSet_IDMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.PLAYER_MESSAGE_TYPE_SETINITIALDISCRETEPOSITION: case TypeBytes.PLAYER_MESSAGE_TYPE_SETINITIALDISCRETEPOSITION:
if(PlayerMessage.canParseMessage(byteBuffer,secondByte)){ if(PlayerMessage.canParseMessage(byteBuffer,secondByte)){
rVal = PlayerMessage.parseSetInitialDiscretePositionMessage(byteBuffer,pool); rVal = PlayerMessage.parseSetInitialDiscretePositionMessage(byteBuffer,pool,customParserMap);
} }
break; break;
} }
@ -165,97 +168,97 @@ public abstract class NetworkMessage {
switch(secondByte){ switch(secondByte){
case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTMETADATA: case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTMETADATA:
if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){
rVal = TerrainMessage.parseRequestMetadataMessage(byteBuffer,pool); rVal = TerrainMessage.parseRequestMetadataMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.TERRAIN_MESSAGE_TYPE_RESPONSEMETADATA: case TypeBytes.TERRAIN_MESSAGE_TYPE_RESPONSEMETADATA:
if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){
rVal = TerrainMessage.parseResponseMetadataMessage(byteBuffer,pool); rVal = TerrainMessage.parseResponseMetadataMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTEDITVOXEL: case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTEDITVOXEL:
if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){
rVal = TerrainMessage.parseRequestEditVoxelMessage(byteBuffer,pool); rVal = TerrainMessage.parseRequestEditVoxelMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.TERRAIN_MESSAGE_TYPE_UPDATEVOXEL: case TypeBytes.TERRAIN_MESSAGE_TYPE_UPDATEVOXEL:
if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){
rVal = TerrainMessage.parseUpdateVoxelMessage(byteBuffer,pool); rVal = TerrainMessage.parseUpdateVoxelMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTUSETERRAINPALETTE: case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTUSETERRAINPALETTE:
if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){
rVal = TerrainMessage.parseRequestUseTerrainPaletteMessage(byteBuffer,pool); rVal = TerrainMessage.parseRequestUseTerrainPaletteMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTDESTROYTERRAIN: case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTDESTROYTERRAIN:
if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){
rVal = TerrainMessage.parseRequestDestroyTerrainMessage(byteBuffer,pool); rVal = TerrainMessage.parseRequestDestroyTerrainMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.TERRAIN_MESSAGE_TYPE_SPAWNPOSITION: case TypeBytes.TERRAIN_MESSAGE_TYPE_SPAWNPOSITION:
if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){
rVal = TerrainMessage.parseSpawnPositionMessage(byteBuffer,pool); rVal = TerrainMessage.parseSpawnPositionMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTCHUNKDATA: case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTCHUNKDATA:
if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){
rVal = TerrainMessage.parseRequestChunkDataMessage(byteBuffer,pool); rVal = TerrainMessage.parseRequestChunkDataMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.TERRAIN_MESSAGE_TYPE_SENDCHUNKDATA: case TypeBytes.TERRAIN_MESSAGE_TYPE_SENDCHUNKDATA:
if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){
rVal = TerrainMessage.parsesendChunkDataMessage(byteBuffer,pool); rVal = TerrainMessage.parsesendChunkDataMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTREDUCEDCHUNKDATA: case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTREDUCEDCHUNKDATA:
if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){
rVal = TerrainMessage.parseRequestReducedChunkDataMessage(byteBuffer,pool); rVal = TerrainMessage.parseRequestReducedChunkDataMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.TERRAIN_MESSAGE_TYPE_SENDREDUCEDCHUNKDATA: case TypeBytes.TERRAIN_MESSAGE_TYPE_SENDREDUCEDCHUNKDATA:
if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){
rVal = TerrainMessage.parseSendReducedChunkDataMessage(byteBuffer,pool); rVal = TerrainMessage.parseSendReducedChunkDataMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTREDUCEDBLOCKDATA: case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTREDUCEDBLOCKDATA:
if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){
rVal = TerrainMessage.parseRequestReducedBlockDataMessage(byteBuffer,pool); rVal = TerrainMessage.parseRequestReducedBlockDataMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.TERRAIN_MESSAGE_TYPE_SENDREDUCEDBLOCKDATA: case TypeBytes.TERRAIN_MESSAGE_TYPE_SENDREDUCEDBLOCKDATA:
if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){
rVal = TerrainMessage.parseSendReducedBlockDataMessage(byteBuffer,pool); rVal = TerrainMessage.parseSendReducedBlockDataMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.TERRAIN_MESSAGE_TYPE_UPDATEBLOCK: case TypeBytes.TERRAIN_MESSAGE_TYPE_UPDATEBLOCK:
if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){
rVal = TerrainMessage.parseUpdateBlockMessage(byteBuffer,pool); rVal = TerrainMessage.parseUpdateBlockMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTFLUIDDATA: case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTFLUIDDATA:
if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){
rVal = TerrainMessage.parseRequestFluidDataMessage(byteBuffer,pool); rVal = TerrainMessage.parseRequestFluidDataMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.TERRAIN_MESSAGE_TYPE_SENDFLUIDDATA: case TypeBytes.TERRAIN_MESSAGE_TYPE_SENDFLUIDDATA:
if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){
rVal = TerrainMessage.parsesendFluidDataMessage(byteBuffer,pool); rVal = TerrainMessage.parsesendFluidDataMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.TERRAIN_MESSAGE_TYPE_UPDATEFLUIDDATA: case TypeBytes.TERRAIN_MESSAGE_TYPE_UPDATEFLUIDDATA:
if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){
rVal = TerrainMessage.parseupdateFluidDataMessage(byteBuffer,pool); rVal = TerrainMessage.parseupdateFluidDataMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTEDITBLOCK: case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTEDITBLOCK:
if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){
rVal = TerrainMessage.parseRequestEditBlockMessage(byteBuffer,pool); rVal = TerrainMessage.parseRequestEditBlockMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTPLACEFAB: case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTPLACEFAB:
if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){ if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){
rVal = TerrainMessage.parseRequestPlaceFabMessage(byteBuffer,pool); rVal = TerrainMessage.parseRequestPlaceFabMessage(byteBuffer,pool,customParserMap);
} }
break; break;
} }
@ -265,17 +268,17 @@ public abstract class NetworkMessage {
switch(secondByte){ switch(secondByte){
case TypeBytes.SERVER_MESSAGE_TYPE_PING: case TypeBytes.SERVER_MESSAGE_TYPE_PING:
if(ServerMessage.canParseMessage(byteBuffer,secondByte)){ if(ServerMessage.canParseMessage(byteBuffer,secondByte)){
rVal = ServerMessage.parsePingMessage(byteBuffer,pool); rVal = ServerMessage.parsePingMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.SERVER_MESSAGE_TYPE_PONG: case TypeBytes.SERVER_MESSAGE_TYPE_PONG:
if(ServerMessage.canParseMessage(byteBuffer,secondByte)){ if(ServerMessage.canParseMessage(byteBuffer,secondByte)){
rVal = ServerMessage.parsePongMessage(byteBuffer,pool); rVal = ServerMessage.parsePongMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.SERVER_MESSAGE_TYPE_DISCONNECT: case TypeBytes.SERVER_MESSAGE_TYPE_DISCONNECT:
if(ServerMessage.canParseMessage(byteBuffer,secondByte)){ if(ServerMessage.canParseMessage(byteBuffer,secondByte)){
rVal = ServerMessage.parseDisconnectMessage(byteBuffer,pool); rVal = ServerMessage.parseDisconnectMessage(byteBuffer,pool,customParserMap);
} }
break; break;
} }
@ -285,22 +288,22 @@ public abstract class NetworkMessage {
switch(secondByte){ switch(secondByte){
case TypeBytes.AUTH_MESSAGE_TYPE_AUTHREQUEST: case TypeBytes.AUTH_MESSAGE_TYPE_AUTHREQUEST:
if(AuthMessage.canParseMessage(byteBuffer,secondByte)){ if(AuthMessage.canParseMessage(byteBuffer,secondByte)){
rVal = AuthMessage.parseAuthRequestMessage(byteBuffer,pool); rVal = AuthMessage.parseAuthRequestMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.AUTH_MESSAGE_TYPE_AUTHDETAILS: case TypeBytes.AUTH_MESSAGE_TYPE_AUTHDETAILS:
if(AuthMessage.canParseMessage(byteBuffer,secondByte)){ if(AuthMessage.canParseMessage(byteBuffer,secondByte)){
rVal = AuthMessage.parseAuthDetailsMessage(byteBuffer,pool); rVal = AuthMessage.parseAuthDetailsMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.AUTH_MESSAGE_TYPE_AUTHSUCCESS: case TypeBytes.AUTH_MESSAGE_TYPE_AUTHSUCCESS:
if(AuthMessage.canParseMessage(byteBuffer,secondByte)){ if(AuthMessage.canParseMessage(byteBuffer,secondByte)){
rVal = AuthMessage.parseAuthSuccessMessage(byteBuffer,pool); rVal = AuthMessage.parseAuthSuccessMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.AUTH_MESSAGE_TYPE_AUTHFAILURE: case TypeBytes.AUTH_MESSAGE_TYPE_AUTHFAILURE:
if(AuthMessage.canParseMessage(byteBuffer,secondByte)){ if(AuthMessage.canParseMessage(byteBuffer,secondByte)){
rVal = AuthMessage.parseAuthFailureMessage(byteBuffer,pool); rVal = AuthMessage.parseAuthFailureMessage(byteBuffer,pool,customParserMap);
} }
break; break;
} }
@ -310,42 +313,42 @@ public abstract class NetworkMessage {
switch(secondByte){ switch(secondByte){
case TypeBytes.CHARACTER_MESSAGE_TYPE_REQUESTCHARACTERLIST: case TypeBytes.CHARACTER_MESSAGE_TYPE_REQUESTCHARACTERLIST:
if(CharacterMessage.canParseMessage(byteBuffer,secondByte)){ if(CharacterMessage.canParseMessage(byteBuffer,secondByte)){
rVal = CharacterMessage.parseRequestCharacterListMessage(byteBuffer,pool); rVal = CharacterMessage.parseRequestCharacterListMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.CHARACTER_MESSAGE_TYPE_RESPONSECHARACTERLIST: case TypeBytes.CHARACTER_MESSAGE_TYPE_RESPONSECHARACTERLIST:
if(CharacterMessage.canParseMessage(byteBuffer,secondByte)){ if(CharacterMessage.canParseMessage(byteBuffer,secondByte)){
rVal = CharacterMessage.parseResponseCharacterListMessage(byteBuffer,pool); rVal = CharacterMessage.parseResponseCharacterListMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.CHARACTER_MESSAGE_TYPE_REQUESTCREATECHARACTER: case TypeBytes.CHARACTER_MESSAGE_TYPE_REQUESTCREATECHARACTER:
if(CharacterMessage.canParseMessage(byteBuffer,secondByte)){ if(CharacterMessage.canParseMessage(byteBuffer,secondByte)){
rVal = CharacterMessage.parseRequestCreateCharacterMessage(byteBuffer,pool); rVal = CharacterMessage.parseRequestCreateCharacterMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.CHARACTER_MESSAGE_TYPE_RESPONSECREATECHARACTERSUCCESS: case TypeBytes.CHARACTER_MESSAGE_TYPE_RESPONSECREATECHARACTERSUCCESS:
if(CharacterMessage.canParseMessage(byteBuffer,secondByte)){ if(CharacterMessage.canParseMessage(byteBuffer,secondByte)){
rVal = CharacterMessage.parseResponseCreateCharacterSuccessMessage(byteBuffer,pool); rVal = CharacterMessage.parseResponseCreateCharacterSuccessMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.CHARACTER_MESSAGE_TYPE_RESPONSECREATECHARACTERFAILURE: case TypeBytes.CHARACTER_MESSAGE_TYPE_RESPONSECREATECHARACTERFAILURE:
if(CharacterMessage.canParseMessage(byteBuffer,secondByte)){ if(CharacterMessage.canParseMessage(byteBuffer,secondByte)){
rVal = CharacterMessage.parseResponseCreateCharacterFailureMessage(byteBuffer,pool); rVal = CharacterMessage.parseResponseCreateCharacterFailureMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.CHARACTER_MESSAGE_TYPE_REQUESTSPAWNCHARACTER: case TypeBytes.CHARACTER_MESSAGE_TYPE_REQUESTSPAWNCHARACTER:
if(CharacterMessage.canParseMessage(byteBuffer,secondByte)){ if(CharacterMessage.canParseMessage(byteBuffer,secondByte)){
rVal = CharacterMessage.parseRequestSpawnCharacterMessage(byteBuffer,pool); rVal = CharacterMessage.parseRequestSpawnCharacterMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.CHARACTER_MESSAGE_TYPE_RESPONSESPAWNCHARACTER: case TypeBytes.CHARACTER_MESSAGE_TYPE_RESPONSESPAWNCHARACTER:
if(CharacterMessage.canParseMessage(byteBuffer,secondByte)){ if(CharacterMessage.canParseMessage(byteBuffer,secondByte)){
rVal = CharacterMessage.parseResponseSpawnCharacterMessage(byteBuffer,pool); rVal = CharacterMessage.parseResponseSpawnCharacterMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.CHARACTER_MESSAGE_TYPE_EDITORSWAP: case TypeBytes.CHARACTER_MESSAGE_TYPE_EDITORSWAP:
if(CharacterMessage.canParseMessage(byteBuffer,secondByte)){ if(CharacterMessage.canParseMessage(byteBuffer,secondByte)){
rVal = CharacterMessage.parseEditorSwapMessage(byteBuffer,pool); rVal = CharacterMessage.parseEditorSwapMessage(byteBuffer,pool,customParserMap);
} }
break; break;
} }
@ -355,87 +358,87 @@ public abstract class NetworkMessage {
switch(secondByte){ switch(secondByte){
case TypeBytes.INVENTORY_MESSAGE_TYPE_ADDITEMTOINVENTORY: case TypeBytes.INVENTORY_MESSAGE_TYPE_ADDITEMTOINVENTORY:
if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){
rVal = InventoryMessage.parseaddItemToInventoryMessage(byteBuffer,pool); rVal = InventoryMessage.parseaddItemToInventoryMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.INVENTORY_MESSAGE_TYPE_REMOVEITEMFROMINVENTORY: case TypeBytes.INVENTORY_MESSAGE_TYPE_REMOVEITEMFROMINVENTORY:
if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){
rVal = InventoryMessage.parseremoveItemFromInventoryMessage(byteBuffer,pool); rVal = InventoryMessage.parseremoveItemFromInventoryMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTEQUIPITEM: case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTEQUIPITEM:
if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){
rVal = InventoryMessage.parseclientRequestEquipItemMessage(byteBuffer,pool); rVal = InventoryMessage.parseclientRequestEquipItemMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.INVENTORY_MESSAGE_TYPE_SERVERCOMMANDMOVEITEMCONTAINER: case TypeBytes.INVENTORY_MESSAGE_TYPE_SERVERCOMMANDMOVEITEMCONTAINER:
if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){
rVal = InventoryMessage.parseserverCommandMoveItemContainerMessage(byteBuffer,pool); rVal = InventoryMessage.parseserverCommandMoveItemContainerMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.INVENTORY_MESSAGE_TYPE_SERVERCOMMANDEQUIPITEM: case TypeBytes.INVENTORY_MESSAGE_TYPE_SERVERCOMMANDEQUIPITEM:
if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){
rVal = InventoryMessage.parseserverCommandEquipItemMessage(byteBuffer,pool); rVal = InventoryMessage.parseserverCommandEquipItemMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.INVENTORY_MESSAGE_TYPE_SERVERCOMMANDUNEQUIPITEM: case TypeBytes.INVENTORY_MESSAGE_TYPE_SERVERCOMMANDUNEQUIPITEM:
if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){
rVal = InventoryMessage.parseserverCommandUnequipItemMessage(byteBuffer,pool); rVal = InventoryMessage.parseserverCommandUnequipItemMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTUNEQUIPITEM: case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTUNEQUIPITEM:
if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){
rVal = InventoryMessage.parseclientRequestUnequipItemMessage(byteBuffer,pool); rVal = InventoryMessage.parseclientRequestUnequipItemMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTSTOREITEM: case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTSTOREITEM:
if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){
rVal = InventoryMessage.parseclientRequestStoreItemMessage(byteBuffer,pool); rVal = InventoryMessage.parseclientRequestStoreItemMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.INVENTORY_MESSAGE_TYPE_SERVERCOMMANDSTOREITEM: case TypeBytes.INVENTORY_MESSAGE_TYPE_SERVERCOMMANDSTOREITEM:
if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){
rVal = InventoryMessage.parseserverCommandStoreItemMessage(byteBuffer,pool); rVal = InventoryMessage.parseserverCommandStoreItemMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTWATCHINVENTORY: case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTWATCHINVENTORY:
if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){
rVal = InventoryMessage.parseclientRequestWatchInventoryMessage(byteBuffer,pool); rVal = InventoryMessage.parseclientRequestWatchInventoryMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTUNWATCHINVENTORY: case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTUNWATCHINVENTORY:
if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){
rVal = InventoryMessage.parseclientRequestUnwatchInventoryMessage(byteBuffer,pool); rVal = InventoryMessage.parseclientRequestUnwatchInventoryMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTADDTOOLBAR: case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTADDTOOLBAR:
if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){
rVal = InventoryMessage.parseclientRequestAddToolbarMessage(byteBuffer,pool); rVal = InventoryMessage.parseclientRequestAddToolbarMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTADDNATURAL: case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTADDNATURAL:
if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){
rVal = InventoryMessage.parseclientRequestAddNaturalMessage(byteBuffer,pool); rVal = InventoryMessage.parseclientRequestAddNaturalMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTUPDATETOOLBAR: case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTUPDATETOOLBAR:
if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){
rVal = InventoryMessage.parseclientUpdateToolbarMessage(byteBuffer,pool); rVal = InventoryMessage.parseclientUpdateToolbarMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTPERFORMITEMACTION: case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTPERFORMITEMACTION:
if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){
rVal = InventoryMessage.parseclientRequestPerformItemActionMessage(byteBuffer,pool); rVal = InventoryMessage.parseclientRequestPerformItemActionMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTCRAFT: case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTCRAFT:
if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){
rVal = InventoryMessage.parseclientRequestCraftMessage(byteBuffer,pool); rVal = InventoryMessage.parseclientRequestCraftMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.INVENTORY_MESSAGE_TYPE_SERVERUPDATEITEMCHARGES: case TypeBytes.INVENTORY_MESSAGE_TYPE_SERVERUPDATEITEMCHARGES:
if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){ if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){
rVal = InventoryMessage.parseserverUpdateItemChargesMessage(byteBuffer,pool); rVal = InventoryMessage.parseserverUpdateItemChargesMessage(byteBuffer,pool,customParserMap);
} }
break; break;
} }
@ -445,57 +448,57 @@ public abstract class NetworkMessage {
switch(secondByte){ switch(secondByte){
case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_UPDATECLIENTSTATE: case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_UPDATECLIENTSTATE:
if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){ if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){
rVal = SynchronizationMessage.parseUpdateClientStateMessage(byteBuffer,pool); rVal = SynchronizationMessage.parseUpdateClientStateMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_UPDATECLIENTSTRINGSTATE: case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_UPDATECLIENTSTRINGSTATE:
if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){ if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){
rVal = SynchronizationMessage.parseUpdateClientStringStateMessage(byteBuffer,pool); rVal = SynchronizationMessage.parseUpdateClientStringStateMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_UPDATECLIENTINTSTATE: case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_UPDATECLIENTINTSTATE:
if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){ if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){
rVal = SynchronizationMessage.parseUpdateClientIntStateMessage(byteBuffer,pool); rVal = SynchronizationMessage.parseUpdateClientIntStateMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_UPDATECLIENTLONGSTATE: case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_UPDATECLIENTLONGSTATE:
if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){ if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){
rVal = SynchronizationMessage.parseUpdateClientLongStateMessage(byteBuffer,pool); rVal = SynchronizationMessage.parseUpdateClientLongStateMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_UPDATECLIENTFLOATSTATE: case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_UPDATECLIENTFLOATSTATE:
if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){ if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){
rVal = SynchronizationMessage.parseUpdateClientFloatStateMessage(byteBuffer,pool); rVal = SynchronizationMessage.parseUpdateClientFloatStateMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_UPDATECLIENTDOUBLESTATE: case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_UPDATECLIENTDOUBLESTATE:
if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){ if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){
rVal = SynchronizationMessage.parseUpdateClientDoubleStateMessage(byteBuffer,pool); rVal = SynchronizationMessage.parseUpdateClientDoubleStateMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_CLIENTREQUESTBTREEACTION: case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_CLIENTREQUESTBTREEACTION:
if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){ if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){
rVal = SynchronizationMessage.parseClientRequestBTreeActionMessage(byteBuffer,pool); rVal = SynchronizationMessage.parseClientRequestBTreeActionMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_SERVERNOTIFYBTREETRANSITION: case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_SERVERNOTIFYBTREETRANSITION:
if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){ if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){
rVal = SynchronizationMessage.parseServerNotifyBTreeTransitionMessage(byteBuffer,pool); rVal = SynchronizationMessage.parseServerNotifyBTreeTransitionMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_ATTACHTREE: case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_ATTACHTREE:
if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){ if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){
rVal = SynchronizationMessage.parseAttachTreeMessage(byteBuffer,pool); rVal = SynchronizationMessage.parseAttachTreeMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_DETATCHTREE: case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_DETATCHTREE:
if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){ if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){
rVal = SynchronizationMessage.parseDetatchTreeMessage(byteBuffer,pool); rVal = SynchronizationMessage.parseDetatchTreeMessage(byteBuffer,pool,customParserMap);
} }
break; break;
case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_LOADSCENE: case TypeBytes.SYNCHRONIZATION_MESSAGE_TYPE_LOADSCENE:
if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){ if(SynchronizationMessage.canParseMessage(byteBuffer,secondByte)){
rVal = SynchronizationMessage.parseLoadSceneMessage(byteBuffer,pool); rVal = SynchronizationMessage.parseLoadSceneMessage(byteBuffer,pool,customParserMap);
} }
break; break;
} }
@ -505,7 +508,7 @@ public abstract class NetworkMessage {
switch(secondByte){ switch(secondByte){
case TypeBytes.COMBAT_MESSAGE_TYPE_SERVERREPORTHITBOXCOLLISION: case TypeBytes.COMBAT_MESSAGE_TYPE_SERVERREPORTHITBOXCOLLISION:
if(CombatMessage.canParseMessage(byteBuffer,secondByte)){ if(CombatMessage.canParseMessage(byteBuffer,secondByte)){
rVal = CombatMessage.parseserverReportHitboxCollisionMessage(byteBuffer,pool); rVal = CombatMessage.parseserverReportHitboxCollisionMessage(byteBuffer,pool,customParserMap);
} }
break; break;
} }

View File

@ -4,6 +4,9 @@ import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import io.github.studiorailgun.CircularByteBuffer; import io.github.studiorailgun.CircularByteBuffer;
import electrosphere.net.parser.util.ByteStreamUtils; import electrosphere.net.parser.util.ByteStreamUtils;
import java.util.Map;
import java.util.function.BiConsumer;
public class PlayerMessage extends NetworkMessage { public class PlayerMessage extends NetworkMessage {
/** /**
@ -134,7 +137,7 @@ public class PlayerMessage extends NetworkMessage {
/** /**
* Parses a message of type Set_ID * Parses a message of type Set_ID
*/ */
public static PlayerMessage parseSet_IDMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static PlayerMessage parseSet_IDMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
PlayerMessage rVal = (PlayerMessage)pool.get(MessageType.PLAYER_MESSAGE); PlayerMessage rVal = (PlayerMessage)pool.get(MessageType.PLAYER_MESSAGE);
rVal.messageType = PlayerMessageType.SET_ID; rVal.messageType = PlayerMessageType.SET_ID;
PlayerMessage.stripPacketHeader(byteBuffer); PlayerMessage.stripPacketHeader(byteBuffer);
@ -154,7 +157,7 @@ public class PlayerMessage extends NetworkMessage {
/** /**
* Parses a message of type SetInitialDiscretePosition * Parses a message of type SetInitialDiscretePosition
*/ */
public static PlayerMessage parseSetInitialDiscretePositionMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static PlayerMessage parseSetInitialDiscretePositionMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
PlayerMessage rVal = (PlayerMessage)pool.get(MessageType.PLAYER_MESSAGE); PlayerMessage rVal = (PlayerMessage)pool.get(MessageType.PLAYER_MESSAGE);
rVal.messageType = PlayerMessageType.SETINITIALDISCRETEPOSITION; rVal.messageType = PlayerMessageType.SETINITIALDISCRETEPOSITION;
PlayerMessage.stripPacketHeader(byteBuffer); PlayerMessage.stripPacketHeader(byteBuffer);

View File

@ -3,6 +3,9 @@ package electrosphere.net.parser.net.message;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import io.github.studiorailgun.CircularByteBuffer; import io.github.studiorailgun.CircularByteBuffer;
import java.util.Map;
import java.util.function.BiConsumer;
public class ServerMessage extends NetworkMessage { public class ServerMessage extends NetworkMessage {
/** /**
@ -80,7 +83,7 @@ public class ServerMessage extends NetworkMessage {
/** /**
* Parses a message of type Ping * Parses a message of type Ping
*/ */
public static ServerMessage parsePingMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static ServerMessage parsePingMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
ServerMessage rVal = (ServerMessage)pool.get(MessageType.SERVER_MESSAGE); ServerMessage rVal = (ServerMessage)pool.get(MessageType.SERVER_MESSAGE);
rVal.messageType = ServerMessageType.PING; rVal.messageType = ServerMessageType.PING;
ServerMessage.stripPacketHeader(byteBuffer); ServerMessage.stripPacketHeader(byteBuffer);
@ -98,7 +101,7 @@ public class ServerMessage extends NetworkMessage {
/** /**
* Parses a message of type Pong * Parses a message of type Pong
*/ */
public static ServerMessage parsePongMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static ServerMessage parsePongMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
ServerMessage rVal = (ServerMessage)pool.get(MessageType.SERVER_MESSAGE); ServerMessage rVal = (ServerMessage)pool.get(MessageType.SERVER_MESSAGE);
rVal.messageType = ServerMessageType.PONG; rVal.messageType = ServerMessageType.PONG;
ServerMessage.stripPacketHeader(byteBuffer); ServerMessage.stripPacketHeader(byteBuffer);
@ -116,7 +119,7 @@ public class ServerMessage extends NetworkMessage {
/** /**
* Parses a message of type Disconnect * Parses a message of type Disconnect
*/ */
public static ServerMessage parseDisconnectMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static ServerMessage parseDisconnectMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
ServerMessage rVal = (ServerMessage)pool.get(MessageType.SERVER_MESSAGE); ServerMessage rVal = (ServerMessage)pool.get(MessageType.SERVER_MESSAGE);
rVal.messageType = ServerMessageType.DISCONNECT; rVal.messageType = ServerMessageType.DISCONNECT;
ServerMessage.stripPacketHeader(byteBuffer); ServerMessage.stripPacketHeader(byteBuffer);

View File

@ -7,6 +7,9 @@ import electrosphere.net.parser.util.ByteStreamUtils;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
public class SynchronizationMessage extends NetworkMessage { public class SynchronizationMessage extends NetworkMessage {
/** /**
@ -267,7 +270,7 @@ public class SynchronizationMessage extends NetworkMessage {
/** /**
* Parses a message of type UpdateClientState * Parses a message of type UpdateClientState
*/ */
public static SynchronizationMessage parseUpdateClientStateMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static SynchronizationMessage parseUpdateClientStateMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE); SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE);
rVal.messageType = SynchronizationMessageType.UPDATECLIENTSTATE; rVal.messageType = SynchronizationMessageType.UPDATECLIENTSTATE;
SynchronizationMessage.stripPacketHeader(byteBuffer); SynchronizationMessage.stripPacketHeader(byteBuffer);
@ -324,7 +327,7 @@ public class SynchronizationMessage extends NetworkMessage {
/** /**
* Parses a message of type UpdateClientStringState * Parses a message of type UpdateClientStringState
*/ */
public static SynchronizationMessage parseUpdateClientStringStateMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static SynchronizationMessage parseUpdateClientStringStateMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE); SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE);
rVal.messageType = SynchronizationMessageType.UPDATECLIENTSTRINGSTATE; rVal.messageType = SynchronizationMessageType.UPDATECLIENTSTRINGSTATE;
SynchronizationMessage.stripPacketHeader(byteBuffer); SynchronizationMessage.stripPacketHeader(byteBuffer);
@ -350,7 +353,7 @@ public class SynchronizationMessage extends NetworkMessage {
/** /**
* Parses a message of type UpdateClientIntState * Parses a message of type UpdateClientIntState
*/ */
public static SynchronizationMessage parseUpdateClientIntStateMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static SynchronizationMessage parseUpdateClientIntStateMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE); SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE);
rVal.messageType = SynchronizationMessageType.UPDATECLIENTINTSTATE; rVal.messageType = SynchronizationMessageType.UPDATECLIENTINTSTATE;
SynchronizationMessage.stripPacketHeader(byteBuffer); SynchronizationMessage.stripPacketHeader(byteBuffer);
@ -376,7 +379,7 @@ public class SynchronizationMessage extends NetworkMessage {
/** /**
* Parses a message of type UpdateClientLongState * Parses a message of type UpdateClientLongState
*/ */
public static SynchronizationMessage parseUpdateClientLongStateMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static SynchronizationMessage parseUpdateClientLongStateMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE); SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE);
rVal.messageType = SynchronizationMessageType.UPDATECLIENTLONGSTATE; rVal.messageType = SynchronizationMessageType.UPDATECLIENTLONGSTATE;
SynchronizationMessage.stripPacketHeader(byteBuffer); SynchronizationMessage.stripPacketHeader(byteBuffer);
@ -402,7 +405,7 @@ public class SynchronizationMessage extends NetworkMessage {
/** /**
* Parses a message of type UpdateClientFloatState * Parses a message of type UpdateClientFloatState
*/ */
public static SynchronizationMessage parseUpdateClientFloatStateMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static SynchronizationMessage parseUpdateClientFloatStateMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE); SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE);
rVal.messageType = SynchronizationMessageType.UPDATECLIENTFLOATSTATE; rVal.messageType = SynchronizationMessageType.UPDATECLIENTFLOATSTATE;
SynchronizationMessage.stripPacketHeader(byteBuffer); SynchronizationMessage.stripPacketHeader(byteBuffer);
@ -428,7 +431,7 @@ public class SynchronizationMessage extends NetworkMessage {
/** /**
* Parses a message of type UpdateClientDoubleState * Parses a message of type UpdateClientDoubleState
*/ */
public static SynchronizationMessage parseUpdateClientDoubleStateMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static SynchronizationMessage parseUpdateClientDoubleStateMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE); SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE);
rVal.messageType = SynchronizationMessageType.UPDATECLIENTDOUBLESTATE; rVal.messageType = SynchronizationMessageType.UPDATECLIENTDOUBLESTATE;
SynchronizationMessage.stripPacketHeader(byteBuffer); SynchronizationMessage.stripPacketHeader(byteBuffer);
@ -454,7 +457,7 @@ public class SynchronizationMessage extends NetworkMessage {
/** /**
* Parses a message of type ClientRequestBTreeAction * Parses a message of type ClientRequestBTreeAction
*/ */
public static SynchronizationMessage parseClientRequestBTreeActionMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static SynchronizationMessage parseClientRequestBTreeActionMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE); SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE);
rVal.messageType = SynchronizationMessageType.CLIENTREQUESTBTREEACTION; rVal.messageType = SynchronizationMessageType.CLIENTREQUESTBTREEACTION;
SynchronizationMessage.stripPacketHeader(byteBuffer); SynchronizationMessage.stripPacketHeader(byteBuffer);
@ -478,7 +481,7 @@ public class SynchronizationMessage extends NetworkMessage {
/** /**
* Parses a message of type ServerNotifyBTreeTransition * Parses a message of type ServerNotifyBTreeTransition
*/ */
public static SynchronizationMessage parseServerNotifyBTreeTransitionMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static SynchronizationMessage parseServerNotifyBTreeTransitionMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE); SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE);
rVal.messageType = SynchronizationMessageType.SERVERNOTIFYBTREETRANSITION; rVal.messageType = SynchronizationMessageType.SERVERNOTIFYBTREETRANSITION;
SynchronizationMessage.stripPacketHeader(byteBuffer); SynchronizationMessage.stripPacketHeader(byteBuffer);
@ -504,7 +507,7 @@ public class SynchronizationMessage extends NetworkMessage {
/** /**
* Parses a message of type AttachTree * Parses a message of type AttachTree
*/ */
public static SynchronizationMessage parseAttachTreeMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static SynchronizationMessage parseAttachTreeMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE); SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE);
rVal.messageType = SynchronizationMessageType.ATTACHTREE; rVal.messageType = SynchronizationMessageType.ATTACHTREE;
SynchronizationMessage.stripPacketHeader(byteBuffer); SynchronizationMessage.stripPacketHeader(byteBuffer);
@ -526,7 +529,7 @@ public class SynchronizationMessage extends NetworkMessage {
/** /**
* Parses a message of type DetatchTree * Parses a message of type DetatchTree
*/ */
public static SynchronizationMessage parseDetatchTreeMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static SynchronizationMessage parseDetatchTreeMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE); SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE);
rVal.messageType = SynchronizationMessageType.DETATCHTREE; rVal.messageType = SynchronizationMessageType.DETATCHTREE;
SynchronizationMessage.stripPacketHeader(byteBuffer); SynchronizationMessage.stripPacketHeader(byteBuffer);
@ -570,7 +573,7 @@ public class SynchronizationMessage extends NetworkMessage {
/** /**
* Parses a message of type LoadScene * Parses a message of type LoadScene
*/ */
public static SynchronizationMessage parseLoadSceneMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static SynchronizationMessage parseLoadSceneMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE); SynchronizationMessage rVal = (SynchronizationMessage)pool.get(MessageType.SYNCHRONIZATION_MESSAGE);
rVal.messageType = SynchronizationMessageType.LOADSCENE; rVal.messageType = SynchronizationMessageType.LOADSCENE;
SynchronizationMessage.stripPacketHeader(byteBuffer); SynchronizationMessage.stripPacketHeader(byteBuffer);

View File

@ -7,6 +7,9 @@ import electrosphere.net.parser.util.ByteStreamUtils;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
public class TerrainMessage extends NetworkMessage { public class TerrainMessage extends NetworkMessage {
/** /**
@ -607,7 +610,7 @@ public class TerrainMessage extends NetworkMessage {
/** /**
* Parses a message of type RequestMetadata * Parses a message of type RequestMetadata
*/ */
public static TerrainMessage parseRequestMetadataMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static TerrainMessage parseRequestMetadataMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE);
rVal.messageType = TerrainMessageType.REQUESTMETADATA; rVal.messageType = TerrainMessageType.REQUESTMETADATA;
TerrainMessage.stripPacketHeader(byteBuffer); TerrainMessage.stripPacketHeader(byteBuffer);
@ -625,7 +628,7 @@ public class TerrainMessage extends NetworkMessage {
/** /**
* Parses a message of type ResponseMetadata * Parses a message of type ResponseMetadata
*/ */
public static TerrainMessage parseResponseMetadataMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static TerrainMessage parseResponseMetadataMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE);
rVal.messageType = TerrainMessageType.RESPONSEMETADATA; rVal.messageType = TerrainMessageType.RESPONSEMETADATA;
TerrainMessage.stripPacketHeader(byteBuffer); TerrainMessage.stripPacketHeader(byteBuffer);
@ -657,7 +660,7 @@ public class TerrainMessage extends NetworkMessage {
/** /**
* Parses a message of type RequestEditVoxel * Parses a message of type RequestEditVoxel
*/ */
public static TerrainMessage parseRequestEditVoxelMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static TerrainMessage parseRequestEditVoxelMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE);
rVal.messageType = TerrainMessageType.REQUESTEDITVOXEL; rVal.messageType = TerrainMessageType.REQUESTEDITVOXEL;
TerrainMessage.stripPacketHeader(byteBuffer); TerrainMessage.stripPacketHeader(byteBuffer);
@ -691,7 +694,7 @@ public class TerrainMessage extends NetworkMessage {
/** /**
* Parses a message of type UpdateVoxel * Parses a message of type UpdateVoxel
*/ */
public static TerrainMessage parseUpdateVoxelMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static TerrainMessage parseUpdateVoxelMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE);
rVal.messageType = TerrainMessageType.UPDATEVOXEL; rVal.messageType = TerrainMessageType.UPDATEVOXEL;
TerrainMessage.stripPacketHeader(byteBuffer); TerrainMessage.stripPacketHeader(byteBuffer);
@ -725,7 +728,7 @@ public class TerrainMessage extends NetworkMessage {
/** /**
* Parses a message of type RequestUseTerrainPalette * Parses a message of type RequestUseTerrainPalette
*/ */
public static TerrainMessage parseRequestUseTerrainPaletteMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static TerrainMessage parseRequestUseTerrainPaletteMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE);
rVal.messageType = TerrainMessageType.REQUESTUSETERRAINPALETTE; rVal.messageType = TerrainMessageType.REQUESTUSETERRAINPALETTE;
TerrainMessage.stripPacketHeader(byteBuffer); TerrainMessage.stripPacketHeader(byteBuffer);
@ -755,7 +758,7 @@ public class TerrainMessage extends NetworkMessage {
/** /**
* Parses a message of type RequestDestroyTerrain * Parses a message of type RequestDestroyTerrain
*/ */
public static TerrainMessage parseRequestDestroyTerrainMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static TerrainMessage parseRequestDestroyTerrainMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE);
rVal.messageType = TerrainMessageType.REQUESTDESTROYTERRAIN; rVal.messageType = TerrainMessageType.REQUESTDESTROYTERRAIN;
TerrainMessage.stripPacketHeader(byteBuffer); TerrainMessage.stripPacketHeader(byteBuffer);
@ -783,7 +786,7 @@ public class TerrainMessage extends NetworkMessage {
/** /**
* Parses a message of type SpawnPosition * Parses a message of type SpawnPosition
*/ */
public static TerrainMessage parseSpawnPositionMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static TerrainMessage parseSpawnPositionMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE);
rVal.messageType = TerrainMessageType.SPAWNPOSITION; rVal.messageType = TerrainMessageType.SPAWNPOSITION;
TerrainMessage.stripPacketHeader(byteBuffer); TerrainMessage.stripPacketHeader(byteBuffer);
@ -807,7 +810,7 @@ public class TerrainMessage extends NetworkMessage {
/** /**
* Parses a message of type RequestChunkData * Parses a message of type RequestChunkData
*/ */
public static TerrainMessage parseRequestChunkDataMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static TerrainMessage parseRequestChunkDataMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE);
rVal.messageType = TerrainMessageType.REQUESTCHUNKDATA; rVal.messageType = TerrainMessageType.REQUESTCHUNKDATA;
TerrainMessage.stripPacketHeader(byteBuffer); TerrainMessage.stripPacketHeader(byteBuffer);
@ -862,7 +865,7 @@ public class TerrainMessage extends NetworkMessage {
/** /**
* Parses a message of type sendChunkData * Parses a message of type sendChunkData
*/ */
public static TerrainMessage parsesendChunkDataMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static TerrainMessage parsesendChunkDataMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE);
rVal.messageType = TerrainMessageType.SENDCHUNKDATA; rVal.messageType = TerrainMessageType.SENDCHUNKDATA;
TerrainMessage.stripPacketHeader(byteBuffer); TerrainMessage.stripPacketHeader(byteBuffer);
@ -888,7 +891,7 @@ public class TerrainMessage extends NetworkMessage {
/** /**
* Parses a message of type RequestReducedChunkData * Parses a message of type RequestReducedChunkData
*/ */
public static TerrainMessage parseRequestReducedChunkDataMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static TerrainMessage parseRequestReducedChunkDataMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE);
rVal.messageType = TerrainMessageType.REQUESTREDUCEDCHUNKDATA; rVal.messageType = TerrainMessageType.REQUESTREDUCEDCHUNKDATA;
TerrainMessage.stripPacketHeader(byteBuffer); TerrainMessage.stripPacketHeader(byteBuffer);
@ -951,7 +954,7 @@ public class TerrainMessage extends NetworkMessage {
/** /**
* Parses a message of type SendReducedChunkData * Parses a message of type SendReducedChunkData
*/ */
public static TerrainMessage parseSendReducedChunkDataMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static TerrainMessage parseSendReducedChunkDataMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE);
rVal.messageType = TerrainMessageType.SENDREDUCEDCHUNKDATA; rVal.messageType = TerrainMessageType.SENDREDUCEDCHUNKDATA;
TerrainMessage.stripPacketHeader(byteBuffer); TerrainMessage.stripPacketHeader(byteBuffer);
@ -981,7 +984,7 @@ public class TerrainMessage extends NetworkMessage {
/** /**
* Parses a message of type RequestReducedBlockData * Parses a message of type RequestReducedBlockData
*/ */
public static TerrainMessage parseRequestReducedBlockDataMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static TerrainMessage parseRequestReducedBlockDataMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE);
rVal.messageType = TerrainMessageType.REQUESTREDUCEDBLOCKDATA; rVal.messageType = TerrainMessageType.REQUESTREDUCEDBLOCKDATA;
TerrainMessage.stripPacketHeader(byteBuffer); TerrainMessage.stripPacketHeader(byteBuffer);
@ -1044,16 +1047,16 @@ public class TerrainMessage extends NetworkMessage {
/** /**
* Parses a message of type SendReducedBlockData * Parses a message of type SendReducedBlockData
*/ */
public static TerrainMessage parseSendReducedBlockDataMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static TerrainMessage parseSendReducedBlockDataMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE);
rVal.messageType = TerrainMessageType.SENDREDUCEDBLOCKDATA; rVal.messageType = TerrainMessageType.SENDREDUCEDBLOCKDATA;
TerrainMessage.stripPacketHeader(byteBuffer); TerrainMessage.stripPacketHeader(byteBuffer);
rVal.setworldX(ByteStreamUtils.popIntFromByteQueue(byteBuffer)); short pair = (short)((TypeBytes.MESSAGE_TYPE_TERRAIN << 4) & TypeBytes.TERRAIN_MESSAGE_TYPE_SENDREDUCEDBLOCKDATA);
rVal.setworldY(ByteStreamUtils.popIntFromByteQueue(byteBuffer)); BiConsumer<NetworkMessage,CircularByteBuffer> customParser = customParserMap.get(pair);
rVal.setworldZ(ByteStreamUtils.popIntFromByteQueue(byteBuffer)); if(customParser == null){
rVal.setchunkResolution(ByteStreamUtils.popIntFromByteQueue(byteBuffer)); throw new Error("Custom parser undefined for message pair!");
rVal.sethomogenousValue(ByteStreamUtils.popIntFromByteQueue(byteBuffer)); }
rVal.setchunkData(ByteStreamUtils.popByteArrayFromByteQueue(byteBuffer)); customParser.accept(rVal,byteBuffer);
return rVal; return rVal;
} }
@ -1074,7 +1077,7 @@ public class TerrainMessage extends NetworkMessage {
/** /**
* Parses a message of type UpdateBlock * Parses a message of type UpdateBlock
*/ */
public static TerrainMessage parseUpdateBlockMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static TerrainMessage parseUpdateBlockMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE);
rVal.messageType = TerrainMessageType.UPDATEBLOCK; rVal.messageType = TerrainMessageType.UPDATEBLOCK;
TerrainMessage.stripPacketHeader(byteBuffer); TerrainMessage.stripPacketHeader(byteBuffer);
@ -1108,7 +1111,7 @@ public class TerrainMessage extends NetworkMessage {
/** /**
* Parses a message of type RequestFluidData * Parses a message of type RequestFluidData
*/ */
public static TerrainMessage parseRequestFluidDataMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static TerrainMessage parseRequestFluidDataMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE);
rVal.messageType = TerrainMessageType.REQUESTFLUIDDATA; rVal.messageType = TerrainMessageType.REQUESTFLUIDDATA;
TerrainMessage.stripPacketHeader(byteBuffer); TerrainMessage.stripPacketHeader(byteBuffer);
@ -1163,7 +1166,7 @@ public class TerrainMessage extends NetworkMessage {
/** /**
* Parses a message of type sendFluidData * Parses a message of type sendFluidData
*/ */
public static TerrainMessage parsesendFluidDataMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static TerrainMessage parsesendFluidDataMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE);
rVal.messageType = TerrainMessageType.SENDFLUIDDATA; rVal.messageType = TerrainMessageType.SENDFLUIDDATA;
TerrainMessage.stripPacketHeader(byteBuffer); TerrainMessage.stripPacketHeader(byteBuffer);
@ -1220,7 +1223,7 @@ public class TerrainMessage extends NetworkMessage {
/** /**
* Parses a message of type updateFluidData * Parses a message of type updateFluidData
*/ */
public static TerrainMessage parseupdateFluidDataMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static TerrainMessage parseupdateFluidDataMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE);
rVal.messageType = TerrainMessageType.UPDATEFLUIDDATA; rVal.messageType = TerrainMessageType.UPDATEFLUIDDATA;
TerrainMessage.stripPacketHeader(byteBuffer); TerrainMessage.stripPacketHeader(byteBuffer);
@ -1246,7 +1249,7 @@ public class TerrainMessage extends NetworkMessage {
/** /**
* Parses a message of type RequestEditBlock * Parses a message of type RequestEditBlock
*/ */
public static TerrainMessage parseRequestEditBlockMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static TerrainMessage parseRequestEditBlockMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE);
rVal.messageType = TerrainMessageType.REQUESTEDITBLOCK; rVal.messageType = TerrainMessageType.REQUESTEDITBLOCK;
TerrainMessage.stripPacketHeader(byteBuffer); TerrainMessage.stripPacketHeader(byteBuffer);
@ -1325,7 +1328,7 @@ public class TerrainMessage extends NetworkMessage {
/** /**
* Parses a message of type RequestPlaceFab * Parses a message of type RequestPlaceFab
*/ */
public static TerrainMessage parseRequestPlaceFabMessage(CircularByteBuffer byteBuffer, MessagePool pool){ public static TerrainMessage parseRequestPlaceFabMessage(CircularByteBuffer byteBuffer, MessagePool pool, Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap){
TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE); TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE);
rVal.messageType = TerrainMessageType.REQUESTPLACEFAB; rVal.messageType = TerrainMessageType.REQUESTPLACEFAB;
TerrainMessage.stripPacketHeader(byteBuffer); TerrainMessage.stripPacketHeader(byteBuffer);

View File

@ -6,8 +6,11 @@ import io.github.studiorailgun.CircularByteBuffer;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.BiConsumer;
/** /**
* The main message parser. This is used to serialize/deserialize messages to/from the provided streams. * The main message parser. This is used to serialize/deserialize messages to/from the provided streams.
@ -27,53 +30,53 @@ public class NetworkParser {
/** /**
* The input stream for the parser * The input stream for the parser
*/ */
InputStream incomingStream; private InputStream incomingStream;
/** /**
* The output stream for the parser * The output stream for the parser
*/ */
OutputStream outgoingStream; private OutputStream outgoingStream;
/** /**
* The queue of incoming messages that have been parsed * The queue of incoming messages that have been parsed
*/ */
CopyOnWriteArrayList<NetworkMessage> incomingMessageQueue = new CopyOnWriteArrayList<NetworkMessage>(); private CopyOnWriteArrayList<NetworkMessage> incomingMessageQueue = new CopyOnWriteArrayList<NetworkMessage>();
/** /**
* The queue of outgoing messages that have yet to be sent * The queue of outgoing messages that have yet to be sent
*/ */
CopyOnWriteArrayList<NetworkMessage> outgoingMessageQueue = new CopyOnWriteArrayList<NetworkMessage>(); private CopyOnWriteArrayList<NetworkMessage> outgoingMessageQueue = new CopyOnWriteArrayList<NetworkMessage>();
/** /**
* Message object pool * Message object pool
*/ */
MessagePool pool = new MessagePool(); private MessagePool pool = new MessagePool();
/** /**
* The byte buffer for storing incoming bytes * The byte buffer for storing incoming bytes
*/ */
CircularByteBuffer incomingByteBuffer = new CircularByteBuffer(CIRCULAR_BUFFER_SIZE); private CircularByteBuffer incomingByteBuffer = new CircularByteBuffer(CIRCULAR_BUFFER_SIZE);
/** /**
* The block array used to read blocks of bytes in * The block array used to read blocks of bytes in
*/ */
byte[] readBuffer = new byte[READ_BLOCK_SIZE]; private byte[] readBuffer = new byte[READ_BLOCK_SIZE];
/**
* The outgoing byte buffer
*/
CopyOnWriteArrayList<Byte> outgoingByteQueue = new CopyOnWriteArrayList<Byte>();
/** /**
* The number of bytes read * The number of bytes read
*/ */
long totalBytesRead = 0; private long totalBytesRead = 0;
/** /**
* If set to true, the parser will automatically release messages on send. * If set to true, the parser will automatically release messages on send.
* Otherwise, will not release when the message is sent. * Otherwise, will not release when the message is sent.
*/ */
boolean releaseOnSend = true; private boolean releaseOnSend = true;
/**
* The map of messasge type -> custom function to produce the message from a byte stream
*/
private Map<Short,BiConsumer<NetworkMessage,CircularByteBuffer>> customParserMap = new HashMap<Short,BiConsumer<NetworkMessage,CircularByteBuffer>>();
/** /**
@ -103,7 +106,7 @@ public class NetworkParser {
//parse byte queue for messages //parse byte queue for messages
//for each message, append to clientIncomingMessageQueue //for each message, append to clientIncomingMessageQueue
NetworkMessage newMessage; NetworkMessage newMessage;
while((newMessage = NetworkMessage.parseBytestreamForMessage(incomingByteBuffer,this.pool))!=null){ while((newMessage = NetworkMessage.parseBytestreamForMessage(incomingByteBuffer,this.pool,this.customParserMap))!=null){
incomingMessageQueue.add(newMessage); incomingMessageQueue.add(newMessage);
} }
} }
@ -195,4 +198,15 @@ public class NetworkParser {
this.releaseOnSend = releaseOnSend; this.releaseOnSend = releaseOnSend;
} }
/**
* Registers a custom parser for a given message type/subtype
* @param messageType The type of message
* @param messageSubtype The subtype of the message
* @param parserFunc The parser function
*/
public void registerCustomParser(byte messageType, byte messageSubtype, BiConsumer<NetworkMessage,CircularByteBuffer> parserFunc){
short pair = (short)((messageType << 4) & messageSubtype);
this.customParserMap.put(pair,parserFunc);
}
} }

View File

@ -272,6 +272,7 @@
{ {
"messageName" : "SendReducedBlockData", "messageName" : "SendReducedBlockData",
"description" : "Sends block data to the client", "description" : "Sends block data to the client",
"customParser" : true,
"data" : [ "data" : [
"worldX", "worldX",
"worldY", "worldY",