Skip to content

5. Vec3i

zawarka03 edited this page Jul 28, 2026 · 1 revision

Monolith API introduces Vec3i, a robust class for representing integer-based 3D coordinates within a specific world. It serves as a more precise and feature-rich alternative to Bukkit's Location for block-level operations.

5.1. Creating and Converting Vec3i

Vec3i instances can be created directly or converted from Bukkit Location or Block objects.

// Kotlin Example
import io.github.zawarka03.monolithAPI.vec3i.Vec3i
import io.github.zawarka03.monolithAPI.vec3i.utils.toVec3i
import org.bukkit.Bukkit
import org.bukkit.Location

val world = Bukkit.getWorld("world")!!

// Direct instantiation
val vec1 = Vec3i(10, 64, -20, world)

// Conversion from Location
val loc = Location(world, 15.5, 65.0, -18.2)
val vec2 = loc.toVec3i() // Truncates to integer coordinates

// Conversion to Location
val newLoc = vec1.toLocation()

// Conversion to Block
val block = vec1.toBlock()

5.2. Mathematical Operations and Proximity

Vec3i provides optimized methods for distance calculations and entity proximity checks, which are essential for creating interactive blocks like sensors or area-of-effect machines.

// Java Example
import io.github.zawarka03.monolithAPI.vec3i.Vec3i;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import java.util.List;

Vec3i sensorPos = new Vec3i(0, 70, 0, world);
Location targetLoc = new Location(world, 5, 70, 5);

// Distance calculation
double distance = sensorPos.distance(targetLoc);
double distanceSq = sensorPos.distanceSquared(targetLoc); // More performant for comparisons

// Radius check
boolean isWithinRange = sensorPos.isInRadius(targetLoc, 10.0);

// Entity proximity
List<Player> nearbyPlayers = sensorPos.getNearbyPlayers(15.0);
for (Player p : nearbyPlayers) {
    p.sendMessage("You are near a sensor!");
}

Clone this wiki locally