work on unifying inventory transforms
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit

This commit is contained in:
austin 2025-05-14 12:31:07 -04:00
parent 2173f96b0b
commit ea86e06734
14 changed files with 237 additions and 111 deletions

View File

@ -61,13 +61,21 @@ public class ClientInventoryState implements BehaviorTree {
for(InventoryMessage message : networkMessageQueue){
networkMessageQueue.remove(message);
switch(message.getMessageSubtype()){
case ADDITEMTOINVENTORY: {
if(Globals.clientSceneWrapper.containsServerId(message.getitemEntId())){
LoggerInterface.loggerNetworking.WARNING("Client move item " + message.getitemEntId());
case SERVERCOMMANDSTOREITEM: {
LoggerInterface.loggerNetworking.WARNING("Client create/move item " + message.getitemEntId());
Entity clientSideContainer = Globals.clientSceneWrapper.getEntityFromServerId(message.gettargetEntId());
Entity clientSideItem = Globals.clientSceneWrapper.getEntityFromServerId(message.getitemEntId());
ClientInventoryState.moveItem(clientSideContainer, clientSideItem, message.getcontainerType(), message.getequipPointId());
Entity clientSideItem = null;
if(Globals.clientSceneWrapper.containsServerId(message.getitemEntId())){
clientSideItem = Globals.clientSceneWrapper.getEntityFromServerId(message.getitemEntId());
} else {
clientSideItem = ClientInventoryState.clientConstructInInventoryItem(clientSideContainer,message.getitemTemplate());
Globals.clientSceneWrapper.mapIdToId(clientSideItem.getId(), message.getitemEntId());
}
ClientInventoryState.moveItem(clientSideContainer, clientSideItem, message.getcontainerType(), message.getequipPointId());
//attempt re-render ui
WindowUtils.attemptRedrawInventoryWindows();
} break;
case ADDITEMTOINVENTORY: {
LoggerInterface.loggerNetworking.WARNING("Client create item " + message.getitemEntId());
Entity clientSideContainer = Globals.clientSceneWrapper.getEntityFromServerId(message.gettargetEntId());
//the ID we get is of the in-inventory item
@ -76,7 +84,6 @@ public class ClientInventoryState implements BehaviorTree {
if(inInventorySpawnedItem != null){
Globals.clientSceneWrapper.mapIdToId(inInventorySpawnedItem.getId(), message.getitemEntId());
}
}
//attempt re-render ui
WindowUtils.attemptRedrawInventoryWindows();
} break;
@ -246,6 +253,8 @@ public class ClientInventoryState implements BehaviorTree {
* @param targetSlot (Optional) The slot within the container
*/
private static void moveItem(Entity containerEnt, Entity itemEnt, int targetContainer, String targetSlot){
//
//remove from existing container if relevant
if(ItemUtils.getContainingParent(itemEnt) != null){
Entity existingContainerEnt = ItemUtils.getContainingParent(itemEnt);
if(InventoryUtils.hasNaturalInventory(existingContainerEnt)){
@ -269,9 +278,8 @@ public class ClientInventoryState implements BehaviorTree {
equipInventory.tryRemoveItem(itemEnt);
}
}
switch(targetContainer){
case InventoryProtocol.INVENTORY_TYPE_EQUIP: {
String equipPointId = targetSlot;
//
//remove from inventories on existing container
if(InventoryUtils.hasNaturalInventory(containerEnt)){
UnrelationalInventoryState naturalInventory = InventoryUtils.getNaturalInventory(containerEnt);
naturalInventory.removeItem(itemEnt);
@ -279,58 +287,57 @@ public class ClientInventoryState implements BehaviorTree {
if(InventoryUtils.hasEquipInventory(containerEnt)){
RelationalInventoryState equipInventory = InventoryUtils.getEquipInventory(containerEnt);
equipInventory.tryRemoveItem(itemEnt);
}
if(ClientEquipState.getClientEquipState(containerEnt) != null){
ClientEquipState clientEquipState = ClientEquipState.getClientEquipState(containerEnt);
clientEquipState.clientTransformUnequip(itemEnt);
}
if(InventoryUtils.hasToolbarInventory(containerEnt)){
RelationalInventoryState toolbarInventory = InventoryUtils.getToolbarInventory(containerEnt);
toolbarInventory.tryRemoveItem(itemEnt);
}
if(ClientToolbarState.hasClientToolbarState(containerEnt)){
ClientToolbarState toolbarState = ClientToolbarState.getClientToolbarState(containerEnt);
toolbarState.update();
}
//
//store in new container
switch(targetContainer){
case InventoryProtocol.INVENTORY_TYPE_EQUIP: {
String equipPointId = targetSlot;
if(InventoryUtils.hasEquipInventory(containerEnt)){
RelationalInventoryState equipInventory = InventoryUtils.getEquipInventory(containerEnt);
equipInventory.addItem(equipPointId, itemEnt);
}
if(ClientEquipState.getClientEquipState(containerEnt) != null){
ClientEquipState clientEquipState = ClientEquipState.getClientEquipState(containerEnt);
clientEquipState.attemptEquip(itemEnt, clientEquipState.getEquipPoint(equipPointId));
}
if(InventoryUtils.hasToolbarInventory(containerEnt)){
RelationalInventoryState toolbarInventory = InventoryUtils.getToolbarInventory(containerEnt);
toolbarInventory.tryRemoveItem(itemEnt);
}
} break;
case InventoryProtocol.INVENTORY_TYPE_NATURAL: {
if(InventoryUtils.hasNaturalInventory(containerEnt)){
UnrelationalInventoryState naturalInventory = InventoryUtils.getNaturalInventory(containerEnt);
naturalInventory.removeItem(itemEnt);
naturalInventory.addItem(itemEnt);
}
if(InventoryUtils.hasEquipInventory(containerEnt)){
RelationalInventoryState equipInventory = InventoryUtils.getEquipInventory(containerEnt);
if(ClientEquipState.getClientEquipState(containerEnt) != null){
ClientEquipState clientEquipState = ClientEquipState.getClientEquipState(containerEnt);
clientEquipState.clientTransformUnequipPoint(equipInventory.getItemSlot(itemEnt));
}
equipInventory.tryRemoveItem(itemEnt);
}
if(InventoryUtils.hasToolbarInventory(containerEnt)){
RelationalInventoryState toolbarInventory = InventoryUtils.getToolbarInventory(containerEnt);
toolbarInventory.tryRemoveItem(itemEnt);
}
} break;
case InventoryProtocol.INVENTORY_TYPE_TOOLBAR: {
if(InventoryUtils.hasNaturalInventory(containerEnt)){
UnrelationalInventoryState naturalInventory = InventoryUtils.getNaturalInventory(containerEnt);
naturalInventory.removeItem(itemEnt);
}
if(InventoryUtils.hasEquipInventory(containerEnt)){
RelationalInventoryState equipInventory = InventoryUtils.getEquipInventory(containerEnt);
if(ClientEquipState.getClientEquipState(containerEnt) != null){
ClientEquipState clientEquipState = ClientEquipState.getClientEquipState(containerEnt);
clientEquipState.clientTransformUnequipPoint(equipInventory.getItemSlot(itemEnt));
}
equipInventory.tryRemoveItem(itemEnt);
}
if(InventoryUtils.hasToolbarInventory(containerEnt)){
RelationalInventoryState toolbarInventory = InventoryUtils.getToolbarInventory(containerEnt);
toolbarInventory.tryRemoveItem(itemEnt);
toolbarInventory.addItem(targetSlot, itemEnt);
}
if(ClientToolbarState.hasClientToolbarState(containerEnt)){
ClientToolbarState toolbarState = ClientToolbarState.getClientToolbarState(containerEnt);
toolbarState.update();
}
}
}
}
/**
* Adds a network message to the client inventory state
* @param networkMessage The message
*/
public void addNetworkMessage(InventoryMessage networkMessage) {
networkMessageQueue.add(networkMessage);
}

View File

@ -81,40 +81,30 @@ public class ServerInventoryState implements BehaviorTree {
networkMessageQueue.remove(message);
switch(message.getMessageSubtype()){
case ADDITEMTOINVENTORY: {
ServerInventoryState.serverAttemptStoreItemTransform(parent, EntityLookupUtils.getEntityById(message.getitemEntId()));
Entity itemEnt = EntityLookupUtils.getEntityById(message.getitemEntId());
ServerInventoryState.attemptStoreItemAnyInventory(parent,itemEnt);
} break;
case REMOVEITEMFROMINVENTORY: {
ServerInventoryState.serverAttemptEjectItem(parent, EntityLookupUtils.getEntityById(message.getentityId()));
ServerInventoryState.serverAttemptEjectItemTransform(parent, EntityLookupUtils.getEntityById(message.getentityId()));
} break;
case CLIENTREQUESTEQUIPITEM: {
//item to equip
Entity target = EntityLookupUtils.getEntityById(message.getentityId());
//perform transform if it makes sense
if(InventoryUtils.hasEquipInventory(parent) && InventoryUtils.hasNaturalInventory(parent) && ServerEquipState.hasEquipState(parent)){
ServerEquipState equipState = ServerEquipState.getEquipState(parent);
EquipPoint point = equipState.getEquipPoint(message.getequipPointId());
equipState.commandAttemptEquip(target, point);
}
Entity itemEnt = EntityLookupUtils.getEntityById(message.getentityId());
ServerInventoryState.attemptStoreItemTransform(parent,itemEnt,InventoryProtocol.INVENTORY_TYPE_EQUIP,message.getequipPointId());
}
break;
case CLIENTREQUESTUNEQUIPITEM: {
//make sure can unequip
if(InventoryUtils.hasEquipInventory(parent) && InventoryUtils.hasNaturalInventory(parent) && ServerEquipState.hasEquipState(parent)){
ServerEquipState equipState = ServerEquipState.getEquipState(parent);
// EquipPoint point = equipState.getEquipPoint(message.getequipPointId());
if(equipState.hasEquippedAtPoint(message.getequipPointId())){
equipState.commandAttemptUnequip(message.getequipPointId());
//tell player
}
}
Entity itemEnt = EntityLookupUtils.getEntityById(message.getentityId());
ServerInventoryState.serverAttemptEjectItemTransform(parent, itemEnt);
} break;
case CLIENTREQUESTADDNATURAL: {
ServerInventoryState.serverAddToNatural(parent, EntityLookupUtils.getEntityById(message.getentityId()));
Entity itemEnt = EntityLookupUtils.getEntityById(message.getitemEntId());
ServerInventoryState.attemptStoreItemTransform(parent,itemEnt,InventoryProtocol.INVENTORY_TYPE_NATURAL,"");
} break;
case CLIENTREQUESTADDTOOLBAR: {
Entity itemEnt = EntityLookupUtils.getEntityById(message.getentityId());
ServerToolbarState serverToolbarState = ServerToolbarState.getServerToolbarState(parent);
serverToolbarState.attemptEquip(itemEnt, message.gettoolbarId());
Entity itemEnt = EntityLookupUtils.getEntityById(message.getitemEntId());
String toolbarSlot = message.gettoolbarId() + "";
ServerInventoryState.attemptStoreItemTransform(parent,itemEnt,InventoryProtocol.INVENTORY_TYPE_TOOLBAR,toolbarSlot);
} break;
case CLIENTUPDATETOOLBAR: {
ServerToolbarState serverToolbarState = ServerToolbarState.getServerToolbarState(parent);
@ -136,12 +126,12 @@ public class ServerInventoryState implements BehaviorTree {
if(container != this.parent){
LoggerInterface.loggerEngine.WARNING("A client is trying to pick up an item for another entity!");
} else {
ServerInventoryState.serverAttemptStoreItemTransform(parent, itemEnt, message.getcontainerType(), message.getequipPointId());
ServerInventoryState.attemptStoreItemTransform(parent, itemEnt, message.getcontainerType(), message.getequipPointId());
}
}
//transfering from one container to another
if(currentParent != null){
ServerInventoryState.serverAttemptStoreItemTransform(container, itemEnt, message.getcontainerType(), message.getequipPointId());
ServerInventoryState.attemptStoreItemTransform(container, itemEnt, message.getcontainerType(), message.getequipPointId());
}
} break;
case CLIENTREQUESTWATCHINVENTORY: {
@ -158,6 +148,7 @@ public class ServerInventoryState implements BehaviorTree {
} break;
case CLIENTREQUESTCRAFT:
case CLIENTREQUESTPERFORMITEMACTION:
case SERVERCOMMANDSTOREITEM:
case SERVERCOMMANDUNEQUIPITEM:
case SERVERCOMMANDEQUIPITEM:
case SERVERCOMMANDMOVEITEMCONTAINER:
@ -266,7 +257,7 @@ public class ServerInventoryState implements BehaviorTree {
* @param item The item to store
* @return The in-inventory item
*/
public static Entity serverAttemptStoreItemTransform(Entity creature, Entity item){
public static Entity attemptStoreItemAnyInventory(Entity creature, Entity item){
if(item == null){
throw new Error("Null item provided! " + item);
}
@ -390,7 +381,7 @@ public class ServerInventoryState implements BehaviorTree {
* @param slotId (Optional) The slot within the container to store into
* @return The in-inventory item
*/
public static void serverAttemptStoreItemTransform(Entity container, Entity itemEnt, int containerType, String slotId){
public static void attemptStoreItemTransform(Entity container, Entity itemEnt, int containerType, String slotId){
if(itemEnt == null){
throw new Error("Null item provided! " + itemEnt);
}
@ -429,7 +420,7 @@ public class ServerInventoryState implements BehaviorTree {
if(!ItemUtils.isItem(item)){
return null;
}
if(InventoryUtils.hasNaturalInventory(creature)){
if(!InventoryUtils.hasNaturalInventory(creature)){
return null;
}
//get inventory
@ -466,7 +457,13 @@ public class ServerInventoryState implements BehaviorTree {
int controllerPlayerID = CreatureUtils.getControllerPlayerId(watcher);
Player controllerPlayer = Globals.playerManager.getPlayerFromId(controllerPlayerID);
//send message
controllerPlayer.addMessage(InventoryMessage.constructaddItemToInventoryMessage(creature.getId(), inventoryItem.getId(), ItemUtils.getType(inventoryItem)));
controllerPlayer.addMessage(InventoryMessage.constructserverCommandStoreItemMessage(
creature.getId(),
inventoryItem.getId(),
ItemUtils.getType(inventoryItem),
InventoryProtocol.INVENTORY_TYPE_NATURAL,
""
));
}
}
@ -553,18 +550,6 @@ public class ServerInventoryState implements BehaviorTree {
GravityUtils.serverAttemptActivateGravity(inWorldItem);
}
//need creature so we can figure out where to drop the item
public static void serverAttemptEjectItem(Entity creature, Entity item){
if(creature == null){
throw new Error("Provided null creature!");
}
if(item == null){
throw new Error("Provided null item!");
}
//if we're the server, immediately attempt the transform
ServerInventoryState.serverAttemptEjectItemTransform(creature,item);
}
/**
* [SERVER ONLY] Called when the server says to remove an item from all inventories
* Only does the remove, doesn't create the in-world item

View File

@ -324,7 +324,7 @@ public class CreatureUtils {
Entity itemInWorld = ContentSerialization.serverHydrateEntitySerialization(realm, serialization);
//add the item to the creature's inventory
Entity itemInInventory = ServerInventoryState.serverAttemptStoreItemTransform(creature, EntityLookupUtils.getEntityById(itemInWorld.getId()));
Entity itemInInventory = ServerInventoryState.attemptStoreItemAnyInventory(creature, EntityLookupUtils.getEntityById(itemInWorld.getId()));
//equip the item to the slot defined in the template
ServerToolbarState serverToolbarState = ServerToolbarState.getServerToolbarState(creature);
@ -338,7 +338,7 @@ public class CreatureUtils {
Entity itemInWorld = ItemUtils.serverSpawnBasicItem(realm, EntityUtils.getPosition(creature), serialization.getSubtype());
//add the item to the creature's inventory
Entity itemInInventory = ServerInventoryState.serverAttemptStoreItemTransform(creature, EntityLookupUtils.getEntityById(itemInWorld.getId()));
Entity itemInInventory = ServerInventoryState.attemptStoreItemAnyInventory(creature, EntityLookupUtils.getEntityById(itemInWorld.getId()));
//equip the item to the slot defined in the template
ServerEquipState serverEquipState = ServerEquipState.getEquipState(creature);
@ -349,7 +349,7 @@ public class CreatureUtils {
Entity itemInWorld = ItemUtils.serverSpawnBasicItem(realm, EntityUtils.getPosition(creature), naturalItem.getSubtype());
//add the item to the creature's inventory
ServerInventoryState.serverAttemptStoreItemTransform(creature, EntityLookupUtils.getEntityById(itemInWorld.getId()));
ServerInventoryState.attemptStoreItemAnyInventory(creature, EntityLookupUtils.getEntityById(itemInWorld.getId()));
}
}
}

View File

@ -73,6 +73,15 @@ public class InventoryProtocol implements ClientProtocolTemplate<InventoryMessag
}
}
} break;
case SERVERCOMMANDSTOREITEM: {
LoggerInterface.loggerNetworking.DEBUG("[CLIENT] STORE " + message.getitemEntId());
if(Globals.playerEntity != null){
ClientInventoryState inventoryState;
if((inventoryState = ClientInventoryState.getClientInventoryState(Globals.playerEntity))!=null){
inventoryState.addNetworkMessage(message);
}
}
} break;
case CLIENTREQUESTUNWATCHINVENTORY:
case CLIENTREQUESTWATCHINVENTORY:
case CLIENTREQUESTSTOREITEM:

View File

@ -19,6 +19,7 @@ public class InventoryMessage extends NetworkMessage {
SERVERCOMMANDUNEQUIPITEM,
CLIENTREQUESTUNEQUIPITEM,
CLIENTREQUESTSTOREITEM,
SERVERCOMMANDSTOREITEM,
CLIENTREQUESTWATCHINVENTORY,
CLIENTREQUESTUNWATCHINVENTORY,
CLIENTREQUESTADDTOOLBAR,
@ -330,6 +331,8 @@ public class InventoryMessage extends NetworkMessage {
return InventoryMessage.canParseclientRequestUnequipItemMessage(byteBuffer);
case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTSTOREITEM:
return InventoryMessage.canParseclientRequestStoreItemMessage(byteBuffer);
case TypeBytes.INVENTORY_MESSAGE_TYPE_SERVERCOMMANDSTOREITEM:
return InventoryMessage.canParseserverCommandStoreItemMessage(byteBuffer);
case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTWATCHINVENTORY:
if(byteBuffer.getRemaining() >= TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTWATCHINVENTORY_SIZE){
return true;
@ -780,6 +783,79 @@ public class InventoryMessage extends NetworkMessage {
return rVal;
}
/**
* Checks if a message of type serverCommandStoreItem can be parsed from the byte stream
*/
public static boolean canParseserverCommandStoreItemMessage(CircularByteBuffer byteBuffer){
int currentStreamLength = byteBuffer.getRemaining();
List<Byte> temporaryByteQueue = new LinkedList<Byte>();
if(currentStreamLength < 6){
return false;
}
if(currentStreamLength < 10){
return false;
}
int itemTemplateSize = 0;
if(currentStreamLength < 14){
return false;
} else {
temporaryByteQueue.add(byteBuffer.peek(10 + 0));
temporaryByteQueue.add(byteBuffer.peek(10 + 1));
temporaryByteQueue.add(byteBuffer.peek(10 + 2));
temporaryByteQueue.add(byteBuffer.peek(10 + 3));
itemTemplateSize = ByteStreamUtils.popIntFromByteQueue(temporaryByteQueue);
}
if(currentStreamLength < 14 + itemTemplateSize){
return false;
}
if(currentStreamLength < 18 + itemTemplateSize){
return false;
}
int equipPointIdSize = 0;
if(currentStreamLength < 22){
return false;
} else {
temporaryByteQueue.add(byteBuffer.peek(18 + itemTemplateSize + 0));
temporaryByteQueue.add(byteBuffer.peek(18 + itemTemplateSize + 1));
temporaryByteQueue.add(byteBuffer.peek(18 + itemTemplateSize + 2));
temporaryByteQueue.add(byteBuffer.peek(18 + itemTemplateSize + 3));
equipPointIdSize = ByteStreamUtils.popIntFromByteQueue(temporaryByteQueue);
}
if(currentStreamLength < 22 + itemTemplateSize + equipPointIdSize){
return false;
}
return true;
}
/**
* Parses a message of type serverCommandStoreItem
*/
public static InventoryMessage parseserverCommandStoreItemMessage(CircularByteBuffer byteBuffer, MessagePool pool){
InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE);
rVal.messageType = InventoryMessageType.SERVERCOMMANDSTOREITEM;
InventoryMessage.stripPacketHeader(byteBuffer);
rVal.settargetEntId(ByteStreamUtils.popIntFromByteQueue(byteBuffer));
rVal.setitemEntId(ByteStreamUtils.popIntFromByteQueue(byteBuffer));
rVal.setitemTemplate(ByteStreamUtils.popStringFromByteQueue(byteBuffer));
rVal.setcontainerType(ByteStreamUtils.popIntFromByteQueue(byteBuffer));
rVal.setequipPointId(ByteStreamUtils.popStringFromByteQueue(byteBuffer));
return rVal;
}
/**
* Constructs a message of type serverCommandStoreItem
*/
public static InventoryMessage constructserverCommandStoreItemMessage(int targetEntId,int itemEntId,String itemTemplate,int containerType,String equipPointId){
InventoryMessage rVal = new InventoryMessage(InventoryMessageType.SERVERCOMMANDSTOREITEM);
rVal.settargetEntId(targetEntId);
rVal.setitemEntId(itemEntId);
rVal.setitemTemplate(itemTemplate);
rVal.setcontainerType(containerType);
rVal.setequipPointId(equipPointId);
rVal.serialize();
return rVal;
}
/**
* Parses a message of type clientRequestWatchInventory
*/
@ -1184,6 +1260,41 @@ public class InventoryMessage extends NetworkMessage {
rawBytes[14+equipPointId.length()+i] = intValues[i];
}
break;
case SERVERCOMMANDSTOREITEM:
rawBytes = new byte[2+4+4+4+itemTemplate.length()+4+4+equipPointId.length()];
//message header
rawBytes[0] = TypeBytes.MESSAGE_TYPE_INVENTORY;
//entity messaage header
rawBytes[1] = TypeBytes.INVENTORY_MESSAGE_TYPE_SERVERCOMMANDSTOREITEM;
intValues = ByteStreamUtils.serializeIntToBytes(targetEntId);
for(int i = 0; i < 4; i++){
rawBytes[2+i] = intValues[i];
}
intValues = ByteStreamUtils.serializeIntToBytes(itemEntId);
for(int i = 0; i < 4; i++){
rawBytes[6+i] = intValues[i];
}
intValues = ByteStreamUtils.serializeIntToBytes(itemTemplate.length());
for(int i = 0; i < 4; i++){
rawBytes[10+i] = intValues[i];
}
stringBytes = itemTemplate.getBytes();
for(int i = 0; i < itemTemplate.length(); i++){
rawBytes[14+i] = stringBytes[i];
}
intValues = ByteStreamUtils.serializeIntToBytes(containerType);
for(int i = 0; i < 4; i++){
rawBytes[14+itemTemplate.length()+i] = intValues[i];
}
intValues = ByteStreamUtils.serializeIntToBytes(equipPointId.length());
for(int i = 0; i < 4; i++){
rawBytes[18+itemTemplate.length()+i] = intValues[i];
}
stringBytes = equipPointId.getBytes();
for(int i = 0; i < equipPointId.length(); i++){
rawBytes[22+itemTemplate.length()+i] = stringBytes[i];
}
break;
case CLIENTREQUESTWATCHINVENTORY:
rawBytes = new byte[2+4];
//message header

View File

@ -390,6 +390,11 @@ public abstract class NetworkMessage {
rVal = InventoryMessage.parseclientRequestStoreItemMessage(byteBuffer,pool);
}
break;
case TypeBytes.INVENTORY_MESSAGE_TYPE_SERVERCOMMANDSTOREITEM:
if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){
rVal = InventoryMessage.parseserverCommandStoreItemMessage(byteBuffer,pool);
}
break;
case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTWATCHINVENTORY:
if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){
rVal = InventoryMessage.parseclientRequestWatchInventoryMessage(byteBuffer,pool);

View File

@ -160,14 +160,15 @@ public class TypeBytes {
public static final byte INVENTORY_MESSAGE_TYPE_SERVERCOMMANDUNEQUIPITEM = 5;
public static final byte INVENTORY_MESSAGE_TYPE_CLIENTREQUESTUNEQUIPITEM = 6;
public static final byte INVENTORY_MESSAGE_TYPE_CLIENTREQUESTSTOREITEM = 7;
public static final byte INVENTORY_MESSAGE_TYPE_CLIENTREQUESTWATCHINVENTORY = 8;
public static final byte INVENTORY_MESSAGE_TYPE_CLIENTREQUESTUNWATCHINVENTORY = 9;
public static final byte INVENTORY_MESSAGE_TYPE_CLIENTREQUESTADDTOOLBAR = 10;
public static final byte INVENTORY_MESSAGE_TYPE_CLIENTREQUESTADDNATURAL = 11;
public static final byte INVENTORY_MESSAGE_TYPE_CLIENTUPDATETOOLBAR = 12;
public static final byte INVENTORY_MESSAGE_TYPE_CLIENTREQUESTPERFORMITEMACTION = 13;
public static final byte INVENTORY_MESSAGE_TYPE_CLIENTREQUESTCRAFT = 14;
public static final byte INVENTORY_MESSAGE_TYPE_SERVERUPDATEITEMCHARGES = 15;
public static final byte INVENTORY_MESSAGE_TYPE_SERVERCOMMANDSTOREITEM = 8;
public static final byte INVENTORY_MESSAGE_TYPE_CLIENTREQUESTWATCHINVENTORY = 9;
public static final byte INVENTORY_MESSAGE_TYPE_CLIENTREQUESTUNWATCHINVENTORY = 10;
public static final byte INVENTORY_MESSAGE_TYPE_CLIENTREQUESTADDTOOLBAR = 11;
public static final byte INVENTORY_MESSAGE_TYPE_CLIENTREQUESTADDNATURAL = 12;
public static final byte INVENTORY_MESSAGE_TYPE_CLIENTUPDATETOOLBAR = 13;
public static final byte INVENTORY_MESSAGE_TYPE_CLIENTREQUESTPERFORMITEMACTION = 14;
public static final byte INVENTORY_MESSAGE_TYPE_CLIENTREQUESTCRAFT = 15;
public static final byte INVENTORY_MESSAGE_TYPE_SERVERUPDATEITEMCHARGES = 16;
/*
Inventory packet sizes
*/

View File

@ -110,6 +110,7 @@ public class InventoryProtocol implements ServerProtocolTemplate<InventoryMessag
ServerInventoryState.getServerInventoryState(target).addNetworkMessage(message);
}
} break;
case SERVERCOMMANDSTOREITEM:
case SERVERCOMMANDUNEQUIPITEM:
case SERVERCOMMANDMOVEITEMCONTAINER:
case SERVERCOMMANDEQUIPITEM:

View File

@ -26,7 +26,7 @@ public class CollectItemNode implements AITreeNode {
if(parentPos.distance(targetPos) > CollisionEngine.DEFAULT_INTERACT_DISTANCE){
return AITreeNodeResult.FAILURE;
}
ServerInventoryState.serverAttemptStoreItemTransform(entity, target);
ServerInventoryState.attemptStoreItemAnyInventory(entity, target);
TargetEntityCategoryNode.setTarget(blackboard, null);
return AITreeNodeResult.SUCCESS;
}

View File

@ -7,13 +7,13 @@ import electrosphere.data.units.UnitEquippedItem;
import electrosphere.data.units.UnitLoader;
import electrosphere.engine.Globals;
import electrosphere.entity.Entity;
import electrosphere.entity.state.equip.ServerEquipState;
import electrosphere.entity.state.inventory.ServerInventoryState;
import electrosphere.entity.types.creature.ObjectTemplate;
import electrosphere.entity.types.EntityTypes.EntityType;
import electrosphere.entity.types.creature.CreatureUtils;
import electrosphere.entity.types.item.ItemUtils;
import electrosphere.logger.LoggerInterface;
import electrosphere.net.server.protocol.InventoryProtocol;
import electrosphere.server.datacell.Realm;
/**
@ -61,11 +61,7 @@ public class UnitUtils {
Entity itemInWorld = ItemUtils.serverSpawnBasicItem(realm, position, equippedItem.getItemId());
//add the item to the creature's inventory
Entity itemInInventory = ServerInventoryState.serverAttemptStoreItemTransform(rVal, itemInWorld);
//equip the item to the slot defined in the template
ServerEquipState serverEquipState = ServerEquipState.getEquipState(rVal);
serverEquipState.commandAttemptEquip(itemInInventory,serverEquipState.getEquipPoint(equippedItem.getPointId()));
ServerInventoryState.attemptStoreItemTransform(rVal, itemInWorld, InventoryProtocol.INVENTORY_TYPE_EQUIP, equippedItem.getPointId());
}
}

View File

@ -140,6 +140,17 @@
"itemEntId"
]
},
{
"messageName" : "serverCommandStoreItem",
"description" : "Commands that a given item be placed in a given container type on a given container",
"data" : [
"targetEntId",
"itemEntId",
"itemTemplate",
"containerType",
"equipPointId"
]
},
{
"messageName" : "clientRequestWatchInventory",
"description" : "Requests to watch the inventory of another entity",

View File

@ -40,7 +40,7 @@ public class ServerAttackTreeTests extends EntityTestTemplate {
Entity katana = ItemUtils.serverSpawnBasicItem(Globals.realmManager.first(), new Vector3d(0,0,0), "Katana2H");
//equip
Entity inInventoryItem = ServerInventoryState.serverAttemptStoreItemTransform(creature, katana);
Entity inInventoryItem = ServerInventoryState.attemptStoreItemAnyInventory(creature, katana);
ServerToolbarState serverToolbarState = ServerToolbarState.getServerToolbarState(creature);
serverToolbarState.attemptEquip(inInventoryItem, 0);
@ -75,7 +75,7 @@ public class ServerAttackTreeTests extends EntityTestTemplate {
Entity katana = ItemUtils.serverSpawnBasicItem(Globals.realmManager.first(), new Vector3d(0,0,0), "Katana2H");
//equip
Entity inInventoryItem = ServerInventoryState.serverAttemptStoreItemTransform(creature, katana);
Entity inInventoryItem = ServerInventoryState.attemptStoreItemAnyInventory(creature, katana);
ServerToolbarState serverToolbarState = ServerToolbarState.getServerToolbarState(creature);
serverToolbarState.attemptEquip(inInventoryItem, 0);

View File

@ -56,7 +56,7 @@ public class ClientEquipStateTests extends EntityTestTemplate {
assertEquals(1, clientSideItems.size());
//equip
Entity inInventoryItem = ServerInventoryState.serverAttemptStoreItemTransform(creature, katana);
Entity inInventoryItem = ServerInventoryState.attemptStoreItemAnyInventory(creature, katana);
ServerEquipState serverEquipState = ServerEquipState.getServerEquipState(creature);
serverEquipState.commandAttemptEquip(inInventoryItem, serverEquipState.getEquipPoint("handsCombined"));

View File

@ -37,7 +37,7 @@ public class ServerEquipStateTests extends EntityTestTemplate {
Entity katana = ItemUtils.serverSpawnBasicItem(Globals.realmManager.first(), new Vector3d(0,0,0), "Katana2H");
//equip
Entity inInventoryItem = ServerInventoryState.serverAttemptStoreItemTransform(creature, katana);
Entity inInventoryItem = ServerInventoryState.attemptStoreItemAnyInventory(creature, katana);
ServerEquipState serverEquipState = ServerEquipState.getServerEquipState(creature);
serverEquipState.commandAttemptEquip(inInventoryItem, serverEquipState.getEquipPoint("handsCombined"));
@ -70,7 +70,7 @@ public class ServerEquipStateTests extends EntityTestTemplate {
Entity katana2 = ItemUtils.serverSpawnBasicItem(Globals.realmManager.first(), new Vector3d(0,0,0), "Katana2H");
//equip
Entity inInventoryItem = ServerInventoryState.serverAttemptStoreItemTransform(creature, katana);
Entity inInventoryItem = ServerInventoryState.attemptStoreItemAnyInventory(creature, katana);
ServerEquipState serverEquipState = ServerEquipState.getServerEquipState(creature);
serverEquipState.commandAttemptEquip(inInventoryItem, serverEquipState.getEquipPoint("handsCombined"));
@ -78,7 +78,7 @@ public class ServerEquipStateTests extends EntityTestTemplate {
TestEngineUtils.simulateFrames(1);
//attempt to equip second katana
Entity inInventoryItem2 = ServerInventoryState.serverAttemptStoreItemTransform(creature, katana2);
Entity inInventoryItem2 = ServerInventoryState.attemptStoreItemAnyInventory(creature, katana2);
serverEquipState.commandAttemptEquip(inInventoryItem2, serverEquipState.getEquipPoint("handsCombined"));
//propagate to client