diff --git a/src/main/java/fun/ogre/ogredupealias/events/InteractionListener.java b/src/main/java/fun/ogre/ogredupealias/events/InteractionListener.java index bd69843..2ab60e6 100644 --- a/src/main/java/fun/ogre/ogredupealias/events/InteractionListener.java +++ b/src/main/java/fun/ogre/ogredupealias/events/InteractionListener.java @@ -3,10 +3,7 @@ package fun.ogre.ogredupealias.events; import fun.ogre.ogredupealias.data.PlacedStructures; import fun.ogre.ogredupealias.plugin.InventoryPresets; import fun.ogre.ogredupealias.plugin.ItemPresets; -import fun.ogre.ogredupealias.utils.Cooldown; -import fun.ogre.ogredupealias.utils.ItemUtils; -import fun.ogre.ogredupealias.utils.RaycastUtils; -import fun.ogre.ogredupealias.utils.SoundPlayer; +import fun.ogre.ogredupealias.utils.*; import org.bukkit.Location; import org.bukkit.Particle; import org.bukkit.Sound; @@ -101,14 +98,28 @@ public class InteractionListener implements Listener { }); } case RIGHT_CLICK_AIR, RIGHT_CLICK_BLOCK -> { - Location start = p.getEyeLocation(); - Vector rotation = p.getLocation().getDirection().normalize(); + if (p.isSneaking()) { + Location center = p.getLocation(); - p.getWorld().spawn(start, Fireball.class, fireball -> { - fireball.setDirection(rotation); - fireball.setVelocity(rotation); - fireball.setShooter(p); - }); + DisplayUtils.ring(center, 10, circlePoint -> { + RaycastUtils.raycast(center, circlePoint, point -> { + point.getWorld().spawnParticle(Particle.END_ROD, point, 1, 0, 0, 0, 0); + return false; + }); + }, (point, angle) -> { + return angle % 9 == 0; + }); + } + else { + Location start = p.getEyeLocation(); + Vector rotation = p.getLocation().getDirection().normalize(); + + p.getWorld().spawn(start, Fireball.class, fireball -> { + fireball.setDirection(rotation); + fireball.setVelocity(rotation); + fireball.setShooter(p); + }); + } } } } diff --git a/src/main/java/fun/ogre/ogredupealias/utils/DisplayUtils.java b/src/main/java/fun/ogre/ogredupealias/utils/DisplayUtils.java index 2b17842..66a2a49 100644 --- a/src/main/java/fun/ogre/ogredupealias/utils/DisplayUtils.java +++ b/src/main/java/fun/ogre/ogredupealias/utils/DisplayUtils.java @@ -4,16 +4,19 @@ import org.bukkit.Bukkit; import org.bukkit.Location; import java.util.concurrent.atomic.AtomicReference; +import java.util.function.BiPredicate; import java.util.function.Consumer; import static fun.ogre.ogredupealias.OgreDupeAlias.instance; public final class DisplayUtils { - public static void ring(Location center, double radius, Consumer onPoint) { + public static void ring(Location center, double radius, Consumer onPoint, BiPredicate condition) { for (int i = 0; i <= 360; i ++) { Location point = center.clone().add(radius * Math.sin(i), 0, radius * Math.cos(i)); - onPoint.accept(point); + if (condition.test(point, i)) { + onPoint.accept(point); + } } } @@ -22,7 +25,7 @@ public final class DisplayUtils { Bukkit.getScheduler().scheduleSyncRepeatingTask(instance, () -> { if (currentRadius.get() <= radius) { - ring(center, currentRadius.get(), onPoint); + ring(center, currentRadius.get(), onPoint, (point, angle) -> true); currentRadius.set(currentRadius.get() + frequency); } }, 0, interval);