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: {