Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add #102 + Small refactor #134

Merged
merged 7 commits into from
Aug 10, 2024
Merged
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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,42 @@ 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( adjustValue(targetVector.getX(), x) );

double y = fireballVector.getY();
fireballVector.setY( adjustValue(targetVector.getY(), y) );

double z = fireballVector.getZ();
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 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();
1 change: 1 addition & 0 deletions src/main/resources/config.yml
Original file line number Diff line number Diff line change
@@ -40,6 +40,7 @@ DurabilityOverride: # List of block IDs: ignore percent

# Fireball Lifespan
FireballLifespan: 6 # Lifespan of fireballs in seconds
FireballSpeed: 1.0 # Speed multiplier for fireballs

# TNT Tracers
TracerRateTicks: 5.0 # Rate at which tracers are spawned on the path of flying TNT