Citizens2/main/src/main/java/net/citizensnpcs/util/ChunkCoord.java

76 lines
1.9 KiB
Java

package net.citizensnpcs.util;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.World;
public class ChunkCoord {
public final UUID worldUUID;
public final int x;
public final int z;
public ChunkCoord(Chunk chunk) {
this(chunk.getWorld().getUID(), chunk.getX(), chunk.getZ());
}
public ChunkCoord(Location loc) {
this(loc.getWorld().getUID(), loc.getBlockX() >> 4, loc.getBlockZ() >> 4);
}
public ChunkCoord(UUID worldUUID, int x, int z) {
this.x = x;
this.z = z;
this.worldUUID = worldUUID;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
ChunkCoord other = (ChunkCoord) obj;
if (worldUUID == null) {
if (other.worldUUID != null) {
return false;
}
} else if (!worldUUID.equals(other.worldUUID)) {
return false;
}
return x == other.x && z == other.z;
}
public Chunk getChunk() {
World world = Bukkit.getWorld(worldUUID);
return world != null ? world.getChunkAt(x, z) : null;
}
@Override
public int hashCode() {
final int prime = 31;
return prime * (prime * (prime + ((worldUUID == null) ? 0 : worldUUID.hashCode())) + x) + z;
}
public void setForceLoaded(boolean b) {
Chunk chunk = getChunk();
if (chunk != null && SUPPORTS_FORCE_LOADED) {
try {
chunk.setForceLoaded(b);
} catch (NoSuchMethodError e) {
SUPPORTS_FORCE_LOADED = false;
}
}
}
@Override
public String toString() {
return "[" + x + "," + z + "]";
}
private static boolean SUPPORTS_FORCE_LOADED = true;
}