flip inventory util error checking paradigm
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
0cb08e3d42
commit
2173f96b0b
@ -369,31 +369,28 @@ public class ClientInventoryState implements BehaviorTree {
|
|||||||
* @return The in-inventory item entity
|
* @return The in-inventory item entity
|
||||||
*/
|
*/
|
||||||
public static Entity clientConstructInInventoryItem(Entity parentContainer, String type){
|
public static Entity clientConstructInInventoryItem(Entity parentContainer, String type){
|
||||||
//sanity checks
|
if(!InventoryUtils.hasNaturalInventory(parentContainer)){
|
||||||
boolean hasInventory = InventoryUtils.hasNaturalInventory(parentContainer);
|
return null;
|
||||||
if(hasInventory){
|
|
||||||
//if we pass sanity checks, actually perform transform
|
|
||||||
//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
|
|
||||||
UnrelationalInventoryState inventory = InventoryUtils.getNaturalInventory(parentContainer);
|
|
||||||
//create item
|
|
||||||
//TODO: optimize by directly creating the container item instead of first spawning regular item
|
|
||||||
LoggerInterface.loggerNetworking.DEBUG("[CLIENT] Spawning temporary in-world item before placing into inventory");
|
|
||||||
Entity spawnedItem = ItemUtils.clientSpawnBasicItem(type);
|
|
||||||
//convert to in-inventory
|
|
||||||
Entity inventoryItem = ItemUtils.clientRecreateContainerItem(spawnedItem, parentContainer);
|
|
||||||
//destroy the item that was left over
|
|
||||||
ClientEntityUtils.destroyEntity(spawnedItem);
|
|
||||||
//store item in inventory
|
|
||||||
inventory.addItem(inventoryItem);
|
|
||||||
//set item containing parent
|
|
||||||
ItemUtils.setContainingParent(inventoryItem, parentContainer);
|
|
||||||
//return
|
|
||||||
return inventoryItem;
|
|
||||||
}
|
}
|
||||||
//if we fail, return null
|
//if we pass sanity checks, actually perform transform
|
||||||
return null;
|
//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
|
||||||
|
UnrelationalInventoryState inventory = InventoryUtils.getNaturalInventory(parentContainer);
|
||||||
|
//create item
|
||||||
|
//TODO: optimize by directly creating the container item instead of first spawning regular item
|
||||||
|
LoggerInterface.loggerNetworking.DEBUG("[CLIENT] Spawning temporary in-world item before placing into inventory");
|
||||||
|
Entity spawnedItem = ItemUtils.clientSpawnBasicItem(type);
|
||||||
|
//convert to in-inventory
|
||||||
|
Entity inventoryItem = ItemUtils.clientRecreateContainerItem(spawnedItem, parentContainer);
|
||||||
|
//destroy the item that was left over
|
||||||
|
ClientEntityUtils.destroyEntity(spawnedItem);
|
||||||
|
//store item in inventory
|
||||||
|
inventory.addItem(inventoryItem);
|
||||||
|
//set item containing parent
|
||||||
|
ItemUtils.setContainingParent(inventoryItem, parentContainer);
|
||||||
|
//return
|
||||||
|
return inventoryItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -426,54 +426,53 @@ public class ServerInventoryState implements BehaviorTree {
|
|||||||
* @return The in-inventory item
|
* @return The in-inventory item
|
||||||
*/
|
*/
|
||||||
public static Entity serverAddToNatural(Entity creature, Entity item){
|
public static Entity serverAddToNatural(Entity creature, Entity item){
|
||||||
boolean itemIsItem = ItemUtils.isItem(item);
|
if(!ItemUtils.isItem(item)){
|
||||||
boolean hasInventory = InventoryUtils.hasNaturalInventory(creature);
|
return null;
|
||||||
//check if the item is already in an inventory
|
|
||||||
boolean itemIsInInventory = ItemUtils.itemIsInInventory(item);
|
|
||||||
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
|
|
||||||
UnrelationalInventoryState inventory = InventoryUtils.getNaturalInventory(creature);
|
|
||||||
//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;
|
|
||||||
if(!itemIsInInventory){
|
|
||||||
inventoryItem = ItemUtils.serverRecreateContainerItem(item, creature);
|
|
||||||
ServerEntityUtils.destroyEntity(item);
|
|
||||||
}
|
|
||||||
if(InventoryUtils.hasEquipInventory(creature) && InventoryUtils.getEquipInventory(creature).containsItem(item)){
|
|
||||||
InventoryUtils.getEquipInventory(creature).tryRemoveItem(item);
|
|
||||||
}
|
|
||||||
if(InventoryUtils.hasToolbarInventory(creature) && InventoryUtils.getToolbarInventory(creature).containsItem(item)){
|
|
||||||
if(ServerToolbarState.getServerToolbarState(creature) != null){
|
|
||||||
ServerToolbarState serverToolbarState = ServerToolbarState.getServerToolbarState(creature);
|
|
||||||
serverToolbarState.unequip(item);
|
|
||||||
}
|
|
||||||
InventoryUtils.getToolbarInventory(creature).tryRemoveItem(item);
|
|
||||||
}
|
|
||||||
//store item in inventory
|
|
||||||
inventory.addItem(inventoryItem);
|
|
||||||
//set item containing parent
|
|
||||||
ItemUtils.setContainingParent(inventoryItem, creature);
|
|
||||||
|
|
||||||
//tell entities watching this inventory that they have an item in their inventory
|
|
||||||
ServerInventoryState serverInventoryState = ServerInventoryState.getServerInventoryState(creature);
|
|
||||||
for(Entity watcher : serverInventoryState.getWatchers()){
|
|
||||||
if(CreatureUtils.hasControllerPlayerId(watcher)){
|
|
||||||
//get the player
|
|
||||||
int controllerPlayerID = CreatureUtils.getControllerPlayerId(watcher);
|
|
||||||
Player controllerPlayer = Globals.playerManager.getPlayerFromId(controllerPlayerID);
|
|
||||||
//send message
|
|
||||||
controllerPlayer.addMessage(InventoryMessage.constructaddItemToInventoryMessage(creature.getId(), inventoryItem.getId(), ItemUtils.getType(inventoryItem)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//alert script engine
|
|
||||||
ServerScriptUtils.fireSignalOnEntity(creature, "itemAddToNatural", item.getId(), inventoryItem.getId());
|
|
||||||
return inventoryItem;
|
|
||||||
}
|
}
|
||||||
return null;
|
if(InventoryUtils.hasNaturalInventory(creature)){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
//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
|
||||||
|
UnrelationalInventoryState inventory = InventoryUtils.getNaturalInventory(creature);
|
||||||
|
//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;
|
||||||
|
if(!ItemUtils.itemIsInInventory(item)){
|
||||||
|
inventoryItem = ItemUtils.serverRecreateContainerItem(item, creature);
|
||||||
|
ServerEntityUtils.destroyEntity(item);
|
||||||
|
}
|
||||||
|
if(InventoryUtils.hasEquipInventory(creature) && InventoryUtils.getEquipInventory(creature).containsItem(item)){
|
||||||
|
InventoryUtils.getEquipInventory(creature).tryRemoveItem(item);
|
||||||
|
}
|
||||||
|
if(InventoryUtils.hasToolbarInventory(creature) && InventoryUtils.getToolbarInventory(creature).containsItem(item)){
|
||||||
|
if(ServerToolbarState.getServerToolbarState(creature) != null){
|
||||||
|
ServerToolbarState serverToolbarState = ServerToolbarState.getServerToolbarState(creature);
|
||||||
|
serverToolbarState.unequip(item);
|
||||||
|
}
|
||||||
|
InventoryUtils.getToolbarInventory(creature).tryRemoveItem(item);
|
||||||
|
}
|
||||||
|
//store item in inventory
|
||||||
|
inventory.addItem(inventoryItem);
|
||||||
|
//set item containing parent
|
||||||
|
ItemUtils.setContainingParent(inventoryItem, creature);
|
||||||
|
|
||||||
|
//tell entities watching this inventory that they have an item in their inventory
|
||||||
|
ServerInventoryState serverInventoryState = ServerInventoryState.getServerInventoryState(creature);
|
||||||
|
for(Entity watcher : serverInventoryState.getWatchers()){
|
||||||
|
if(CreatureUtils.hasControllerPlayerId(watcher)){
|
||||||
|
//get the player
|
||||||
|
int controllerPlayerID = CreatureUtils.getControllerPlayerId(watcher);
|
||||||
|
Player controllerPlayer = Globals.playerManager.getPlayerFromId(controllerPlayerID);
|
||||||
|
//send message
|
||||||
|
controllerPlayer.addMessage(InventoryMessage.constructaddItemToInventoryMessage(creature.getId(), inventoryItem.getId(), ItemUtils.getType(inventoryItem)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//alert script engine
|
||||||
|
ServerScriptUtils.fireSignalOnEntity(creature, "itemAddToNatural", item.getId(), inventoryItem.getId());
|
||||||
|
return inventoryItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -488,72 +487,70 @@ public class ServerInventoryState implements BehaviorTree {
|
|||||||
if(item == null){
|
if(item == null){
|
||||||
throw new Error("Provided null item!");
|
throw new Error("Provided null item!");
|
||||||
}
|
}
|
||||||
//verify creature is creature, item is item, inventory exists, and item is in inventory
|
if(!ItemUtils.isItem(item)){
|
||||||
boolean itemIsItem = ItemUtils.isItem(item);
|
return;
|
||||||
boolean hasNaturalInventory = InventoryUtils.hasNaturalInventory(creature);
|
|
||||||
boolean hasEquipInventory = InventoryUtils.hasEquipInventory(creature);
|
|
||||||
//check if the item is in an inventory
|
|
||||||
boolean itemIsInInventory = ItemUtils.itemIsInInventory(item);
|
|
||||||
if(itemIsItem && itemIsInInventory){
|
|
||||||
if(hasNaturalInventory){
|
|
||||||
//get inventory
|
|
||||||
UnrelationalInventoryState inventory = InventoryUtils.getNaturalInventory(creature);
|
|
||||||
//remove item from inventory
|
|
||||||
inventory.removeItem(item);
|
|
||||||
}
|
|
||||||
if(hasEquipInventory){
|
|
||||||
//get inventory
|
|
||||||
RelationalInventoryState inventory = InventoryUtils.getEquipInventory(creature);
|
|
||||||
//get inventory slot
|
|
||||||
String inventorySlot = inventory.getItemSlot(item);
|
|
||||||
//remove item from inventory
|
|
||||||
if(inventory.tryRemoveItem(item) != null){
|
|
||||||
//get real world item
|
|
||||||
Entity realWorldItem = ItemUtils.getRealWorldEntity(item);
|
|
||||||
if(realWorldItem != null){
|
|
||||||
//Tell players to unequip the item
|
|
||||||
Realm realm = Globals.realmManager.getEntityRealm(realWorldItem);
|
|
||||||
if(realm != null){
|
|
||||||
//get closest chunk
|
|
||||||
ServerDataCell dataCell = Globals.entityDataCellMapper.getEntityDataCell(realWorldItem);
|
|
||||||
//broadcast destroy item
|
|
||||||
NetworkMessage unequipMessage = InventoryMessage.constructserverCommandUnequipItemMessage(creature.getId(), InventoryProtocol.INVENTORY_TYPE_EQUIP, inventorySlot);
|
|
||||||
dataCell.broadcastNetworkMessage(unequipMessage);
|
|
||||||
}
|
|
||||||
//drop item
|
|
||||||
ServerEquipState equipState = ServerEquipState.getEquipState(creature);
|
|
||||||
equipState.serverTransformUnequipPoint(inventorySlot);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ServerInventoryState.serverRemoveItemFromInventories(creature, item);
|
|
||||||
//get parent realm
|
|
||||||
Realm realm = Globals.realmManager.getEntityRealm(creature);
|
|
||||||
//find "in front of 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 = ServerInventoryState.getServerInventoryState(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));
|
|
||||||
//destroy the entity on server side
|
|
||||||
ServerEntityUtils.destroyEntity(item);
|
|
||||||
//activate gravity
|
|
||||||
GravityUtils.serverAttemptActivateGravity(inWorldItem);
|
|
||||||
}
|
}
|
||||||
|
if(!ItemUtils.itemIsInInventory(item)){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(InventoryUtils.hasNaturalInventory(creature)){
|
||||||
|
//get inventory
|
||||||
|
UnrelationalInventoryState inventory = InventoryUtils.getNaturalInventory(creature);
|
||||||
|
//remove item from inventory
|
||||||
|
inventory.removeItem(item);
|
||||||
|
}
|
||||||
|
if(InventoryUtils.hasEquipInventory(creature)){
|
||||||
|
//get inventory
|
||||||
|
RelationalInventoryState inventory = InventoryUtils.getEquipInventory(creature);
|
||||||
|
//get inventory slot
|
||||||
|
String inventorySlot = inventory.getItemSlot(item);
|
||||||
|
//remove item from inventory
|
||||||
|
if(inventory.tryRemoveItem(item) != null){
|
||||||
|
//get real world item
|
||||||
|
Entity realWorldItem = ItemUtils.getRealWorldEntity(item);
|
||||||
|
if(realWorldItem != null){
|
||||||
|
//Tell players to unequip the item
|
||||||
|
Realm realm = Globals.realmManager.getEntityRealm(realWorldItem);
|
||||||
|
if(realm != null){
|
||||||
|
//get closest chunk
|
||||||
|
ServerDataCell dataCell = Globals.entityDataCellMapper.getEntityDataCell(realWorldItem);
|
||||||
|
//broadcast destroy item
|
||||||
|
NetworkMessage unequipMessage = InventoryMessage.constructserverCommandUnequipItemMessage(creature.getId(), InventoryProtocol.INVENTORY_TYPE_EQUIP, inventorySlot);
|
||||||
|
dataCell.broadcastNetworkMessage(unequipMessage);
|
||||||
|
}
|
||||||
|
//drop item
|
||||||
|
ServerEquipState equipState = ServerEquipState.getEquipState(creature);
|
||||||
|
equipState.serverTransformUnequipPoint(inventorySlot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ServerInventoryState.serverRemoveItemFromInventories(creature, item);
|
||||||
|
//get parent realm
|
||||||
|
Realm realm = Globals.realmManager.getEntityRealm(creature);
|
||||||
|
//find "in front of 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 = ServerInventoryState.getServerInventoryState(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));
|
||||||
|
//destroy the entity on server side
|
||||||
|
ServerEntityUtils.destroyEntity(item);
|
||||||
|
//activate gravity
|
||||||
|
GravityUtils.serverAttemptActivateGravity(inWorldItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
//need creature so we can figure out where to drop the item
|
//need creature so we can figure out where to drop the item
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user