From 6f0d6d299bd546f3e4499138c2b158e64688270f Mon Sep 17 00:00:00 2001 From: Intybyte Date: Wed, 31 Jul 2024 17:11:00 +0200 Subject: [PATCH 1/6] Add #102 + Small refactor --- .../features/directors/AADirectors.java | 46 +++++++++---------- src/main/resources/config.yml | 1 + 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/main/java/net/countercraft/movecraft/combat/features/directors/AADirectors.java b/src/main/java/net/countercraft/movecraft/combat/features/directors/AADirectors.java index 9418bc9..1eae65d 100644 --- a/src/main/java/net/countercraft/movecraft/combat/features/directors/AADirectors.java +++ b/src/main/java/net/countercraft/movecraft/combat/features/directors/AADirectors.java @@ -12,7 +12,6 @@ import net.countercraft.movecraft.util.MathUtils; import org.bukkit.Bukkit; import org.bukkit.ChatColor; -import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.World; import org.bukkit.block.Block; @@ -35,6 +34,7 @@ public class AADirectors extends Directors implements Listener { private static final String HEADER = "AA Director"; public static int AADirectorDistance = 50; public static int AADirectorRange = 120; + public static double FireballSpeed = 1.0; private long lastCheck = 0; public AADirectors() { @@ -48,6 +48,7 @@ public static void register() { public static void load(@NotNull FileConfiguration config) { AADirectorDistance = config.getInt("AADirectorDistance", 50); AADirectorRange = config.getInt("AADirectorRange", 120); + FireballSpeed = config.getDouble("FireballSpeed", 1.0); } @Override @@ -95,44 +96,43 @@ private void processFireball(@NotNull SmallFireball fireball) { fireball.setShooter(p); Vector fireballVector = fireball.getVelocity(); - double speed = fireballVector.length(); // store the speed to add it back in later, since all the values we will be using are "normalized", IE: have a speed of 1 + double speed = fireballVector.length() * FireballSpeed; // store the speed to add it back in later, since all the values we will be using are "normalized", IE: have a speed of 1 fireballVector = fireballVector.normalize(); // you normalize it for comparison with the new direction to see if we are trying to steer too far Block targetBlock = DirectorUtils.getDirectorBlock(p, AADirectorRange); Vector targetVector; - if (targetBlock == null || targetBlock.getType().equals(Material.AIR)) // the player is looking at nothing, shoot in that general direction + + if (targetBlock == null || targetBlock.getType().isAir()) // the player is looking at nothing, shoot in that general direction targetVector = p.getLocation().getDirection(); else { // shoot directly at the block the player is looking at (IE: with convergence) targetVector = targetBlock.getLocation().toVector().subtract(fireball.getLocation().toVector()); targetVector = targetVector.normalize(); } - if (targetVector.getX() - fireballVector.getX() > 0.5) - fireballVector.setX(fireballVector.getX() + 0.5); - else if (targetVector.getX() - fireballVector.getX() < -0.5) - fireballVector.setX(fireballVector.getX() - 0.5); - else - fireballVector.setX(targetVector.getX()); - - if (targetVector.getY() - fireballVector.getY() > 0.5) - fireballVector.setY(fireballVector.getY() + 0.5); - else if (targetVector.getY() - fireballVector.getY() < -0.5) - fireballVector.setY(fireballVector.getY() - 0.5); - else - fireballVector.setY(targetVector.getY()); - - if (targetVector.getZ() - fireballVector.getZ() > 0.5) - fireballVector.setZ(fireballVector.getZ() + 0.5); - else if (targetVector.getZ() - fireballVector.getZ() < -0.5) - fireballVector.setZ(fireballVector.getZ() - 0.5); - else - fireballVector.setZ(targetVector.getZ()); + double x = fireballVector.getX(); + fireballVector.setX( x + adjustValue(targetVector.getX() - x) ); + + double y = fireballVector.getY(); + fireballVector.setY( y + adjustValue(targetVector.getY() - y) ); + + double z = fireballVector.getZ(); + fireballVector.setZ( z + adjustValue(targetVector.getZ() - z) ); fireballVector = fireballVector.multiply(speed); // put the original speed back in, but now along a different trajectory fireball.setVelocity(fireballVector); fireball.setDirection(fireballVector); } + private double adjustValue(double value) { + if (value > 0.5) + return 0.5; + + if (value < -0.5) + return -0.5; + + return 0; + } + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onSignClick(@NotNull PlayerInteractEvent e) { var action = e.getAction(); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 635ee87..34052e3 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -40,6 +40,7 @@ DurabilityOverride: # List of block IDs: ignore percent # Fireball Lifespan FireballLifespan: 6 # Lifespan of fireballs in seconds +FireballSpeed: 1.0 # TNT Tracers TracerRateTicks: 5.0 # Rate at which tracers are spawned on the path of flying TNT From 572a60b4a88807b4ad45d676c0fd960f7426607b Mon Sep 17 00:00:00 2001 From: Intybyte Date: Fri, 2 Aug 2024 09:48:15 +0200 Subject: [PATCH 2/6] Fix `AADirectors#adjustValue` --- .../features/directors/AADirectors.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/countercraft/movecraft/combat/features/directors/AADirectors.java b/src/main/java/net/countercraft/movecraft/combat/features/directors/AADirectors.java index 1eae65d..511861e 100644 --- a/src/main/java/net/countercraft/movecraft/combat/features/directors/AADirectors.java +++ b/src/main/java/net/countercraft/movecraft/combat/features/directors/AADirectors.java @@ -110,27 +110,26 @@ private void processFireball(@NotNull SmallFireball fireball) { } double x = fireballVector.getX(); - fireballVector.setX( x + adjustValue(targetVector.getX() - x) ); + fireballVector.setX( adjustValue(targetVector.getX(), x) ); double y = fireballVector.getY(); - fireballVector.setY( y + adjustValue(targetVector.getY() - y) ); + fireballVector.setY( adjustValue(targetVector.getY(), y) ); double z = fireballVector.getZ(); - fireballVector.setZ( z + adjustValue(targetVector.getZ() - z) ); + fireballVector.setZ( adjustValue(targetVector.getZ(),z) ); fireballVector = fireballVector.multiply(speed); // put the original speed back in, but now along a different trajectory fireball.setVelocity(fireballVector); fireball.setDirection(fireballVector); } - private double adjustValue(double value) { - if (value > 0.5) - return 0.5; + private double adjustValue(double target, double actual) { + if (target - actual > 0.5) + return actual + 0.5; + if (target - actual < 0.5) + return actual - 0.5; - if (value < -0.5) - return -0.5; - - return 0; + return target; } @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) From c76c90bcf1ce5b4b1aa882e109d70f68fab8889f Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sat, 3 Aug 2024 19:20:51 +0200 Subject: [PATCH 3/6] Add comment to FireballSpeed --- src/main/resources/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 34052e3..c69c7fa 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -40,7 +40,7 @@ DurabilityOverride: # List of block IDs: ignore percent # Fireball Lifespan FireballLifespan: 6 # Lifespan of fireballs in seconds -FireballSpeed: 1.0 +FireballSpeed: 1.0 # Speed multiplier for fireballs # TNT Tracers TracerRateTicks: 5.0 # Rate at which tracers are spawned on the path of flying TNT From d334eb0e41d1d8d0b636d4658aa4320f41254de2 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Tue, 6 Aug 2024 23:00:19 +0200 Subject: [PATCH 4/6] Revert Refactor --- .../features/directors/AADirectors.java | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/src/main/java/net/countercraft/movecraft/combat/features/directors/AADirectors.java b/src/main/java/net/countercraft/movecraft/combat/features/directors/AADirectors.java index 511861e..4fc93aa 100644 --- a/src/main/java/net/countercraft/movecraft/combat/features/directors/AADirectors.java +++ b/src/main/java/net/countercraft/movecraft/combat/features/directors/AADirectors.java @@ -109,29 +109,32 @@ private void processFireball(@NotNull SmallFireball fireball) { targetVector = targetVector.normalize(); } - double x = fireballVector.getX(); - fireballVector.setX( adjustValue(targetVector.getX(), x) ); - - double y = fireballVector.getY(); - fireballVector.setY( adjustValue(targetVector.getY(), y) ); - - double z = fireballVector.getZ(); - fireballVector.setZ( adjustValue(targetVector.getZ(),z) ); + if (targetVector.getX() - fireballVector.getX() > 0.5) + fireballVector.setX(fireballVector.getX() + 0.5); + else if (targetVector.getX() - fireballVector.getX() < -0.5) + fireballVector.setX(fireballVector.getX() - 0.5); + else + fireballVector.setX(targetVector.getX()); + + if (targetVector.getY() - fireballVector.getY() > 0.5) + fireballVector.setY(fireballVector.getY() + 0.5); + else if (targetVector.getY() - fireballVector.getY() < -0.5) + fireballVector.setY(fireballVector.getY() - 0.5); + else + fireballVector.setY(targetVector.getY()); + + if (targetVector.getZ() - fireballVector.getZ() > 0.5) + fireballVector.setZ(fireballVector.getZ() + 0.5); + else if (targetVector.getZ() - fireballVector.getZ() < -0.5) + fireballVector.setZ(fireballVector.getZ() - 0.5); + else + fireballVector.setZ(targetVector.getZ()); fireballVector = fireballVector.multiply(speed); // put the original speed back in, but now along a different trajectory fireball.setVelocity(fireballVector); fireball.setDirection(fireballVector); } - private double adjustValue(double target, double actual) { - if (target - actual > 0.5) - return actual + 0.5; - if (target - actual < 0.5) - return actual - 0.5; - - return target; - } - @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onSignClick(@NotNull PlayerInteractEvent e) { var action = e.getAction(); From cb6e22f3f2355d38b80ba2e28cfae1b7d5705a7a Mon Sep 17 00:00:00 2001 From: Intybyte Date: Tue, 6 Aug 2024 23:20:17 +0200 Subject: [PATCH 5/6] Add Speed changer to FireballLifespan (now FireballBehaviour) --- .../movecraft/combat/MovecraftCombat.java | 6 ++--- ...llLifespan.java => FireballBehaviour.java} | 24 +++++++++++++++---- .../features/directors/AADirectors.java | 4 +--- src/main/resources/config.yml | 1 - 4 files changed, 24 insertions(+), 11 deletions(-) rename src/main/java/net/countercraft/movecraft/combat/features/{FireballLifespan.java => FireballBehaviour.java} (66%) diff --git a/src/main/java/net/countercraft/movecraft/combat/MovecraftCombat.java b/src/main/java/net/countercraft/movecraft/combat/MovecraftCombat.java index 372da50..7c265f6 100644 --- a/src/main/java/net/countercraft/movecraft/combat/MovecraftCombat.java +++ b/src/main/java/net/countercraft/movecraft/combat/MovecraftCombat.java @@ -81,7 +81,7 @@ public void onEnable() { AntiRadar.load(getConfig()); ContactExplosives.load(getConfig()); DurabilityOverride.load(getConfig()); - FireballLifespan.load(getConfig()); + FireballBehaviour.load(getConfig()); FireballPenetration.load(getConfig()); ReImplementTNTTranslocation.load(getConfig()); BlockBehaviorOverride.load(getConfig()); @@ -126,10 +126,10 @@ public void onEnable() { getServer().getPluginManager().registerEvents(contactExplosives, this); contactExplosives.runTaskTimer(this, 0, 1); // Every tick getServer().getPluginManager().registerEvents(new DurabilityOverride(), this); - var fireballLifespan = new FireballLifespan(); + var fireballLifespan = new FireballBehaviour(); getServer().getPluginManager().registerEvents(fireballLifespan, this); fireballLifespan.runTaskTimer(this, 0, 20); // Every 1 second - getServer().getPluginManager().registerEvents(new FireballLifespan(), this); + getServer().getPluginManager().registerEvents(new FireballBehaviour(), this); getServer().getPluginManager().registerEvents(new FireballPenetration(), this); getServer().getPluginManager().registerEvents(new ReImplementTNTTranslocation(), this); diff --git a/src/main/java/net/countercraft/movecraft/combat/features/FireballLifespan.java b/src/main/java/net/countercraft/movecraft/combat/features/FireballBehaviour.java similarity index 66% rename from src/main/java/net/countercraft/movecraft/combat/features/FireballLifespan.java rename to src/main/java/net/countercraft/movecraft/combat/features/FireballBehaviour.java index 3f5b399..1081210 100644 --- a/src/main/java/net/countercraft/movecraft/combat/features/FireballLifespan.java +++ b/src/main/java/net/countercraft/movecraft/combat/features/FireballBehaviour.java @@ -9,19 +9,22 @@ import org.bukkit.event.entity.ProjectileLaunchEvent; import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; import java.util.Deque; import java.util.LinkedList; -public class FireballLifespan extends BukkitRunnable implements Listener { +public class FireballBehaviour extends BukkitRunnable implements Listener { private static final String METADATA_KEY = "MCC-Expiry"; public static int FireballLifespan = 0; + private static double FireballSpeed = 1.0; private final Deque queue = new LinkedList<>(); public static void load(@NotNull FileConfiguration config) { FireballLifespan = config.getInt("FireballLifespan", 6); - FireballLifespan *= 20 * 50; // Convert from seconds to milliseconds + FireballSpeed = config.getDouble("FireballSpeed", 1.0); + FireballLifespan *= 1000; // Convert from seconds to milliseconds } @Override @@ -39,9 +42,22 @@ public void run() { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onProjectileLaunch(@NotNull ProjectileLaunchEvent e) { - if (!(e.getEntity() instanceof SmallFireball)) + if (!(e.getEntity() instanceof SmallFireball fireball)) return; - SmallFireball fireball = (SmallFireball) e.getEntity(); + + new BukkitRunnable() { + @Override + public void run() { + Vector fireballVector = fireball.getVelocity(); + double speed = fireballVector.length() * FireballSpeed; + + fireballVector = fireballVector.normalize(); + fireballVector.multiply(speed); + + fireball.setVelocity(fireballVector); + } + }.runTaskTimer(MovecraftCombat.getInstance(), 1L, 1L); + fireball.setMetadata(METADATA_KEY, new FixedMetadataValue(MovecraftCombat.getInstance(), System.currentTimeMillis())); queue.add(fireball); } diff --git a/src/main/java/net/countercraft/movecraft/combat/features/directors/AADirectors.java b/src/main/java/net/countercraft/movecraft/combat/features/directors/AADirectors.java index 4fc93aa..a60fc7a 100644 --- a/src/main/java/net/countercraft/movecraft/combat/features/directors/AADirectors.java +++ b/src/main/java/net/countercraft/movecraft/combat/features/directors/AADirectors.java @@ -34,7 +34,6 @@ public class AADirectors extends Directors implements Listener { private static final String HEADER = "AA Director"; public static int AADirectorDistance = 50; public static int AADirectorRange = 120; - public static double FireballSpeed = 1.0; private long lastCheck = 0; public AADirectors() { @@ -48,7 +47,6 @@ public static void register() { public static void load(@NotNull FileConfiguration config) { AADirectorDistance = config.getInt("AADirectorDistance", 50); AADirectorRange = config.getInt("AADirectorRange", 120); - FireballSpeed = config.getDouble("FireballSpeed", 1.0); } @Override @@ -96,7 +94,7 @@ private void processFireball(@NotNull SmallFireball fireball) { fireball.setShooter(p); Vector fireballVector = fireball.getVelocity(); - double speed = fireballVector.length() * FireballSpeed; // store the speed to add it back in later, since all the values we will be using are "normalized", IE: have a speed of 1 + double speed = fireballVector.length() ; // store the speed to add it back in later, since all the values we will be using are "normalized", IE: have a speed of 1 fireballVector = fireballVector.normalize(); // you normalize it for comparison with the new direction to see if we are trying to steer too far Block targetBlock = DirectorUtils.getDirectorBlock(p, AADirectorRange); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index c69c7fa..294078c 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -52,7 +52,6 @@ ExplosionBlock: GLOWSTONE # Block to use to indicate tracer explosions TracerParticles: FIREWORKS_SPARK # Particle to use for particle tracers See https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Particle.html for options. ExplosionParticles: VILLAGER_ANGRY # Particle to use for particle tracer explosions - ### Custom features # Damage Tracking From a510595c87783a5d7ca6b78726bc15664a85e2f7 Mon Sep 17 00:00:00 2001 From: TylerS1066 Date: Fri, 9 Aug 2024 20:01:21 -0500 Subject: [PATCH 6/6] Fix finite issues --- .../movecraft/combat/features/directors/AADirectors.java | 6 ++++++ .../movecraft/combat/features/directors/ArrowDirectors.java | 6 ++++++ .../combat/features/directors/CannonDirectors.java | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/src/main/java/net/countercraft/movecraft/combat/features/directors/AADirectors.java b/src/main/java/net/countercraft/movecraft/combat/features/directors/AADirectors.java index a60fc7a..1ccbcb6 100644 --- a/src/main/java/net/countercraft/movecraft/combat/features/directors/AADirectors.java +++ b/src/main/java/net/countercraft/movecraft/combat/features/directors/AADirectors.java @@ -129,6 +129,12 @@ else if (targetVector.getZ() - fireballVector.getZ() < -0.5) fireballVector.setZ(targetVector.getZ()); fireballVector = fireballVector.multiply(speed); // put the original speed back in, but now along a different trajectory + try { + fireballVector.checkFinite(); + } + catch (IllegalArgumentException ignored) { + return; + } fireball.setVelocity(fireballVector); fireball.setDirection(fireballVector); } diff --git a/src/main/java/net/countercraft/movecraft/combat/features/directors/ArrowDirectors.java b/src/main/java/net/countercraft/movecraft/combat/features/directors/ArrowDirectors.java index 632674e..56d6bfa 100644 --- a/src/main/java/net/countercraft/movecraft/combat/features/directors/ArrowDirectors.java +++ b/src/main/java/net/countercraft/movecraft/combat/features/directors/ArrowDirectors.java @@ -126,6 +126,12 @@ else if (targetVector.getZ() - arrowVector.getZ() < -0.5) arrowVector.setZ(targetVector.getZ()); arrowVector = arrowVector.multiply(speed); // put the original speed back in, but now along a different trajectory + try { + arrowVector.checkFinite(); + } + catch (IllegalArgumentException ignored) { + return; + } arrow.setVelocity(arrowVector); } diff --git a/src/main/java/net/countercraft/movecraft/combat/features/directors/CannonDirectors.java b/src/main/java/net/countercraft/movecraft/combat/features/directors/CannonDirectors.java index 7215fba..98f6651 100644 --- a/src/main/java/net/countercraft/movecraft/combat/features/directors/CannonDirectors.java +++ b/src/main/java/net/countercraft/movecraft/combat/features/directors/CannonDirectors.java @@ -141,6 +141,12 @@ private void processTNT(@NotNull TNTPrimed tnt) { tntVector = tntVector.multiply(horizontalSpeed); // put the original speed back in, but now along a different trajectory tntVector.setY(tnt.getVelocity().getY()); // you leave the original Y (or vertical axis) trajectory as it was + try { + tntVector.checkFinite(); + } + catch (IllegalArgumentException ignored) { + return; + } tnt.setVelocity(tntVector); }