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
|
||||
*/
|
||||
public static Entity clientConstructInInventoryItem(Entity parentContainer, String type){
|
||||
//sanity checks
|
||||
boolean hasInventory = InventoryUtils.hasNaturalInventory(parentContainer);
|
||||
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(!InventoryUtils.hasNaturalInventory(parentContainer)){
|
||||
return null;
|
||||
}
|
||||
//if we fail, return null
|
||||
return null;
|
||||
//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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -426,54 +426,53 @@ public class ServerInventoryState implements BehaviorTree {
|
||||
* @return The in-inventory item
|
||||
*/
|
||||
public static Entity serverAddToNatural(Entity creature, Entity item){
|
||||
boolean itemIsItem = ItemUtils.isItem(item);
|
||||
boolean hasInventory = InventoryUtils.hasNaturalInventory(creature);
|
||||
//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;
|
||||
if(!ItemUtils.isItem(item)){
|
||||
return null;
|
||||
}
|
||||
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){
|
||||
throw new Error("Provided null item!");
|
||||
}
|
||||
//verify creature is creature, item is item, inventory exists, and item is in inventory
|
||||
boolean itemIsItem = ItemUtils.isItem(item);
|
||||
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.isItem(item)){
|
||||
return;
|
||||
}
|
||||
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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user