From 43bb67ca577460d6431d2e15acf692202aa4b858 Mon Sep 17 00:00:00 2001 From: austin Date: Wed, 14 May 2025 13:10:43 -0400 Subject: [PATCH] item work --- docs/src/progress/renderertodo.md | 2 ++ .../client/ui/components/ItemIconPanel.java | 2 +- .../ui/components/NaturalInventoryPanel.java | 16 +++++++++------- .../datacell/gridded/GriddedDataCellManager.java | 8 +++++++- .../serialization/ContentSerialization.java | 13 +++++++++---- 5 files changed, 28 insertions(+), 13 deletions(-) diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index 79295783..abffd03c 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -1765,6 +1765,8 @@ Unified container movement utils Break up InventoryUtils class Update inventory utility logic Fix styling for inventory panel ui element +Fix content serialization bug with attached items +Fix playing audio without item defined in natural inventory panel diff --git a/src/main/java/electrosphere/client/ui/components/ItemIconPanel.java b/src/main/java/electrosphere/client/ui/components/ItemIconPanel.java index 6f6d27dc..40f3d79a 100644 --- a/src/main/java/electrosphere/client/ui/components/ItemIconPanel.java +++ b/src/main/java/electrosphere/client/ui/components/ItemIconPanel.java @@ -182,7 +182,7 @@ public class ItemIconPanel { onReceiveItem.run(); Item itemData = Globals.gameConfigCurrent.getItemMap().getItem(ItemUtils.getType(Globals.draggedItem)); if(Globals.virtualAudioSourceManager != null){ - if(itemData.getItemAudio() != null && itemData.getItemAudio().getUIReleaseAudio() != null){ + if(itemData != null && itemData.getItemAudio() != null && itemData.getItemAudio().getUIReleaseAudio() != null){ Globals.virtualAudioSourceManager.createVirtualAudioSource(itemData.getItemAudio().getUIReleaseAudio(), VirtualAudioSourceType.UI, false); } else { Globals.virtualAudioSourceManager.createVirtualAudioSource(AssetDataStrings.UI_SFX_ITEM_RELEASE, VirtualAudioSourceType.UI, false); diff --git a/src/main/java/electrosphere/client/ui/components/NaturalInventoryPanel.java b/src/main/java/electrosphere/client/ui/components/NaturalInventoryPanel.java index 4005704d..06f97a05 100644 --- a/src/main/java/electrosphere/client/ui/components/NaturalInventoryPanel.java +++ b/src/main/java/electrosphere/client/ui/components/NaturalInventoryPanel.java @@ -133,13 +133,15 @@ public class NaturalInventoryPanel { panel = ItemIconPanel.createPanel(currentItem, i, inventory); } else { panel = ItemIconPanel.createEmptyItemPanel(() -> { - NetworkMessage requestPickupMessage = InventoryMessage.constructclientRequestStoreItemMessage( - Globals.clientSceneWrapper.mapClientToServerId(entity.getId()), - InventoryProtocol.INVENTORY_TYPE_NATURAL, - 0 + "", - Globals.clientSceneWrapper.mapClientToServerId(Globals.draggedItem.getId()) - ); - Globals.clientConnection.queueOutgoingMessage(requestPickupMessage); + if(Globals.draggedItem != null){ + NetworkMessage requestPickupMessage = InventoryMessage.constructclientRequestStoreItemMessage( + Globals.clientSceneWrapper.mapClientToServerId(entity.getId()), + InventoryProtocol.INVENTORY_TYPE_NATURAL, + 0 + "", + Globals.clientSceneWrapper.mapClientToServerId(Globals.draggedItem.getId()) + ); + Globals.clientConnection.queueOutgoingMessage(requestPickupMessage); + } }); } panelContainer.addChild(panel); diff --git a/src/main/java/electrosphere/server/datacell/gridded/GriddedDataCellManager.java b/src/main/java/electrosphere/server/datacell/gridded/GriddedDataCellManager.java index c280035b..80f2faca 100644 --- a/src/main/java/electrosphere/server/datacell/gridded/GriddedDataCellManager.java +++ b/src/main/java/electrosphere/server/datacell/gridded/GriddedDataCellManager.java @@ -862,7 +862,13 @@ public class GriddedDataCellManager implements DataCellManager, VoxelCellManager Long key = this.getServerDataCellKey(localWorldPos); //generate content GriddedDataCellLoaderService.queueLocationBasedOperation(key, () -> { - serverContentManager.generateContentForDataCell(parent, localWorldPos, rVal, cellKey); + try { + serverContentManager.generateContentForDataCell(parent, localWorldPos, rVal, cellKey); + } catch(Error e){ + e.printStackTrace(); + } catch(Exception e){ + e.printStackTrace(); + } }); //generates physics for the cell in a dedicated thread then finally registers loadedCellsLock.lock(); diff --git a/src/main/java/electrosphere/server/entity/serialization/ContentSerialization.java b/src/main/java/electrosphere/server/entity/serialization/ContentSerialization.java index 5b7a38db..48a5280e 100644 --- a/src/main/java/electrosphere/server/entity/serialization/ContentSerialization.java +++ b/src/main/java/electrosphere/server/entity/serialization/ContentSerialization.java @@ -47,6 +47,10 @@ public class ContentSerialization { //do not serialize engine entities continue; } + //don't serialize attached entities + if(AttachUtils.isAttached(entity)){ + continue; + } if(type != null){ EntitySerialization serializedEntity = ContentSerialization.constructEntitySerialization(entity); rVal.serializedEntities.add(serializedEntity); @@ -62,6 +66,9 @@ public class ContentSerialization { * @return The serialization of the entity */ public static EntitySerialization constructEntitySerialization(Entity entity){ + if(AttachUtils.isAttached(entity)){ + throw new Error("Trying to serialize attached entity!"); + } EntitySerialization serializedEntity = new EntitySerialization(); serializedEntity.setPosition(EntityUtils.getPosition(entity)); serializedEntity.setRotation(EntityUtils.getRotation(entity)); @@ -76,10 +83,8 @@ public class ContentSerialization { serializedEntity.setSubtype(CommonEntityUtils.getEntitySubtype(entity)); } break; case ITEM: { - if(!AttachUtils.isAttached(entity)){ - serializedEntity.setType(EntityType.ITEM.getValue()); - serializedEntity.setSubtype(CommonEntityUtils.getEntitySubtype(entity)); - } + serializedEntity.setType(EntityType.ITEM.getValue()); + serializedEntity.setSubtype(CommonEntityUtils.getEntitySubtype(entity)); } break; case FOLIAGE: { serializedEntity.setType(EntityType.FOLIAGE.getValue());