From a3ab967b1c6154476ceb809cee8eb12674eda4a2 Mon Sep 17 00:00:00 2001 From: austin Date: Wed, 14 May 2025 12:42:57 -0400 Subject: [PATCH] fix move util on client inventory side --- .../entity/ClientEntityUtils.java | 2 +- .../state/inventory/ClientInventoryState.java | 36 ++++++++++--------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/main/java/electrosphere/entity/ClientEntityUtils.java b/src/main/java/electrosphere/entity/ClientEntityUtils.java index d349e2cb..59e7151e 100644 --- a/src/main/java/electrosphere/entity/ClientEntityUtils.java +++ b/src/main/java/electrosphere/entity/ClientEntityUtils.java @@ -67,7 +67,7 @@ public class ClientEntityUtils { //is an item in an inventory if(ItemUtils.getContainingParent(entity) != null){ - ClientInventoryState.clientRemoveItemFromInventories(ItemUtils.getContainingParent(entity), entity); + ClientInventoryState.clientRemoveItemFromInventories(entity); } diff --git a/src/main/java/electrosphere/entity/state/inventory/ClientInventoryState.java b/src/main/java/electrosphere/entity/state/inventory/ClientInventoryState.java index 11088725..a2e5f219 100644 --- a/src/main/java/electrosphere/entity/state/inventory/ClientInventoryState.java +++ b/src/main/java/electrosphere/entity/state/inventory/ClientInventoryState.java @@ -62,12 +62,13 @@ public class ClientInventoryState implements BehaviorTree { networkMessageQueue.remove(message); switch(message.getMessageSubtype()){ case SERVERCOMMANDSTOREITEM: { - LoggerInterface.loggerNetworking.WARNING("Client create/move item " + message.getitemEntId()); Entity clientSideContainer = Globals.clientSceneWrapper.getEntityFromServerId(message.gettargetEntId()); Entity clientSideItem = null; if(Globals.clientSceneWrapper.containsServerId(message.getitemEntId())){ + LoggerInterface.loggerNetworking.WARNING("Client move item " + message.getitemEntId()); clientSideItem = Globals.clientSceneWrapper.getEntityFromServerId(message.getitemEntId()); } else { + LoggerInterface.loggerNetworking.WARNING("Client create item " + message.getitemEntId()); clientSideItem = ClientInventoryState.clientConstructInInventoryItem(clientSideContainer,message.getitemTemplate()); Globals.clientSceneWrapper.mapIdToId(clientSideItem.getId(), message.getitemEntId()); } @@ -88,10 +89,10 @@ public class ClientInventoryState implements BehaviorTree { WindowUtils.attemptRedrawInventoryWindows(); } break; case REMOVEITEMFROMINVENTORY: { - LoggerInterface.loggerNetworking.WARNING("Client destroy item " + message.getentityId()); + LoggerInterface.loggerNetworking.WARNING("Client remove item from inventories " + message.getentityId()); Entity item = Globals.clientSceneWrapper.getEntityFromServerId(message.getentityId()); if(item != null){ - ClientInventoryState.clientRemoveItemFromInventories(parent, item); + ClientInventoryState.clientRemoveItemFromInventories(item); //attempt re-render ui WindowUtils.attemptRedrawInventoryWindows(); } @@ -332,6 +333,9 @@ public class ClientInventoryState implements BehaviorTree { } } } + // + //set containing parent + ItemUtils.setContainingParent(itemEnt, containerEnt); } /** @@ -423,13 +427,9 @@ public class ClientInventoryState implements BehaviorTree { /** * [CLIENT ONLY] Called when the server says to remove an item from all inventories * Only does the remove, doesn't create the in-world item - * @param creature The creature to remove the item from (likely to be player entity) * @param item The item to remove */ - public static void clientRemoveItemFromInventories(Entity creature, Entity item){ - if(creature == null){ - throw new Error("Creature is null!"); - } + public static void clientRemoveItemFromInventories(Entity item){ if(item == null){ throw new Error("Item is null!"); } @@ -439,31 +439,35 @@ public class ClientInventoryState implements BehaviorTree { if(!ItemUtils.itemIsInInventory(item)){ throw new Error("Item is not in an inventory!"); } + if(ItemUtils.getContainingParent(item) == null){ + throw new Error("Trying to remove non-container item from inventories"); + } + Entity container = ItemUtils.getContainingParent(item); //check if the item is in an inventory - if(InventoryUtils.hasNaturalInventory(creature)){ + if(InventoryUtils.hasNaturalInventory(container)){ //get inventory - UnrelationalInventoryState inventory = InventoryUtils.getNaturalInventory(creature); + UnrelationalInventoryState inventory = InventoryUtils.getNaturalInventory(container); //remove item from inventory inventory.removeItem(item); } - if(InventoryUtils.hasEquipInventory(creature)){ + if(InventoryUtils.hasEquipInventory(container)){ //get inventory - RelationalInventoryState inventory = InventoryUtils.getEquipInventory(creature); + RelationalInventoryState inventory = InventoryUtils.getEquipInventory(container); //get real world item Entity realWorldItem = ItemUtils.getRealWorldEntity(item); if(realWorldItem != null){ //drop item - ClientEquipState equipState = ClientEquipState.getEquipState(creature); + ClientEquipState equipState = ClientEquipState.getEquipState(container); equipState.clientTransformUnequipPoint(inventory.getItemSlot(item)); } //remove item from inventory inventory.tryRemoveItem(item); } - if(InventoryUtils.hasToolbarInventory(creature)){ - RelationalInventoryState toolbarInventory = InventoryUtils.getToolbarInventory(creature); + if(InventoryUtils.hasToolbarInventory(container)){ + RelationalInventoryState toolbarInventory = InventoryUtils.getToolbarInventory(container); toolbarInventory.tryRemoveItem(item); Globals.cursorState.hintClearBlockCursor(); - ClientToolbarState.getClientToolbarState(creature).update(); + ClientToolbarState.getClientToolbarState(container).update(); } }