diff --git a/assets/Data/entity/items/materials.json b/assets/Data/entity/items/materials.json index 59b0a4c6..cf6c8c8e 100644 --- a/assets/Data/entity/items/materials.json +++ b/assets/Data/entity/items/materials.json @@ -25,6 +25,58 @@ "offsetZ" : 0 }, "iconPath" : "Textures/icons/itemIconItemGeneric.png" + }, + { + "id" : "Rock", + "tokens" : [ + "GRAVITY", + "TARGETABLE" + ], + "graphicsTemplate": { + "model": { + "path" : "Models/items/materials/rock1.glb" + } + }, + "collidable": { + "type" : "CUBE", + "dimension1" : 0.1, + "dimension2" : 0.1, + "dimension3" : 0.35, + "rotX": 0, + "rotY": 0, + "rotZ": 0, + "rotW": 1, + "offsetX" : 0, + "offsetY" : 0.05, + "offsetZ" : 0 + }, + "iconPath" : "Textures/icons/itemIconItemGeneric.png" + }, + { + "id" : "Stick", + "tokens" : [ + "GRAVITY", + "TARGETABLE" + ], + "graphicsTemplate": { + "model": { + "path" : "Models/items/materials/stick1.glb" + } + }, + "collidable": { + "type" : "CUBE", + "dimension1" : 0.1, + "dimension2" : 0.1, + "dimension3" : 0.35, + "rotX": 0, + "rotY": 0, + "rotZ": 0, + "rotW": 1, + "offsetX" : 0, + "offsetY" : 0.05, + "offsetZ" : 0 + }, + "iconPath" : "Textures/icons/itemIconItemGeneric.png" } ], "files" : [ diff --git a/assets/Models/items/materials/rock1.glb b/assets/Models/items/materials/rock1.glb new file mode 100644 index 00000000..05bd95d7 Binary files /dev/null and b/assets/Models/items/materials/rock1.glb differ diff --git a/assets/Models/items/materials/stick1.glb b/assets/Models/items/materials/stick1.glb new file mode 100644 index 00000000..30de2a89 Binary files /dev/null and b/assets/Models/items/materials/stick1.glb differ diff --git a/assets/Models/items/materials/texturemap.json b/assets/Models/items/materials/texturemap.json index 919497d5..555c8d44 100644 --- a/assets/Models/items/materials/texturemap.json +++ b/assets/Models/items/materials/texturemap.json @@ -6,6 +6,20 @@ "diffuse" : "/Models/items/materials/logmodel.png", "isDefault" : true } + ], + "Models/items/materials/stick1.glb": [ + { + "meshName" : "Cylinder", + "diffuse" : "/Textures/wooden.png", + "isDefault" : true + } + ], + "Models/items/materials/rock1.glb": [ + { + "meshName" : "Cylinder", + "diffuse" : "/Textures/Ground/rock3_256.png", + "isDefault" : true + } ] } } \ No newline at end of file diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index d9fa29f8..9fdbad2d 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -1418,6 +1418,10 @@ Lore message resend from client on failure More surface selection work Noise control from biome definition +(04/03/2025) +Add rock and stick items +Update ServerEntityUtils.repositionEntityRecursive behavior + diff --git a/src/main/java/electrosphere/entity/ServerEntityUtils.java b/src/main/java/electrosphere/entity/ServerEntityUtils.java index ac362113..d4da45ee 100644 --- a/src/main/java/electrosphere/entity/ServerEntityUtils.java +++ b/src/main/java/electrosphere/entity/ServerEntityUtils.java @@ -113,14 +113,14 @@ public class ServerEntityUtils { } ServerDataCell.moveEntityFromCellToCell(entity, oldDataCell, newDataCell); ServerBehaviorTreeUtils.updateCell(entity, oldDataCell); - if(oldDataCell.getScene().containsEntity(entity)){ + if(oldDataCell != null && oldDataCell.getScene().containsEntity(entity)){ throw new Error("Entity not removed from scene!"); } } if(AttachUtils.hasChildren(entity)){ List children = AttachUtils.getChildrenList(entity); for(Entity child : children){ - repositionEntityRecursive(realm, child, position); + ServerEntityUtils.repositionEntityRecursive(realm, child, position); } } } diff --git a/src/main/java/electrosphere/server/datacell/ServerDataCell.java b/src/main/java/electrosphere/server/datacell/ServerDataCell.java index d04efad1..914cefbd 100644 --- a/src/main/java/electrosphere/server/datacell/ServerDataCell.java +++ b/src/main/java/electrosphere/server/datacell/ServerDataCell.java @@ -186,14 +186,13 @@ public class ServerDataCell { if(entity == null){ throw new Error("Passed null entity! " + entity); } - if(oldCell == null){ - throw new Error("Passed null oldCell! " + oldCell); - } if(newCell == null){ throw new Error("Passed null newCell! " + newCell); } //swap which holds the entity - oldCell.getScene().deregisterEntity(entity); + if(oldCell != null){ + oldCell.getScene().deregisterEntity(entity); + } newCell.getScene().registerEntity(entity); //update entity data cell mapper Globals.entityDataCellMapper.updateEntityCell(entity, newCell); @@ -212,13 +211,15 @@ public class ServerDataCell { } } //delete the entity for players that dont care about it - for(Player player : oldCell.activePlayers){ - if( - !newCell.containsPlayer(player) && - (player.getPlayerEntity() == null || player.getPlayerEntity() != entity) - ){ - //if the player isn't also in the new cell, delete the entity - player.addMessage(EntityMessage.constructDestroyMessage(entity.getId())); + if(oldCell != null){ + for(Player player : oldCell.activePlayers){ + if( + !newCell.containsPlayer(player) && + (player.getPlayerEntity() == null || player.getPlayerEntity() != entity) + ){ + //if the player isn't also in the new cell, delete the entity + player.addMessage(EntityMessage.constructDestroyMessage(entity.getId())); + } } } }