From e295ffea512f1b8022c89a92f2fdc4360ef36b55 Mon Sep 17 00:00:00 2001 From: Konstantin Shandurenko Date: Sun, 4 Apr 2021 03:13:56 +0300 Subject: [PATCH] Switched to Cooldown object in attacking goals --- .../server/entity/ai/goal/CombinedAttackGoal.java | 11 +++++------ .../server/entity/ai/goal/MeleeAttackGoal.java | 11 +++++------ .../server/entity/ai/goal/RangedAttackGoal.java | 11 +++++------ .../java/net/minestom/server/utils/time/Cooldown.java | 4 ++++ 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/main/java/net/minestom/server/entity/ai/goal/CombinedAttackGoal.java b/src/main/java/net/minestom/server/entity/ai/goal/CombinedAttackGoal.java index 8b2b1bd9a..c1d26a8b9 100644 --- a/src/main/java/net/minestom/server/entity/ai/goal/CombinedAttackGoal.java +++ b/src/main/java/net/minestom/server/entity/ai/goal/CombinedAttackGoal.java @@ -20,8 +20,7 @@ import java.util.function.Function; */ public class CombinedAttackGoal extends GoalSelector { - private final UpdateOption pathUpdateOptions = new UpdateOption(5, TimeUnit.TICK); - private long lastPathUpdate; + private final Cooldown cooldown = new Cooldown(new UpdateOption(5, TimeUnit.TICK)); private final int meleeRangeSquared; private final int meleeDelay; @@ -94,8 +93,8 @@ public class CombinedAttackGoal extends GoalSelector { Check.argCondition(desirableRange > rangedRange, "Desirable range can not exceed ranged range!"); } - public UpdateOption getPathUpdateOptions() { - return this.pathUpdateOptions; + public Cooldown getCooldown() { + return this.cooldown; } public void setProjectileGenerator(Function projectileGenerator) { @@ -167,8 +166,8 @@ public class CombinedAttackGoal extends GoalSelector { // Otherwise going to the target. Position targetPosition = target.getPosition(); if (pathPosition == null || !pathPosition.isSimilar(targetPosition)) { - if (!Cooldown.hasCooldown(time, this.lastPathUpdate, getPathUpdateOptions())) { - this.lastPathUpdate = time; + if (this.cooldown.isReady(time)) { + this.cooldown.refreshLastUpdate(time); navigator.setPathTo(targetPosition); } } diff --git a/src/main/java/net/minestom/server/entity/ai/goal/MeleeAttackGoal.java b/src/main/java/net/minestom/server/entity/ai/goal/MeleeAttackGoal.java index 892c324be..a4e45c3e0 100644 --- a/src/main/java/net/minestom/server/entity/ai/goal/MeleeAttackGoal.java +++ b/src/main/java/net/minestom/server/entity/ai/goal/MeleeAttackGoal.java @@ -17,8 +17,7 @@ import org.jetbrains.annotations.NotNull; */ public class MeleeAttackGoal extends GoalSelector { - private final UpdateOption pathUpdateOptions = new UpdateOption(5, TimeUnit.TICK); - private long lastPathUpdate; + private final Cooldown cooldown = new Cooldown(new UpdateOption(5, TimeUnit.TICK)); private long lastHit; private final int delay; @@ -41,8 +40,8 @@ public class MeleeAttackGoal extends GoalSelector { this.timeUnit = timeUnit; } - public UpdateOption getPathUpdateOptions() { - return this.pathUpdateOptions; + public Cooldown getCooldown() { + return this.cooldown; } @Override @@ -85,8 +84,8 @@ public class MeleeAttackGoal extends GoalSelector { final Position pathPosition = navigator.getPathPosition(); final Position targetPosition = target.getPosition(); if (pathPosition == null || !pathPosition.isSimilar(targetPosition)) { - if (!Cooldown.hasCooldown(time, this.lastPathUpdate, getPathUpdateOptions())) { - this.lastPathUpdate = time; + if (this.cooldown.isReady(time)) { + this.cooldown.refreshLastUpdate(time); navigator.setPathTo(targetPosition); } } diff --git a/src/main/java/net/minestom/server/entity/ai/goal/RangedAttackGoal.java b/src/main/java/net/minestom/server/entity/ai/goal/RangedAttackGoal.java index 66128e7b2..56f85ed0e 100644 --- a/src/main/java/net/minestom/server/entity/ai/goal/RangedAttackGoal.java +++ b/src/main/java/net/minestom/server/entity/ai/goal/RangedAttackGoal.java @@ -17,8 +17,7 @@ import java.util.function.Function; public class RangedAttackGoal extends GoalSelector { - private final UpdateOption pathUpdateOptions = new UpdateOption(5, TimeUnit.TICK); - private long lastPathUpdate; + private final Cooldown cooldown = new Cooldown(new UpdateOption(5, TimeUnit.TICK)); private long lastShot; private final int delay; @@ -56,8 +55,8 @@ public class RangedAttackGoal extends GoalSelector { Check.argCondition(desirableRange > attackRange, "Desirable range can not exceed attack range!"); } - public UpdateOption getPathUpdateOptions() { - return this.pathUpdateOptions; + public Cooldown getCooldown() { + return this.cooldown; } public void setProjectileGenerator(Function projectileGenerator) { @@ -119,8 +118,8 @@ public class RangedAttackGoal extends GoalSelector { } Position targetPosition = target.getPosition(); if (pathPosition == null || !pathPosition.isSimilar(targetPosition)) { - if (!Cooldown.hasCooldown(time, this.lastPathUpdate, getPathUpdateOptions())) { - this.lastPathUpdate = time; + if (this.cooldown.isReady(time)) { + this.cooldown.refreshLastUpdate(time); navigator.setPathTo(targetPosition); } } diff --git a/src/main/java/net/minestom/server/utils/time/Cooldown.java b/src/main/java/net/minestom/server/utils/time/Cooldown.java index 3a00d945b..1110da38b 100644 --- a/src/main/java/net/minestom/server/utils/time/Cooldown.java +++ b/src/main/java/net/minestom/server/utils/time/Cooldown.java @@ -12,6 +12,10 @@ public final class Cooldown { this.lastUpdate = System.currentTimeMillis(); } + public UpdateOption getUpdateOption() { + return this.updateOption; + } + public void refreshLastUpdate(long lastUpdate) { this.lastUpdate = lastUpdate; }