From a530a7242a549b78e1b9d02c5f65d171b7c33cf3 Mon Sep 17 00:00:00 2001 From: austin Date: Fri, 4 Apr 2025 19:36:29 -0400 Subject: [PATCH] bush harvesting --- docs/src/progress/renderertodo.md | 2 ++ .../entity/state/life/ServerLifeTree.java | 19 +++++++++++++++++++ .../net/server/protocol/EntityProtocol.java | 2 +- .../server/ServerSynchronizationManager.java | 2 +- .../server/player/PlayerActions.java | 5 +++++ 5 files changed, 28 insertions(+), 2 deletions(-) diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index b5b45ee3..600289ed 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -1443,6 +1443,8 @@ Fix visually attaching item on server creating item at 0,0,0 on init (thereby cr Fix test failure debug render writing to file Recursive recipe data files ServerEntityUtils recursive move function potential bugfix +Harvest bushes kills them +Fix harvest interaction targeting client player entity on server side diff --git a/src/main/java/electrosphere/entity/state/life/ServerLifeTree.java b/src/main/java/electrosphere/entity/state/life/ServerLifeTree.java index 56bb1263..b163286c 100644 --- a/src/main/java/electrosphere/entity/state/life/ServerLifeTree.java +++ b/src/main/java/electrosphere/entity/state/life/ServerLifeTree.java @@ -120,6 +120,14 @@ public class ServerLifeTree implements BehaviorTree { } } + /** + * Kills the entity + */ + public void kill(){ + lifeCurrent = 0; + this.setState(LifeStateEnum.DYING); + } + /** * Roll the loot pool */ @@ -327,6 +335,17 @@ public class ServerLifeTree implements BehaviorTree { return (ServerLifeTree)entity.getData(EntityDataStrings.TREE_SERVERLIFETREE); } + /** + *

+ * Checks if the entity has a copy of this tree + *

+ * @param entity the entity + * @return true if the entity has a copy of this tree, false otherwise + */ + public static boolean hasServerLifeTree(Entity entity){ + return entity.containsKey(EntityDataStrings.TREE_SERVERLIFETREE); + } + /** * A single collision event */ diff --git a/src/main/java/electrosphere/net/server/protocol/EntityProtocol.java b/src/main/java/electrosphere/net/server/protocol/EntityProtocol.java index 938eaa2c..6792b482 100644 --- a/src/main/java/electrosphere/net/server/protocol/EntityProtocol.java +++ b/src/main/java/electrosphere/net/server/protocol/EntityProtocol.java @@ -57,7 +57,7 @@ public class EntityProtocol implements ServerProtocolTemplate { } } break; case INTERACT: { - targetEntity = EntityLookupUtils.getEntityById(connectionHandler.getPlayerEntityId()); + targetEntity = EntityLookupUtils.getEntityById(message.getentityID()); PlayerActions.attemptInteraction(connectionHandler, targetEntity, message.getinteractionSignal()); } break; //ignore stack diff --git a/src/main/java/electrosphere/net/synchronization/server/ServerSynchronizationManager.java b/src/main/java/electrosphere/net/synchronization/server/ServerSynchronizationManager.java index 5aad72a4..aa1057cf 100644 --- a/src/main/java/electrosphere/net/synchronization/server/ServerSynchronizationManager.java +++ b/src/main/java/electrosphere/net/synchronization/server/ServerSynchronizationManager.java @@ -54,7 +54,7 @@ public class ServerSynchronizationManager { case CLIENTREQUESTBTREEACTION: { Entity entity = EntityLookupUtils.getEntityById(message.getentityId()); if(entity != null){ - updateEntityState(entity,message.getbTreeId(),message); + this.updateEntityState(entity,message.getbTreeId(),message); } else { LoggerInterface.loggerNetworking.WARNING("Receiving packet from client to perform action for nonexistant entity! " + message.getentityId()); } diff --git a/src/main/java/electrosphere/server/player/PlayerActions.java b/src/main/java/electrosphere/server/player/PlayerActions.java index af18fce6..b00164ef 100644 --- a/src/main/java/electrosphere/server/player/PlayerActions.java +++ b/src/main/java/electrosphere/server/player/PlayerActions.java @@ -8,6 +8,7 @@ import electrosphere.engine.Globals; import electrosphere.entity.Entity; import electrosphere.entity.state.block.ServerBlockTree; import electrosphere.entity.state.equip.ServerToolbarState; +import electrosphere.entity.state.life.ServerLifeTree; import electrosphere.entity.types.common.CommonEntityUtils; import electrosphere.entity.types.creature.CreatureUtils; import electrosphere.game.data.common.interact.InteractionData; @@ -122,6 +123,10 @@ public class PlayerActions { Entity playerEntity = EntityLookupUtils.getEntityById(connectionHandler.getPlayerEntityId()); switch(signal){ case InteractionData.ON_INTERACT_HARVEST: { + if(ServerLifeTree.hasServerLifeTree(target)){ + ServerLifeTree serverLifeTree = ServerLifeTree.getServerLifeTree(target); + serverLifeTree.kill(); + } ServerScriptUtils.fireSignalOnEntity(playerEntity, "entityInteractHarvest", target); } break; default: {