package tc.oc.commons.bukkit.util;
import java.util.Objects;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.Physical;
import org.bukkit.World;
import org.bukkit.block.Block;
import tc.oc.commons.core.util.Utils;
public class ChunkLocation implements Physical {
private final UUID worldId;
private final ChunkPosition position;
public ChunkLocation(UUID worldId, ChunkPosition position) {
this.worldId = worldId;
this.position = position;
}
public UUID worldId() {
return worldId;
}
public ChunkPosition position() {
return position;
}
@Override
public World getWorld() {
return Bukkit.world(worldId);
}
public Chunk getChunk() {
return position.getChunk(getWorld());
}
@Override
public final int hashCode() {
return Objects.hash(worldId(), position());
}
@Override
public final boolean equals(Object obj) {
return Utils.equals(ChunkLocation.class, this, obj, that ->
this.worldId().equals(that.worldId()) &&
this.position().equals(that.position())
);
}
@Override
public String toString() {
return getClass().getSimpleName() +
"{world=" + worldId() +
" position=(" + position().x() + ", " + position().z() + ")}";
}
public static ChunkLocation of(World world, ChunkPosition position) {
return new ChunkLocation(world.getUID(), position);
}
public static ChunkLocation of(Chunk chunk) {
return of(chunk.getWorld(), ChunkPosition.of(chunk));
}
public static ChunkLocation ofBlock(Location loc) {
return new ChunkLocation(loc.getWorldId(), ChunkPosition.ofBlock(loc));
}
public static ChunkLocation ofBlock(Block block) {
return ofBlock(block.getLocation());
}
}