inventory work
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
This commit is contained in:
parent
7bcbe5d293
commit
91dd628cbb
@ -16,6 +16,7 @@ import electrosphere.entity.types.common.CommonEntityFlags;
|
||||
import electrosphere.entity.types.common.CommonEntityUtils;
|
||||
import electrosphere.logger.LoggerInterface;
|
||||
import electrosphere.net.parser.net.message.EntityMessage;
|
||||
import electrosphere.net.parser.net.message.InventoryMessage;
|
||||
|
||||
/**
|
||||
* Stores logic for interaction button
|
||||
@ -66,6 +67,8 @@ public class ButtonInteraction {
|
||||
case InteractionData.ON_INTERACT_INVENTORY: {
|
||||
LoggerInterface.loggerEngine.DEBUG("Interacting with inventory");
|
||||
InventoryMainWindow.viewInventory(target);
|
||||
InventoryMainWindow.viewInventory(Globals.playerEntity);
|
||||
Globals.clientConnection.queueOutgoingMessage(InventoryMessage.constructclientRequestWatchInventoryMessage(Globals.clientSceneWrapper.mapClientToServerId(target.getId())));
|
||||
} break;
|
||||
default: {
|
||||
throw new Error("Unhandled interaction signal " + interactionData.getOnInteract());
|
||||
|
||||
@ -192,12 +192,20 @@ public class WindowUtils {
|
||||
*/
|
||||
public static void attemptRedrawInventoryWindows(){
|
||||
//make sure we're client and the player entity exists
|
||||
if(Globals.RUN_CLIENT && Globals.playerEntity != null){
|
||||
if(Globals.RUN_CLIENT){
|
||||
if(Globals.playerEntity != null){
|
||||
if(Globals.elementService.containsWindow(WindowStrings.WINDOW_CHARACTER)){
|
||||
//redraw if necessary
|
||||
WindowUtils.replaceWindow(WindowStrings.WINDOW_CHARACTER, InventoryMainWindow.createInventoryWindow(Globals.playerEntity));
|
||||
}
|
||||
}
|
||||
if(Globals.targetContainer != null){
|
||||
if(Globals.elementService.containsWindow(WindowStrings.WINDOW_INVENTORY_TARGET)){
|
||||
//redraw if necessary
|
||||
WindowUtils.replaceWindow(WindowStrings.WINDOW_INVENTORY_TARGET, InventoryMainWindow.createInventoryWindow(Globals.targetContainer));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -70,6 +70,7 @@ public class InventoryMainWindow {
|
||||
}
|
||||
} else {
|
||||
if(Globals.elementService.getWindow(WindowStrings.WINDOW_INVENTORY_TARGET) == null){
|
||||
Globals.targetContainer = entity;
|
||||
//create window
|
||||
Window mainMenuWindow = InventoryMainWindow.createInventoryWindow(entity);
|
||||
//register
|
||||
@ -103,6 +104,9 @@ public class InventoryMainWindow {
|
||||
* @return The Window element for the window
|
||||
*/
|
||||
public static Window createInventoryWindow(Entity entity){
|
||||
if(entity == null){
|
||||
throw new Error("Trying to recreate inventory window with null entity!");
|
||||
}
|
||||
Window rVal = Window.createExpandableCenterAligned(Globals.renderingEngine.getOpenGLState());
|
||||
rVal.setMaxWidth(Globals.WINDOW_WIDTH / 2);
|
||||
rVal.setMarginBottom(MARGIN);
|
||||
@ -121,6 +125,9 @@ public class InventoryMainWindow {
|
||||
rVal.setOnNavigationCallback(new NavigationEventCallback() {public boolean execute(NavigationEvent event){
|
||||
WindowUtils.recursiveSetVisible(Globals.elementService.getWindow(windowString), false);
|
||||
Globals.elementService.unregisterWindow(windowString);
|
||||
if(windowString.equals(WindowStrings.WINDOW_INVENTORY_TARGET)){
|
||||
Globals.targetContainer = null;
|
||||
}
|
||||
if(Globals.cameraHandler.getTrackPlayerEntity()){
|
||||
Globals.controlHandler.hintUpdateControlState(ControlsState.MAIN_GAME);
|
||||
} else {
|
||||
|
||||
@ -93,6 +93,7 @@ public class ControlHandler {
|
||||
WindowStrings.VOXEL_TYPE_SELECTION,
|
||||
WindowStrings.SPAWN_TYPE_SELECTION,
|
||||
WindowStrings.WINDOW_CHARACTER,
|
||||
WindowStrings.WINDOW_INVENTORY_TARGET,
|
||||
WindowStrings.WINDOW_DEBUG,
|
||||
WindowStrings.WINDOW_MENU_INGAME_MAIN,
|
||||
WindowStrings.WINDOW_MENU_INVENTORY,
|
||||
@ -348,7 +349,7 @@ public class ControlHandler {
|
||||
private boolean onlyInventoryMenusOpen(){
|
||||
boolean foundInventory = false;
|
||||
for(String windowId : Globals.elementService.getCurrentWindowIds()){
|
||||
if(WindowUtils.isInventoryWindow(windowId) || WindowStrings.WINDOW_MENU_INVENTORY.equals(windowId) || WindowStrings.WINDOW_CHARACTER.equals(windowId)){
|
||||
if(WindowUtils.isInventoryWindow(windowId) || WindowStrings.WINDOW_MENU_INVENTORY.equals(windowId) || WindowStrings.WINDOW_CHARACTER.equals(windowId) || WindowStrings.WINDOW_INVENTORY_TARGET.equals(windowId)){
|
||||
foundInventory = true;
|
||||
} else if(Globals.elementService.getWindow(windowId) instanceof Window == false || ((Window)Globals.elementService.getWindow(windowId)).visible) {
|
||||
return false;
|
||||
|
||||
@ -429,6 +429,7 @@ public class Globals {
|
||||
//drag item state
|
||||
public static Entity draggedItem = null;
|
||||
public static Object dragSourceInventory = null;
|
||||
public static Entity targetContainer = null;
|
||||
|
||||
|
||||
|
||||
|
||||
@ -9,7 +9,9 @@ import electrosphere.client.interact.ClientInteractionEngine;
|
||||
import electrosphere.engine.Globals;
|
||||
import electrosphere.entity.state.attach.AttachUtils;
|
||||
import electrosphere.entity.state.hitbox.HitboxCollectionState;
|
||||
import electrosphere.entity.state.inventory.InventoryUtils;
|
||||
import electrosphere.entity.types.collision.CollisionObjUtils;
|
||||
import electrosphere.entity.types.item.ItemUtils;
|
||||
import electrosphere.renderer.actor.ActorUtils;
|
||||
import electrosphere.renderer.actor.instance.TextureInstancedActor;
|
||||
|
||||
@ -63,6 +65,12 @@ public class ClientEntityUtils {
|
||||
actor.free();
|
||||
}
|
||||
|
||||
//is an item in an inventory
|
||||
if(ItemUtils.getContainingParent(entity) != null){
|
||||
InventoryUtils.clientRemoveItemFromInventories(ItemUtils.getContainingParent(entity), entity);
|
||||
}
|
||||
|
||||
|
||||
if(Globals.clientSceneWrapper != null){
|
||||
Globals.clientSceneWrapper.getScene().deregisterEntity(entity);
|
||||
Globals.clientSceneWrapper.deregisterTranslationMapping(entity);
|
||||
|
||||
@ -7,6 +7,8 @@ import org.joml.Vector3d;
|
||||
import electrosphere.engine.Globals;
|
||||
import electrosphere.entity.state.attach.AttachUtils;
|
||||
import electrosphere.entity.state.hitbox.HitboxCollectionState;
|
||||
import electrosphere.entity.state.inventory.InventoryUtils;
|
||||
import electrosphere.entity.state.inventory.ServerInventoryState;
|
||||
import electrosphere.entity.state.server.ServerCharacterData;
|
||||
import electrosphere.entity.types.collision.CollisionObjUtils;
|
||||
import electrosphere.logger.LoggerInterface;
|
||||
@ -170,6 +172,13 @@ public class ServerEntityUtils {
|
||||
Globals.characterService.removeEntity(ServerCharacterData.getServerCharacterData(entity).getCharacterData());
|
||||
}
|
||||
|
||||
//
|
||||
//Stop inventory watching
|
||||
if(InventoryUtils.serverGetInventoryState(entity) != null){
|
||||
ServerInventoryState serverInventoryState = InventoryUtils.serverGetInventoryState(entity);
|
||||
serverInventoryState.destroy();
|
||||
}
|
||||
|
||||
//
|
||||
//deregister all behavior trees
|
||||
EntityUtils.cleanUpEntity(entity);
|
||||
|
||||
@ -5,6 +5,7 @@ import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import electrosphere.collision.PhysicsEntityUtils;
|
||||
import electrosphere.data.common.treedata.TreeDataAnimation;
|
||||
@ -374,6 +375,18 @@ public class ClientEquipState implements BehaviorTree {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs the actual logic to turn meshes on/off when unequipping an item
|
||||
* @param pointId The equipment point to unequip
|
||||
*/
|
||||
public void clientTransformUnequip(Entity itemEnt){
|
||||
for(Entry<String,Entity> pair : this.equipMap.entrySet()){
|
||||
if(pair.getValue().equals(itemEnt)){
|
||||
this.clientTransformUnequipPoint(pair.getKey());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a point has an item equipped
|
||||
* @param point the equip point
|
||||
|
||||
@ -13,6 +13,8 @@ import electrosphere.entity.btree.BehaviorTree;
|
||||
import electrosphere.entity.state.equip.ClientEquipState;
|
||||
import electrosphere.entity.state.equip.ClientToolbarState;
|
||||
import electrosphere.entity.state.item.ClientChargeState;
|
||||
import electrosphere.entity.types.item.ItemUtils;
|
||||
import electrosphere.logger.LoggerInterface;
|
||||
import electrosphere.net.parser.net.message.InventoryMessage;
|
||||
import electrosphere.net.server.protocol.InventoryProtocol;
|
||||
|
||||
@ -21,14 +23,26 @@ import electrosphere.net.server.protocol.InventoryProtocol;
|
||||
*/
|
||||
public class ClientInventoryState implements BehaviorTree {
|
||||
|
||||
/**
|
||||
* The queue of messages to handle
|
||||
*/
|
||||
CopyOnWriteArrayList<InventoryMessage> networkMessageQueue = new CopyOnWriteArrayList<InventoryMessage>();
|
||||
|
||||
/**
|
||||
* Parent entity of this inventory state
|
||||
*/
|
||||
Entity parent;
|
||||
|
||||
ClientInventoryState() {
|
||||
|
||||
}
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
private ClientInventoryState(){ }
|
||||
|
||||
/**
|
||||
* Creates a client inventory state
|
||||
* @param parent The parent entity
|
||||
* @return The client's inventory state
|
||||
*/
|
||||
public static ClientInventoryState clientCreateInventoryState(Entity parent){
|
||||
ClientInventoryState rVal = new ClientInventoryState();
|
||||
rVal.parent = parent;
|
||||
@ -43,30 +57,39 @@ public class ClientInventoryState implements BehaviorTree {
|
||||
networkMessageQueue.remove(message);
|
||||
switch(message.getMessageSubtype()){
|
||||
case ADDITEMTOINVENTORY: {
|
||||
if(Globals.clientSceneWrapper.containsServerId(message.getitemEntId())){
|
||||
LoggerInterface.loggerNetworking.WARNING("Client 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());
|
||||
} else {
|
||||
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
|
||||
Entity inInventorySpawnedItem = InventoryUtils.clientConstructInInventoryItem(parent,message.getitemTemplate());
|
||||
Entity inInventorySpawnedItem = InventoryUtils.clientConstructInInventoryItem(clientSideContainer,message.getitemTemplate());
|
||||
//map id
|
||||
if(inInventorySpawnedItem != null){
|
||||
Globals.clientSceneWrapper.mapIdToId(inInventorySpawnedItem.getId(), message.getentityId());
|
||||
Globals.clientSceneWrapper.mapIdToId(inInventorySpawnedItem.getId(), message.getitemEntId());
|
||||
}
|
||||
}
|
||||
//attempt re-render ui
|
||||
WindowUtils.attemptRedrawInventoryWindows();
|
||||
} break;
|
||||
case REMOVEITEMFROMINVENTORY: {
|
||||
LoggerInterface.loggerNetworking.WARNING("Client destroy item " + message.getentityId());
|
||||
Entity item = Globals.clientSceneWrapper.getEntityFromServerId(message.getentityId());
|
||||
if(item != null){
|
||||
InventoryUtils.clientRemoveItemFromInventories(parent, item);
|
||||
//attempt re-render ui
|
||||
WindowUtils.attemptRedrawInventoryWindows();
|
||||
//destroy the item
|
||||
ClientEntityUtils.destroyEntity(item);
|
||||
}
|
||||
} break;
|
||||
case SERVERCOMMANDMOVEITEMCONTAINER: {
|
||||
LoggerInterface.loggerNetworking.WARNING("Client move item container " + message.getentityId());
|
||||
//this is a command to switch an item from one inventory to another (ie equip->natural or vice-versa)
|
||||
Entity target = Globals.clientSceneWrapper.getEntityFromServerId(message.getentityId());
|
||||
switch(message.getcontainerType()){
|
||||
case InventoryProtocol.INVENTORY_TYPE_EQUIP: {
|
||||
Entity target = Globals.clientSceneWrapper.getEntityFromServerId(message.getentityId());
|
||||
String equipPointId = message.getequipPointId();
|
||||
if(InventoryUtils.hasNaturalInventory(parent)){
|
||||
UnrelationalInventoryState naturalInventory = InventoryUtils.getNaturalInventory(parent);
|
||||
@ -87,7 +110,6 @@ public class ClientInventoryState implements BehaviorTree {
|
||||
}
|
||||
} break;
|
||||
case InventoryProtocol.INVENTORY_TYPE_NATURAL: {
|
||||
Entity target = Globals.clientSceneWrapper.getEntityFromServerId(message.getentityId());
|
||||
if(InventoryUtils.hasNaturalInventory(parent)){
|
||||
UnrelationalInventoryState naturalInventory = InventoryUtils.getNaturalInventory(parent);
|
||||
naturalInventory.removeItem(target);
|
||||
@ -107,7 +129,6 @@ public class ClientInventoryState implements BehaviorTree {
|
||||
}
|
||||
} break;
|
||||
case InventoryProtocol.INVENTORY_TYPE_TOOLBAR: {
|
||||
Entity target = Globals.clientSceneWrapper.getEntityFromServerId(message.getentityId());
|
||||
if(InventoryUtils.hasNaturalInventory(parent)){
|
||||
UnrelationalInventoryState naturalInventory = InventoryUtils.getNaturalInventory(parent);
|
||||
naturalInventory.removeItem(target);
|
||||
@ -116,8 +137,10 @@ public class ClientInventoryState implements BehaviorTree {
|
||||
RelationalInventoryState equipInventory = InventoryUtils.getEquipInventory(parent);
|
||||
if(ClientEquipState.getClientEquipState(parent) != null){
|
||||
ClientEquipState clientEquipState = ClientEquipState.getClientEquipState(parent);
|
||||
if(equipInventory.containsItem(target)){
|
||||
clientEquipState.clientTransformUnequipPoint(equipInventory.getItemSlot(target));
|
||||
}
|
||||
}
|
||||
equipInventory.tryRemoveItem(target);
|
||||
}
|
||||
if(InventoryUtils.hasToolbarInventory(parent)){
|
||||
@ -131,6 +154,7 @@ public class ClientInventoryState implements BehaviorTree {
|
||||
WindowUtils.attemptRedrawInventoryWindows();
|
||||
} break;
|
||||
case SERVERCOMMANDUNEQUIPITEM: {
|
||||
LoggerInterface.loggerNetworking.WARNING("Client unequip item " + message.getequipPointId());
|
||||
switch(message.getcontainerType()){
|
||||
case InventoryProtocol.INVENTORY_TYPE_NATURAL: {
|
||||
throw new UnsupportedOperationException("unsupported!");
|
||||
@ -154,6 +178,7 @@ public class ClientInventoryState implements BehaviorTree {
|
||||
}
|
||||
} break;
|
||||
case SERVERCOMMANDEQUIPITEM: {
|
||||
LoggerInterface.loggerNetworking.WARNING("Client equip item " + message.getentityId());
|
||||
//translate equipper id
|
||||
Entity equipper = Globals.clientSceneWrapper.getEntityFromServerId(message.getequipperId());
|
||||
//spawn in world id
|
||||
@ -187,6 +212,7 @@ public class ClientInventoryState implements BehaviorTree {
|
||||
}
|
||||
} break;
|
||||
case SERVERUPDATEITEMCHARGES: {
|
||||
LoggerInterface.loggerNetworking.WARNING("Client set item charges " + message.getentityId());
|
||||
Entity clientInventoryItem = Globals.clientSceneWrapper.getEntityFromServerId(message.getentityId());
|
||||
ClientChargeState clientChargeState = ClientChargeState.getClientChargeState(clientInventoryItem);
|
||||
clientChargeState.setCharges(message.getcharges());
|
||||
@ -199,12 +225,107 @@ public class ClientInventoryState implements BehaviorTree {
|
||||
case CLIENTREQUESTEQUIPITEM:
|
||||
case CLIENTREQUESTUNEQUIPITEM:
|
||||
case CLIENTREQUESTPERFORMITEMACTION:
|
||||
case CLIENTREQUESTWATCHINVENTORY:
|
||||
case CLIENTREQUESTUNWATCHINVENTORY:
|
||||
break;
|
||||
}
|
||||
}
|
||||
this.networkMessageQueue.addAll(bouncedMessages);
|
||||
}
|
||||
|
||||
/**
|
||||
* Moves an item into an inventory on a container
|
||||
* @param containerEnt The container
|
||||
* @param itemEnt The item
|
||||
* @param targetContainer The type of container (natural, toolbar, etc)
|
||||
* @param targetSlot (Optional) The slot within the container
|
||||
*/
|
||||
private static void moveItem(Entity containerEnt, Entity itemEnt, int targetContainer, String targetSlot){
|
||||
if(ItemUtils.getContainingParent(itemEnt) != null){
|
||||
Entity existingContainerEnt = ItemUtils.getContainingParent(itemEnt);
|
||||
if(InventoryUtils.hasNaturalInventory(existingContainerEnt)){
|
||||
UnrelationalInventoryState naturalInventory = InventoryUtils.getNaturalInventory(existingContainerEnt);
|
||||
naturalInventory.removeItem(itemEnt);
|
||||
}
|
||||
if(InventoryUtils.hasToolbarInventory(existingContainerEnt)){
|
||||
RelationalInventoryState toolbarInventory = InventoryUtils.getToolbarInventory(existingContainerEnt);
|
||||
if(ClientToolbarState.hasClientToolbarState(existingContainerEnt)){
|
||||
ClientToolbarState toolbarState = ClientToolbarState.getClientToolbarState(existingContainerEnt);
|
||||
toolbarInventory.getEquipPointFromSlot(toolbarState.getSelectedSlot() + "");
|
||||
}
|
||||
toolbarInventory.tryRemoveItem(itemEnt);
|
||||
}
|
||||
if(InventoryUtils.hasEquipInventory(existingContainerEnt)){
|
||||
RelationalInventoryState equipInventory = InventoryUtils.getEquipInventory(existingContainerEnt);
|
||||
if(ClientEquipState.hasClientEquipState(existingContainerEnt)){
|
||||
ClientEquipState clientEquipState = ClientEquipState.getClientEquipState(existingContainerEnt);
|
||||
clientEquipState.clientTransformUnequip(itemEnt);
|
||||
}
|
||||
equipInventory.tryRemoveItem(itemEnt);
|
||||
}
|
||||
}
|
||||
switch(targetContainer){
|
||||
case InventoryProtocol.INVENTORY_TYPE_EQUIP: {
|
||||
String equipPointId = targetSlot;
|
||||
if(InventoryUtils.hasNaturalInventory(containerEnt)){
|
||||
UnrelationalInventoryState naturalInventory = InventoryUtils.getNaturalInventory(containerEnt);
|
||||
naturalInventory.removeItem(itemEnt);
|
||||
}
|
||||
if(InventoryUtils.hasEquipInventory(containerEnt)){
|
||||
RelationalInventoryState equipInventory = InventoryUtils.getEquipInventory(containerEnt);
|
||||
equipInventory.tryRemoveItem(itemEnt);
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void addNetworkMessage(InventoryMessage networkMessage) {
|
||||
networkMessageQueue.add(networkMessage);
|
||||
}
|
||||
|
||||
@ -180,9 +180,6 @@ public class InventoryUtils {
|
||||
if(item == null){
|
||||
throw new Error("Null item provided! " + item);
|
||||
}
|
||||
if(!CreatureUtils.isCreature(creature)){
|
||||
throw new Error("Creature is not a creature!");
|
||||
}
|
||||
if(!ItemUtils.isItem(item)){
|
||||
throw new Error("Item is not an item!");
|
||||
}
|
||||
@ -245,14 +242,19 @@ public class InventoryUtils {
|
||||
//if we are the server, immediately send required packets
|
||||
ServerDataCell dataCell = DataCellSearchUtils.getEntityDataCell(item);
|
||||
dataCell.broadcastNetworkMessage(EntityMessage.constructDestroyMessage(item.getId()));
|
||||
//tell player that their item has another charge
|
||||
if(CreatureUtils.hasControllerPlayerId(creature)){
|
||||
|
||||
//tell entities watching this inventory that their item has another charge
|
||||
ServerInventoryState serverInventoryState = InventoryUtils.serverGetInventoryState(creature);
|
||||
for(Entity watcher : serverInventoryState.getWatchers()){
|
||||
if(CreatureUtils.hasControllerPlayerId(watcher)){
|
||||
//get the player
|
||||
int controllerPlayerID = CreatureUtils.getControllerPlayerId(creature);
|
||||
int controllerPlayerID = CreatureUtils.getControllerPlayerId(watcher);
|
||||
Player controllerPlayer = Globals.playerManager.getPlayerFromId(controllerPlayerID);
|
||||
//send message
|
||||
controllerPlayer.addMessage(InventoryMessage.constructserverUpdateItemChargesMessage(foundExisting.getId(), serverChargeState.getCharges()));
|
||||
}
|
||||
}
|
||||
|
||||
//alert script engine
|
||||
ServerScriptUtils.fireSignalOnEntity(creature, "itemPickup", item.getId(), foundExisting.getId());
|
||||
//destroy the item that was left over
|
||||
@ -270,14 +272,19 @@ public class InventoryUtils {
|
||||
// ServerDataCell dataCell = Globals.dataCellLocationResolver.getDataCellAtPoint(EntityUtils.getPosition(item),item);
|
||||
//broadcast destroy entityq
|
||||
dataCell.broadcastNetworkMessage(EntityMessage.constructDestroyMessage(item.getId()));
|
||||
//tell controlling player that they have an item in their inventory
|
||||
if(CreatureUtils.hasControllerPlayerId(creature)){
|
||||
|
||||
//tell entities watching this inventory that they have an item in their inventory
|
||||
ServerInventoryState serverInventoryState = InventoryUtils.serverGetInventoryState(creature);
|
||||
for(Entity watcher : serverInventoryState.getWatchers()){
|
||||
if(CreatureUtils.hasControllerPlayerId(watcher)){
|
||||
//get the player
|
||||
int controllerPlayerID = CreatureUtils.getControllerPlayerId(creature);
|
||||
int controllerPlayerID = CreatureUtils.getControllerPlayerId(watcher);
|
||||
Player controllerPlayer = Globals.playerManager.getPlayerFromId(controllerPlayerID);
|
||||
//send message
|
||||
controllerPlayer.addMessage(InventoryMessage.constructaddItemToInventoryMessage(inventoryItem.getId(), ItemUtils.getType(inventoryItem)));
|
||||
controllerPlayer.addMessage(InventoryMessage.constructaddItemToInventoryMessage(creature.getId(), inventoryItem.getId(), ItemUtils.getType(inventoryItem)));
|
||||
}
|
||||
}
|
||||
|
||||
//alert script engine
|
||||
ServerScriptUtils.fireSignalOnEntity(creature, "itemPickup", item.getId(), inventoryItem.getId());
|
||||
//destroy the item that was left over
|
||||
@ -329,12 +336,11 @@ public class InventoryUtils {
|
||||
* @return The in-inventory item
|
||||
*/
|
||||
public static Entity serverAddToNatural(Entity creature, Entity item){
|
||||
boolean creatureIsCreature = CreatureUtils.isCreature(creature);
|
||||
boolean itemIsItem = ItemUtils.isItem(item);
|
||||
boolean hasInventory = hasNaturalInventory(creature);
|
||||
//check if the item is already in an inventory
|
||||
boolean itemIsInInventory = ItemUtils.itemIsInInventory(item);
|
||||
if(creatureIsCreature && itemIsItem && hasInventory){
|
||||
if(itemIsItem && hasInventory){
|
||||
//get inventory
|
||||
//for the moment we're just gonna get natural inventory
|
||||
//later we'll need to search through all creature inventories to find the item
|
||||
@ -342,9 +348,7 @@ public class InventoryUtils {
|
||||
//destroy in-world entity and create in-inventory item
|
||||
//we're doing this so that we're not constantly sending networking messages for invisible entities attached to the player
|
||||
Entity inventoryItem = item;
|
||||
boolean sendCreatePacket = false;
|
||||
if(!itemIsInInventory){
|
||||
sendCreatePacket = true;
|
||||
inventoryItem = ItemUtils.serverRecreateContainerItem(item, creature);
|
||||
ServerEntityUtils.destroyEntity(item);
|
||||
}
|
||||
@ -362,18 +366,19 @@ public class InventoryUtils {
|
||||
inventory.addItem(inventoryItem);
|
||||
//set item containing parent
|
||||
ItemUtils.setContainingParent(inventoryItem, creature);
|
||||
//tell controlling player that they have an item in their inventory
|
||||
if(CreatureUtils.hasControllerPlayerId(creature)){
|
||||
|
||||
//tell entities watching this inventory that they have an item in their inventory
|
||||
ServerInventoryState serverInventoryState = InventoryUtils.serverGetInventoryState(creature);
|
||||
for(Entity watcher : serverInventoryState.getWatchers()){
|
||||
if(CreatureUtils.hasControllerPlayerId(watcher)){
|
||||
//get the player
|
||||
int controllerPlayerID = CreatureUtils.getControllerPlayerId(creature);
|
||||
int controllerPlayerID = CreatureUtils.getControllerPlayerId(watcher);
|
||||
Player controllerPlayer = Globals.playerManager.getPlayerFromId(controllerPlayerID);
|
||||
//send message
|
||||
if(sendCreatePacket){
|
||||
controllerPlayer.addMessage(InventoryMessage.constructaddItemToInventoryMessage(inventoryItem.getId(), ItemUtils.getType(inventoryItem)));
|
||||
} else {
|
||||
controllerPlayer.addMessage(InventoryMessage.constructserverCommandMoveItemContainerMessage(inventoryItem.getId(), InventoryProtocol.INVENTORY_TYPE_NATURAL, ""));
|
||||
controllerPlayer.addMessage(InventoryMessage.constructaddItemToInventoryMessage(creature.getId(), inventoryItem.getId(), ItemUtils.getType(inventoryItem)));
|
||||
}
|
||||
}
|
||||
|
||||
//alert script engine
|
||||
ServerScriptUtils.fireSignalOnEntity(creature, "itemAddToNatural", item.getId(), inventoryItem.getId());
|
||||
return inventoryItem;
|
||||
@ -401,6 +406,7 @@ public class InventoryUtils {
|
||||
public static void clientAttemptStoreItem(Entity creature, Entity item){
|
||||
//tell the server we want to try the transform
|
||||
NetworkMessage requestPickupMessage = InventoryMessage.constructaddItemToInventoryMessage(
|
||||
Globals.clientSceneWrapper.mapClientToServerId(Globals.playerEntity.getId()),
|
||||
Globals.clientSceneWrapper.mapClientToServerId(item.getId()),
|
||||
ItemUtils.getType(item)
|
||||
);
|
||||
@ -415,9 +421,8 @@ public class InventoryUtils {
|
||||
*/
|
||||
public static Entity clientConstructInInventoryItem(Entity parentContainer, String type){
|
||||
//sanity checks
|
||||
boolean creatureIsCreature = CreatureUtils.isCreature(parentContainer);
|
||||
boolean hasInventory = InventoryUtils.hasNaturalInventory(parentContainer);
|
||||
if(creatureIsCreature && hasInventory){
|
||||
if(hasInventory){
|
||||
//if we pass sanity checks, actually perform transform
|
||||
//get inventory
|
||||
//for the moment we're just gonna get natural inventory
|
||||
@ -456,13 +461,12 @@ public class InventoryUtils {
|
||||
throw new Error("Provided null item!");
|
||||
}
|
||||
//verify creature is creature, item is item, inventory exists, and item is in inventory
|
||||
boolean creatureIsCreature = CreatureUtils.isCreature(creature);
|
||||
boolean itemIsItem = ItemUtils.isItem(item);
|
||||
boolean hasNaturalInventory = hasNaturalInventory(creature);
|
||||
boolean hasEquipInventory = hasEquipInventory(creature);
|
||||
//check if the item is in an inventory
|
||||
boolean itemIsInInventory = ItemUtils.itemIsInInventory(item);
|
||||
if(creatureIsCreature && itemIsItem && itemIsInInventory){
|
||||
if(itemIsItem && itemIsInInventory){
|
||||
if(hasNaturalInventory){
|
||||
//get inventory
|
||||
UnrelationalInventoryState inventory = getNaturalInventory(creature);
|
||||
@ -498,7 +502,22 @@ public class InventoryUtils {
|
||||
//get parent realm
|
||||
Realm realm = Globals.realmManager.getEntityRealm(creature);
|
||||
//find "in front of creature"
|
||||
Vector3d dropSpot = new Vector3d(EntityUtils.getPosition(creature)).add(CreatureUtils.getFacingVector(creature));
|
||||
Vector3d dropSpot = new Vector3d(EntityUtils.getPosition(creature));
|
||||
if(CreatureUtils.getFacingVector(creature) != null){
|
||||
dropSpot.add(CreatureUtils.getFacingVector(creature));
|
||||
}
|
||||
//
|
||||
//tell player that the item is no longer in their inventory
|
||||
ServerInventoryState serverInventoryState = InventoryUtils.serverGetInventoryState(creature);
|
||||
for(Entity watcher : serverInventoryState.getWatchers()){
|
||||
if(CreatureUtils.hasControllerPlayerId(watcher)){
|
||||
//get player
|
||||
int playerId = CreatureUtils.getControllerPlayerId(watcher);
|
||||
Player controllerPlayer = Globals.playerManager.getPlayerFromId(playerId);
|
||||
//tell the player to destroy the item
|
||||
controllerPlayer.addMessage(EntityMessage.constructDestroyMessage(item.getId()));
|
||||
}
|
||||
}
|
||||
//
|
||||
//compose item into in-world entity
|
||||
Entity inWorldItem = ItemUtils.serverSpawnBasicItem(realm,dropSpot,ItemUtils.getType(item));
|
||||
@ -554,9 +573,6 @@ public class InventoryUtils {
|
||||
if(item == null){
|
||||
throw new Error("Item is null!");
|
||||
}
|
||||
if(!CreatureUtils.isCreature(creature)){
|
||||
throw new Error("Creature is not a creature!");
|
||||
}
|
||||
if(!ItemUtils.isItem(item)){
|
||||
throw new Error("Item is not an item!");
|
||||
}
|
||||
@ -604,9 +620,6 @@ public class InventoryUtils {
|
||||
if(item == null){
|
||||
throw new Error("Item is null!");
|
||||
}
|
||||
if(!CreatureUtils.isCreature(creature)){
|
||||
throw new Error("Creature is not a creature!");
|
||||
}
|
||||
if(!ItemUtils.isItem(item)){
|
||||
throw new Error("Item is not an item!");
|
||||
}
|
||||
@ -641,14 +654,17 @@ public class InventoryUtils {
|
||||
}
|
||||
//
|
||||
//tell player that the item is no longer in their inventory
|
||||
if(CreatureUtils.hasControllerPlayerId(creature)){
|
||||
ServerInventoryState serverInventoryState = InventoryUtils.serverGetInventoryState(creature);
|
||||
for(Entity watcher : serverInventoryState.getWatchers()){
|
||||
if(CreatureUtils.hasControllerPlayerId(watcher)){
|
||||
//get player
|
||||
int playerId = CreatureUtils.getControllerPlayerId(creature);
|
||||
int playerId = CreatureUtils.getControllerPlayerId(watcher);
|
||||
Player controllerPlayer = Globals.playerManager.getPlayerFromId(playerId);
|
||||
//tell the player they don't have the item anymore
|
||||
controllerPlayer.addMessage(InventoryMessage.constructremoveItemFromInventoryMessage(item.getId()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroys an item that is in an inventory
|
||||
@ -701,13 +717,16 @@ public class InventoryUtils {
|
||||
}
|
||||
//
|
||||
//tell player that the item is no longer in their inventory
|
||||
if(CreatureUtils.hasControllerPlayerId(creature)){
|
||||
ServerInventoryState serverInventoryState = InventoryUtils.serverGetInventoryState(creature);
|
||||
for(Entity watcher : serverInventoryState.getWatchers()){
|
||||
if(CreatureUtils.hasControllerPlayerId(watcher)){
|
||||
//get player
|
||||
int playerId = CreatureUtils.getControllerPlayerId(creature);
|
||||
int playerId = CreatureUtils.getControllerPlayerId(watcher);
|
||||
Player controllerPlayer = Globals.playerManager.getPlayerFromId(playerId);
|
||||
//tell the player they don't have the item anymore
|
||||
controllerPlayer.addMessage(InventoryMessage.constructremoveItemFromInventoryMessage(item.getId()));
|
||||
}
|
||||
}
|
||||
ServerEntityUtils.destroyEntity(item);
|
||||
}
|
||||
|
||||
|
||||
@ -4,13 +4,16 @@ import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import electrosphere.data.creature.equip.EquipPoint;
|
||||
import electrosphere.engine.Globals;
|
||||
import electrosphere.entity.Entity;
|
||||
import electrosphere.entity.btree.BehaviorTree;
|
||||
import electrosphere.entity.state.equip.ServerEquipState;
|
||||
import electrosphere.entity.state.equip.ServerToolbarState;
|
||||
import electrosphere.entity.types.creature.CreatureUtils;
|
||||
import electrosphere.entity.types.item.ItemUtils;
|
||||
import electrosphere.logger.LoggerInterface;
|
||||
import electrosphere.net.parser.net.message.InventoryMessage;
|
||||
import electrosphere.net.server.player.Player;
|
||||
import electrosphere.server.datacell.utils.EntityLookupUtils;
|
||||
import electrosphere.server.datacell.utils.ServerBehaviorTreeUtils;
|
||||
|
||||
@ -24,6 +27,16 @@ public class ServerInventoryState implements BehaviorTree {
|
||||
*/
|
||||
List<InventoryMessage> networkMessageQueue = new LinkedList<InventoryMessage>();
|
||||
|
||||
/**
|
||||
* All entities watching this inventory state
|
||||
*/
|
||||
List<Entity> watchers = new LinkedList<Entity>();
|
||||
|
||||
/**
|
||||
* All entities that the parent is watching
|
||||
*/
|
||||
List<Entity> toWatch = new LinkedList<Entity>();
|
||||
|
||||
/**
|
||||
* The parent of the state
|
||||
*/
|
||||
@ -32,7 +45,7 @@ public class ServerInventoryState implements BehaviorTree {
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
ServerInventoryState() {}
|
||||
private ServerInventoryState(){ }
|
||||
|
||||
/**
|
||||
* Creates an inventory state
|
||||
@ -42,6 +55,7 @@ public class ServerInventoryState implements BehaviorTree {
|
||||
public static ServerInventoryState serverCreateInventoryState(Entity parent){
|
||||
ServerInventoryState rVal = new ServerInventoryState();
|
||||
rVal.parent = parent;
|
||||
rVal.watchers.add(parent);
|
||||
ServerBehaviorTreeUtils.attachBTreeToEntity(parent, rVal);
|
||||
return rVal;
|
||||
}
|
||||
@ -52,7 +66,7 @@ public class ServerInventoryState implements BehaviorTree {
|
||||
networkMessageQueue.remove(message);
|
||||
switch(message.getMessageSubtype()){
|
||||
case ADDITEMTOINVENTORY: {
|
||||
InventoryUtils.serverAttemptStoreItemTransform(parent, EntityLookupUtils.getEntityById(message.getentityId()));
|
||||
InventoryUtils.serverAttemptStoreItemTransform(parent, EntityLookupUtils.getEntityById(message.getitemEntId()));
|
||||
} break;
|
||||
case REMOVEITEMFROMINVENTORY: {
|
||||
InventoryUtils.serverAttemptEjectItem(parent, EntityLookupUtils.getEntityById(message.getentityId()));
|
||||
@ -115,6 +129,18 @@ public class ServerInventoryState implements BehaviorTree {
|
||||
InventoryUtils.serverAttemptStoreItemTransform(container, itemEnt, message.getcontainerType(), message.getequipPointId());
|
||||
}
|
||||
} break;
|
||||
case CLIENTREQUESTWATCHINVENTORY: {
|
||||
Entity targetEnt = EntityLookupUtils.getEntityById(message.gettargetEntId());
|
||||
if(targetEnt != null){
|
||||
this.watch(targetEnt);
|
||||
}
|
||||
} break;
|
||||
case CLIENTREQUESTUNWATCHINVENTORY: {
|
||||
Entity targetEnt = EntityLookupUtils.getEntityById(message.gettargetEntId());
|
||||
if(targetEnt != null){
|
||||
this.unwatch(targetEnt);
|
||||
}
|
||||
} break;
|
||||
case CLIENTREQUESTCRAFT:
|
||||
case CLIENTREQUESTPERFORMITEMACTION:
|
||||
case SERVERCOMMANDUNEQUIPITEM:
|
||||
@ -134,4 +160,89 @@ public class ServerInventoryState implements BehaviorTree {
|
||||
networkMessageQueue.add(networkMessage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tries to watch another entity's inventories
|
||||
* @param target The entity that contains the inventories
|
||||
*/
|
||||
public void watch(Entity target){
|
||||
if(target == this.parent){
|
||||
throw new Error("Trying to watch self!");
|
||||
}
|
||||
if(!this.toWatch.contains(target)){
|
||||
this.toWatch.add(target);
|
||||
if(InventoryUtils.serverGetInventoryState(target) != null){
|
||||
ServerInventoryState targetState = InventoryUtils.serverGetInventoryState(target);
|
||||
if(!targetState.watchers.contains(this.parent)){
|
||||
targetState.watchers.add(this.parent);
|
||||
targetState.sendInventoryState(this.parent);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tries to watch another entity's inventories
|
||||
* @param target The entity that contains the inventories
|
||||
*/
|
||||
public void unwatch(Entity target){
|
||||
if(target == this.parent){
|
||||
throw new Error("Trying to unwatch self!");
|
||||
}
|
||||
if(this.toWatch.contains(target)){
|
||||
this.toWatch.remove(target);
|
||||
}
|
||||
if(InventoryUtils.serverGetInventoryState(target) != null){
|
||||
ServerInventoryState targetState = InventoryUtils.serverGetInventoryState(target);
|
||||
if(!targetState.watchers.contains(this.parent)){
|
||||
targetState.watchers.remove(this.parent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the state of this inventory to a given entity
|
||||
*/
|
||||
public void sendInventoryState(Entity playerEntity){
|
||||
//don't send if the target doesn't also have a player
|
||||
if(!CreatureUtils.hasControllerPlayerId(playerEntity)){
|
||||
return;
|
||||
}
|
||||
int playerId = CreatureUtils.getControllerPlayerId(playerEntity);
|
||||
Player controllerPlayer = Globals.playerManager.getPlayerFromId(playerId);
|
||||
if(InventoryUtils.hasNaturalInventory(this.parent)){
|
||||
UnrelationalInventoryState naturalInventory = InventoryUtils.getNaturalInventory(this.parent);
|
||||
for(Entity itemEnt : naturalInventory.getItems()){
|
||||
controllerPlayer.addMessage(InventoryMessage.constructaddItemToInventoryMessage(this.parent.getId(), itemEnt.getId(), ItemUtils.getType(itemEnt)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroys this entity's inventory state
|
||||
*/
|
||||
public void destroy(){
|
||||
for(Entity target : this.toWatch){
|
||||
if(InventoryUtils.serverGetInventoryState(target) != null){
|
||||
ServerInventoryState targetState = InventoryUtils.serverGetInventoryState(target);
|
||||
targetState.watchers.remove(this.parent);
|
||||
targetState.toWatch.remove(this.parent);
|
||||
}
|
||||
}
|
||||
for(Entity target : this.watchers){
|
||||
if(InventoryUtils.serverGetInventoryState(target) != null){
|
||||
ServerInventoryState targetState = InventoryUtils.serverGetInventoryState(target);
|
||||
targetState.watchers.remove(this.parent);
|
||||
targetState.toWatch.remove(this.parent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the list of all entities watching this inventory state
|
||||
* @return the list of all entities watching this inventory state
|
||||
*/
|
||||
public List<Entity> getWatchers(){
|
||||
return this.watchers;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -636,7 +636,7 @@ public class ItemUtils {
|
||||
if(CreatureUtils.hasControllerPlayerId(parent)){
|
||||
int playerId = CreatureUtils.getControllerPlayerId(parent);
|
||||
Player player = Globals.playerManager.getPlayerFromId(playerId);
|
||||
player.addMessage(InventoryMessage.constructaddItemToInventoryMessage(rVal.getId(), itemData.getId()));
|
||||
player.addMessage(InventoryMessage.constructaddItemToInventoryMessage(parent.getId(), rVal.getId(), itemData.getId()));
|
||||
}
|
||||
|
||||
return rVal;
|
||||
|
||||
@ -74,6 +74,8 @@ public class InventoryProtocol implements ClientProtocolTemplate<InventoryMessag
|
||||
}
|
||||
}
|
||||
} break;
|
||||
case CLIENTREQUESTUNWATCHINVENTORY:
|
||||
case CLIENTREQUESTWATCHINVENTORY:
|
||||
case CLIENTREQUESTSTOREITEM:
|
||||
case CLIENTREQUESTCRAFT:
|
||||
case CLIENTUPDATETOOLBAR:
|
||||
|
||||
@ -19,6 +19,8 @@ public class InventoryMessage extends NetworkMessage {
|
||||
SERVERCOMMANDUNEQUIPITEM,
|
||||
CLIENTREQUESTUNEQUIPITEM,
|
||||
CLIENTREQUESTSTOREITEM,
|
||||
CLIENTREQUESTWATCHINVENTORY,
|
||||
CLIENTREQUESTUNWATCHINVENTORY,
|
||||
CLIENTREQUESTADDTOOLBAR,
|
||||
CLIENTREQUESTADDNATURAL,
|
||||
CLIENTUPDATETOOLBAR,
|
||||
@ -328,6 +330,18 @@ public class InventoryMessage extends NetworkMessage {
|
||||
return InventoryMessage.canParseclientRequestUnequipItemMessage(byteBuffer);
|
||||
case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTSTOREITEM:
|
||||
return InventoryMessage.canParseclientRequestStoreItemMessage(byteBuffer);
|
||||
case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTWATCHINVENTORY:
|
||||
if(byteBuffer.getRemaining() >= TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTWATCHINVENTORY_SIZE){
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTUNWATCHINVENTORY:
|
||||
if(byteBuffer.getRemaining() >= TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTUNWATCHINVENTORY_SIZE){
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTADDTOOLBAR:
|
||||
if(byteBuffer.getRemaining() >= TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTADDTOOLBAR_SIZE){
|
||||
return true;
|
||||
@ -373,17 +387,20 @@ public class InventoryMessage extends NetworkMessage {
|
||||
if(currentStreamLength < 6){
|
||||
return false;
|
||||
}
|
||||
int itemTemplateSize = 0;
|
||||
if(currentStreamLength < 10){
|
||||
return false;
|
||||
}
|
||||
int itemTemplateSize = 0;
|
||||
if(currentStreamLength < 14){
|
||||
return false;
|
||||
} else {
|
||||
temporaryByteQueue.add(byteBuffer.peek(6 + 0));
|
||||
temporaryByteQueue.add(byteBuffer.peek(6 + 1));
|
||||
temporaryByteQueue.add(byteBuffer.peek(6 + 2));
|
||||
temporaryByteQueue.add(byteBuffer.peek(6 + 3));
|
||||
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 < 10 + itemTemplateSize){
|
||||
if(currentStreamLength < 14 + itemTemplateSize){
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@ -396,7 +413,8 @@ public class InventoryMessage extends NetworkMessage {
|
||||
InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE);
|
||||
rVal.messageType = InventoryMessageType.ADDITEMTOINVENTORY;
|
||||
InventoryMessage.stripPacketHeader(byteBuffer);
|
||||
rVal.setentityId(ByteStreamUtils.popIntFromByteQueue(byteBuffer));
|
||||
rVal.settargetEntId(ByteStreamUtils.popIntFromByteQueue(byteBuffer));
|
||||
rVal.setitemEntId(ByteStreamUtils.popIntFromByteQueue(byteBuffer));
|
||||
rVal.setitemTemplate(ByteStreamUtils.popStringFromByteQueue(byteBuffer));
|
||||
return rVal;
|
||||
}
|
||||
@ -404,9 +422,10 @@ public class InventoryMessage extends NetworkMessage {
|
||||
/**
|
||||
* Constructs a message of type addItemToInventory
|
||||
*/
|
||||
public static InventoryMessage constructaddItemToInventoryMessage(int entityId,String itemTemplate){
|
||||
public static InventoryMessage constructaddItemToInventoryMessage(int targetEntId,int itemEntId,String itemTemplate){
|
||||
InventoryMessage rVal = new InventoryMessage(InventoryMessageType.ADDITEMTOINVENTORY);
|
||||
rVal.setentityId(entityId);
|
||||
rVal.settargetEntId(targetEntId);
|
||||
rVal.setitemEntId(itemEntId);
|
||||
rVal.setitemTemplate(itemTemplate);
|
||||
rVal.serialize();
|
||||
return rVal;
|
||||
@ -761,6 +780,48 @@ public class InventoryMessage extends NetworkMessage {
|
||||
return rVal;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses a message of type clientRequestWatchInventory
|
||||
*/
|
||||
public static InventoryMessage parseclientRequestWatchInventoryMessage(CircularByteBuffer byteBuffer, MessagePool pool){
|
||||
InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE);
|
||||
rVal.messageType = InventoryMessageType.CLIENTREQUESTWATCHINVENTORY;
|
||||
InventoryMessage.stripPacketHeader(byteBuffer);
|
||||
rVal.settargetEntId(ByteStreamUtils.popIntFromByteQueue(byteBuffer));
|
||||
return rVal;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a message of type clientRequestWatchInventory
|
||||
*/
|
||||
public static InventoryMessage constructclientRequestWatchInventoryMessage(int targetEntId){
|
||||
InventoryMessage rVal = new InventoryMessage(InventoryMessageType.CLIENTREQUESTWATCHINVENTORY);
|
||||
rVal.settargetEntId(targetEntId);
|
||||
rVal.serialize();
|
||||
return rVal;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses a message of type clientRequestUnwatchInventory
|
||||
*/
|
||||
public static InventoryMessage parseclientRequestUnwatchInventoryMessage(CircularByteBuffer byteBuffer, MessagePool pool){
|
||||
InventoryMessage rVal = (InventoryMessage)pool.get(MessageType.INVENTORY_MESSAGE);
|
||||
rVal.messageType = InventoryMessageType.CLIENTREQUESTUNWATCHINVENTORY;
|
||||
InventoryMessage.stripPacketHeader(byteBuffer);
|
||||
rVal.settargetEntId(ByteStreamUtils.popIntFromByteQueue(byteBuffer));
|
||||
return rVal;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a message of type clientRequestUnwatchInventory
|
||||
*/
|
||||
public static InventoryMessage constructclientRequestUnwatchInventoryMessage(int targetEntId){
|
||||
InventoryMessage rVal = new InventoryMessage(InventoryMessageType.CLIENTREQUESTUNWATCHINVENTORY);
|
||||
rVal.settargetEntId(targetEntId);
|
||||
rVal.serialize();
|
||||
return rVal;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses a message of type clientRequestAddToolbar
|
||||
*/
|
||||
@ -948,22 +1009,26 @@ public class InventoryMessage extends NetworkMessage {
|
||||
byte[] stringBytes;
|
||||
switch(this.messageType){
|
||||
case ADDITEMTOINVENTORY:
|
||||
rawBytes = new byte[2+4+4+itemTemplate.length()];
|
||||
rawBytes = new byte[2+4+4+4+itemTemplate.length()];
|
||||
//message header
|
||||
rawBytes[0] = TypeBytes.MESSAGE_TYPE_INVENTORY;
|
||||
//entity messaage header
|
||||
rawBytes[1] = TypeBytes.INVENTORY_MESSAGE_TYPE_ADDITEMTOINVENTORY;
|
||||
intValues = ByteStreamUtils.serializeIntToBytes(entityId);
|
||||
intValues = ByteStreamUtils.serializeIntToBytes(targetEntId);
|
||||
for(int i = 0; i < 4; i++){
|
||||
rawBytes[2+i] = intValues[i];
|
||||
}
|
||||
intValues = ByteStreamUtils.serializeIntToBytes(itemTemplate.length());
|
||||
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[10+i] = stringBytes[i];
|
||||
rawBytes[14+i] = stringBytes[i];
|
||||
}
|
||||
break;
|
||||
case REMOVEITEMFROMINVENTORY:
|
||||
@ -1119,6 +1184,28 @@ public class InventoryMessage extends NetworkMessage {
|
||||
rawBytes[14+equipPointId.length()+i] = intValues[i];
|
||||
}
|
||||
break;
|
||||
case CLIENTREQUESTWATCHINVENTORY:
|
||||
rawBytes = new byte[2+4];
|
||||
//message header
|
||||
rawBytes[0] = TypeBytes.MESSAGE_TYPE_INVENTORY;
|
||||
//entity messaage header
|
||||
rawBytes[1] = TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTWATCHINVENTORY;
|
||||
intValues = ByteStreamUtils.serializeIntToBytes(targetEntId);
|
||||
for(int i = 0; i < 4; i++){
|
||||
rawBytes[2+i] = intValues[i];
|
||||
}
|
||||
break;
|
||||
case CLIENTREQUESTUNWATCHINVENTORY:
|
||||
rawBytes = new byte[2+4];
|
||||
//message header
|
||||
rawBytes[0] = TypeBytes.MESSAGE_TYPE_INVENTORY;
|
||||
//entity messaage header
|
||||
rawBytes[1] = TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTUNWATCHINVENTORY;
|
||||
intValues = ByteStreamUtils.serializeIntToBytes(targetEntId);
|
||||
for(int i = 0; i < 4; i++){
|
||||
rawBytes[2+i] = intValues[i];
|
||||
}
|
||||
break;
|
||||
case CLIENTREQUESTADDTOOLBAR:
|
||||
rawBytes = new byte[2+4+4];
|
||||
//message header
|
||||
|
||||
@ -390,6 +390,16 @@ public abstract class NetworkMessage {
|
||||
rVal = InventoryMessage.parseclientRequestStoreItemMessage(byteBuffer,pool);
|
||||
}
|
||||
break;
|
||||
case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTWATCHINVENTORY:
|
||||
if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){
|
||||
rVal = InventoryMessage.parseclientRequestWatchInventoryMessage(byteBuffer,pool);
|
||||
}
|
||||
break;
|
||||
case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTUNWATCHINVENTORY:
|
||||
if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){
|
||||
rVal = InventoryMessage.parseclientRequestUnwatchInventoryMessage(byteBuffer,pool);
|
||||
}
|
||||
break;
|
||||
case TypeBytes.INVENTORY_MESSAGE_TYPE_CLIENTREQUESTADDTOOLBAR:
|
||||
if(InventoryMessage.canParseMessage(byteBuffer,secondByte)){
|
||||
rVal = InventoryMessage.parseclientRequestAddToolbarMessage(byteBuffer,pool);
|
||||
|
||||
@ -160,16 +160,20 @@ 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_CLIENTREQUESTADDTOOLBAR = 8;
|
||||
public static final byte INVENTORY_MESSAGE_TYPE_CLIENTREQUESTADDNATURAL = 9;
|
||||
public static final byte INVENTORY_MESSAGE_TYPE_CLIENTUPDATETOOLBAR = 10;
|
||||
public static final byte INVENTORY_MESSAGE_TYPE_CLIENTREQUESTPERFORMITEMACTION = 11;
|
||||
public static final byte INVENTORY_MESSAGE_TYPE_CLIENTREQUESTCRAFT = 12;
|
||||
public static final byte INVENTORY_MESSAGE_TYPE_SERVERUPDATEITEMCHARGES = 13;
|
||||
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;
|
||||
/*
|
||||
Inventory packet sizes
|
||||
*/
|
||||
public static final byte INVENTORY_MESSAGE_TYPE_REMOVEITEMFROMINVENTORY_SIZE = 6;
|
||||
public static final byte INVENTORY_MESSAGE_TYPE_CLIENTREQUESTWATCHINVENTORY_SIZE = 6;
|
||||
public static final byte INVENTORY_MESSAGE_TYPE_CLIENTREQUESTUNWATCHINVENTORY_SIZE = 6;
|
||||
public static final byte INVENTORY_MESSAGE_TYPE_CLIENTREQUESTADDTOOLBAR_SIZE = 10;
|
||||
public static final byte INVENTORY_MESSAGE_TYPE_CLIENTREQUESTADDNATURAL_SIZE = 6;
|
||||
public static final byte INVENTORY_MESSAGE_TYPE_CLIENTUPDATETOOLBAR_SIZE = 6;
|
||||
|
||||
@ -101,6 +101,8 @@ public class InventoryProtocol implements ServerProtocolTemplate<InventoryMessag
|
||||
// InventoryUtils.serverGetInventoryState(target).addNetworkMessage(message);
|
||||
}
|
||||
} break;
|
||||
case CLIENTREQUESTUNWATCHINVENTORY:
|
||||
case CLIENTREQUESTWATCHINVENTORY:
|
||||
case CLIENTREQUESTSTOREITEM: {
|
||||
target = EntityLookupUtils.getEntityById(connectionHandler.getPlayerEntityId());
|
||||
if(target != null && InventoryUtils.hasNaturalInventory(target)){
|
||||
|
||||
@ -75,7 +75,8 @@
|
||||
"messageName" : "addItemToInventory",
|
||||
"description" : "Requests that the server add the item to the client entity's appropriate inventory",
|
||||
"data" : [
|
||||
"entityId",
|
||||
"targetEntId",
|
||||
"itemEntId",
|
||||
"itemTemplate"
|
||||
]
|
||||
},
|
||||
@ -139,6 +140,20 @@
|
||||
"itemEntId"
|
||||
]
|
||||
},
|
||||
{
|
||||
"messageName" : "clientRequestWatchInventory",
|
||||
"description" : "Requests to watch the inventory of another entity",
|
||||
"data" : [
|
||||
"targetEntId"
|
||||
]
|
||||
},
|
||||
{
|
||||
"messageName" : "clientRequestUnwatchInventory",
|
||||
"description" : "Requests to stop watching the inventory of another entity",
|
||||
"data" : [
|
||||
"targetEntId"
|
||||
]
|
||||
},
|
||||
{
|
||||
"messageName" : "clientRequestAddToolbar",
|
||||
"description" : "Requests that the server add the item to the client entity's toolbar",
|
||||
|
||||
Loading…
Reference in New Issue
Block a user