Saber-Factions/src/main/java/com/massivecraft/factions/util/LazyLocation.java

83 lines
2.2 KiB
Java
Raw Normal View History

package com.massivecraft.factions.util;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
/*
* This class provides a lazy-load Location, so that World doesn't need to be initialized
* yet when an object of this class is created, only when the Location is first accessed.
*/
2014-04-04 20:55:21 +02:00
public class LazyLocation {
private Location location = null;
private String worldName;
private double x;
private double y;
private double z;
private float pitch;
private float yaw;
public LazyLocation(Location loc) {
setLocation(loc);
}
public LazyLocation(final String worldName, final double x, final double y, final double z) {
this(worldName, x, y, z, 0, 0);
}
public LazyLocation(final String worldName, final double x, final double y, final double z, final float yaw, final float pitch) {
2014-07-01 21:52:40 +02:00
this.worldName = worldName; this.x = x; this.y = y; this.z = z; this.yaw = yaw; this.pitch = pitch;
2014-04-04 20:55:21 +02:00
}
// This returns the actual Location
public final Location getLocation() {
// make sure Location is initialized before returning it
2014-07-01 21:52:40 +02:00
initLocation(); return location;
2014-04-04 20:55:21 +02:00
}
// change the Location
public final void setLocation(Location loc) {
2014-07-01 21:52:40 +02:00
this.location = loc; this.worldName = loc.getWorld().getName(); this.x = loc.getX(); this.y = loc.getY();
this.z = loc.getZ(); this.yaw = loc.getYaw(); this.pitch = loc.getPitch();
2014-04-04 20:55:21 +02:00
}
// This initializes the Location
private void initLocation() {
// if location is already initialized, simply return
2014-07-01 21:49:42 +02:00
if (location != null) { return; }
2014-04-04 20:55:21 +02:00
// get World; hopefully it's initialized at this point
2014-07-01 21:52:40 +02:00
World world = Bukkit.getWorld(worldName); if (world == null) { return; }
2014-04-04 20:55:21 +02:00
// store the Location for future calls, and pass it on
location = new Location(world, x, y, z, yaw, pitch);
}
public final String getWorldName() {
return worldName;
}
public final double getX() {
return x;
}
public final double getY() {
return y;
}
public final double getZ() {
return z;
}
public final double getPitch() {
return pitch;
}
public final double getYaw() {
return yaw;
}
}