Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.battlepvp.antihack.utils;
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
- import org.bukkit.Location;
- import org.bukkit.util.Vector;
- public class LocationIterator implements Iterator<Location> {
- private List<Location> gen = new ArrayList<Location>();
- private int index = -1;
- public LocationIterator(Location origin, int blocks) {
- double yaw = Math.toRadians(origin.getYaw());
- double pitch = Math.toRadians(origin.getPitch());
- double xzProjection = Math.cos(pitch);
- Vector v = new Vector();
- v.setX(-Math.sin(yaw) * blocks * xzProjection);
- v.setY(-Math.sin(pitch) * blocks);
- v.setZ(Math.cos(yaw) * blocks * xzProjection);
- Location terminalPoint = v.toLocation(origin.getWorld()).add(origin.toVector());
- double deltaX = Math.abs(origin.getX() - terminalPoint.getX());
- double deltaY = Math.abs(origin.getY() - terminalPoint.getY());
- double deltaZ = Math.abs(origin.getZ() - terminalPoint.getZ());
- double maxDelta = Math.max(deltaX, Math.max(deltaY, deltaZ));
- for (int n = 0; n < maxDelta; n++) {
- double t = n / maxDelta;
- gen.add(lerp(t, origin, terminalPoint).toLocation(origin.getWorld()));
- }
- }
- public LocationIterator(Location origin, Location terminalPoint) {
- double deltaX = Math.abs(origin.getX() - terminalPoint.getX());
- double deltaY = Math.abs(origin.getY() - terminalPoint.getY());
- double deltaZ = Math.abs(origin.getZ() - terminalPoint.getZ());
- double maxDelta = Math.max(deltaX, Math.max(deltaY, deltaZ));
- for (int n = 0; n < maxDelta; n++) {
- double t = n / maxDelta;
- gen.add(lerp(t, origin, terminalPoint).toLocation(origin.getWorld()));
- }
- }
- private double lerp(double t, double a, double b) {
- return a + t * (b - a);
- }
- public Vector lerp(double t, Location a, Location b) {
- return new Vector(lerp(t, a.getX(), b.getX()), lerp(t, a.getY(), b.getY()), lerp(t, a.getZ(), b.getZ()));
- }
- public boolean hasNext() {
- return index < gen.size() - 1;
- }
- public Location next() {
- index++;
- return gen.get(index);
- }
- public void remove() {
- throw new UnsupportedOperationException();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement