From 201d28071af186c4c4a3d2a707f45c1fb5913088 Mon Sep 17 00:00:00 2001 From: Tobias Nett Date: Thu, 8 Jul 2021 23:56:34 +0200 Subject: [PATCH 1/2] feat: use item activation (right click) for magic staff Depends on MovingBlocks/Terasology#4818 Depends on LightAndShadowResources#70 --- .../controllers/AttackSystem.java | 60 ++++++++++++------- 1 file changed, 38 insertions(+), 22 deletions(-) diff --git a/src/main/java/org/terasology/ligthandshadow/componentsystem/controllers/AttackSystem.java b/src/main/java/org/terasology/ligthandshadow/componentsystem/controllers/AttackSystem.java index 960a4cd5..27ca10c3 100644 --- a/src/main/java/org/terasology/ligthandshadow/componentsystem/controllers/AttackSystem.java +++ b/src/main/java/org/terasology/ligthandshadow/componentsystem/controllers/AttackSystem.java @@ -3,6 +3,8 @@ package org.terasology.ligthandshadow.componentsystem.controllers; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.terasology.engine.entitySystem.entity.EntityManager; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.event.Event; @@ -10,55 +12,69 @@ import org.terasology.engine.entitySystem.systems.BaseComponentSystem; import org.terasology.engine.entitySystem.systems.RegisterMode; import org.terasology.engine.entitySystem.systems.RegisterSystem; -import org.terasology.engine.logic.characters.CharacterHeldItemComponent; import org.terasology.engine.logic.common.ActivateEvent; +import org.terasology.engine.logic.inventory.ItemComponent; +import org.terasology.engine.logic.players.PlayerCharacterComponent; import org.terasology.engine.network.ClientComponent; import org.terasology.engine.registry.In; import org.terasology.lightandshadowresources.components.FlagComponent; -import org.terasology.ligthandshadow.componentsystem.events.OnFlagDropEvent; +import org.terasology.lightandshadowresources.components.LASTeamComponent; +import org.terasology.ligthandshadow.componentsystem.components.FlagDropOnActivateComponent; +import org.terasology.ligthandshadow.componentsystem.components.HasFlagComponent; import org.terasology.ligthandshadow.componentsystem.events.DropFlagEvent; +import org.terasology.ligthandshadow.componentsystem.events.OnFlagDropEvent; import org.terasology.ligthandshadow.componentsystem.events.OnFlagPickupEvent; import org.terasology.ligthandshadow.componentsystem.events.ReturnFlagEvent; import org.terasology.module.inventory.events.InventorySlotChangedEvent; -import org.terasology.engine.logic.players.PlayerCharacterComponent; -import org.terasology.ligthandshadow.componentsystem.components.FlagDropOnActivateComponent; -import org.terasology.ligthandshadow.componentsystem.components.HasFlagComponent; -import org.terasology.lightandshadowresources.components.RaycastOnActivateComponent; -import org.terasology.lightandshadowresources.components.LASTeamComponent; @RegisterSystem(RegisterMode.AUTHORITY) public class AttackSystem extends BaseComponentSystem { + private static final Logger logger = LoggerFactory.getLogger(AttackSystem.class); + @In EntityManager entityManager; private EntityRef item; + /** + * Drop the flag if a player manages to "touch" (activate) the enemy flag bearer. + * @param event the activation event + * @param entity the target of the activation (here: the enemy flag bearer) + */ @ReceiveEvent(components = {FlagDropOnActivateComponent.class, PlayerCharacterComponent.class, HasFlagComponent.class}) - public void onActivate(ActivateEvent event, EntityRef entity) { + public void dropFlagOnTouch(ActivateEvent event, EntityRef entity) { dropFlagOnPlayerAttack(event, entity); } + /** + * Drop the flag if a player targets the enemy flag bearer with an item that causes a flag drop on activation. + * @param event the activation event, must target the enemy flag bearer + * @param item the target of the activation (here: the used item) + */ + @ReceiveEvent(components = {FlagDropOnActivateComponent.class, ItemComponent.class}) + public void dropFlagOnRangeAttack(ActivateEvent event, EntityRef item) { + if (event.getTarget().exists() + && event.getTarget().hasComponent(PlayerCharacterComponent.class) + && event.getTarget().hasComponent(HasFlagComponent.class)) { + + logger.info(event.toString()); + logger.info(item.toFullDescription()); + + dropFlagOnPlayerAttack(event, event.getTarget()); + } + } + /** * When player activates another with the magic staff, checks to see if the attacked player has a flag * If so, makes the player drop the flag * @param targetPlayer The player being attacked */ private void dropFlagOnPlayerAttack(ActivateEvent event, EntityRef targetPlayer) { - EntityRef attackingPlayer = event.getInstigator(); // The player using the staff to attack - if (canPlayerAttack(attackingPlayer)) { - if (targetPlayer.hasComponent(PlayerCharacterComponent.class) && targetPlayer.hasComponent(HasFlagComponent.class)) { - // If the target player has the flag - targetPlayer.send(new DropFlagEvent(attackingPlayer)); - } - } - } - - private boolean canPlayerAttack(EntityRef attackingPlayer) { - if (!attackingPlayer.hasComponent(CharacterHeldItemComponent.class)) { - return false; + EntityRef attackingPlayer = event.getInstigator(); // The attacking player + if (targetPlayer.hasComponent(PlayerCharacterComponent.class) && targetPlayer.hasComponent(HasFlagComponent.class)) { + // If the target player has the flag + targetPlayer.send(new DropFlagEvent(attackingPlayer)); } - EntityRef heldItem = attackingPlayer.getComponent(CharacterHeldItemComponent.class).selectedItem; - return heldItem.hasComponent(RaycastOnActivateComponent.class); } /** From cec2b4691ff9a3f0d402ed4168512fe197ee346b Mon Sep 17 00:00:00 2001 From: jdrueckert Date: Mon, 26 Jul 2021 23:10:22 +0200 Subject: [PATCH 2/2] chore: remove logging Co-authored-by: Tobias Nett --- .../componentsystem/controllers/AttackSystem.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/java/org/terasology/ligthandshadow/componentsystem/controllers/AttackSystem.java b/src/main/java/org/terasology/ligthandshadow/componentsystem/controllers/AttackSystem.java index 27ca10c3..fe748943 100644 --- a/src/main/java/org/terasology/ligthandshadow/componentsystem/controllers/AttackSystem.java +++ b/src/main/java/org/terasology/ligthandshadow/componentsystem/controllers/AttackSystem.java @@ -3,8 +3,6 @@ package org.terasology.ligthandshadow.componentsystem.controllers; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.terasology.engine.entitySystem.entity.EntityManager; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.event.Event; @@ -29,7 +27,6 @@ @RegisterSystem(RegisterMode.AUTHORITY) public class AttackSystem extends BaseComponentSystem { - private static final Logger logger = LoggerFactory.getLogger(AttackSystem.class); @In EntityManager entityManager; @@ -57,9 +54,6 @@ public void dropFlagOnRangeAttack(ActivateEvent event, EntityRef item) { && event.getTarget().hasComponent(PlayerCharacterComponent.class) && event.getTarget().hasComponent(HasFlagComponent.class)) { - logger.info(event.toString()); - logger.info(item.toFullDescription()); - dropFlagOnPlayerAttack(event, event.getTarget()); } }