Vamos a ver que son los Location
(ubicaciones) y los Block
(Bloques) en Minecraft Spigot.
¿Qué es un Location
?
Un Location
en Spigot representa una ubicación en un mapa. Guarda el mundo a la que pertenece, y los tres ejes de coordenadas (x, y, z). Esta ubicación puede representar cualquier cosa, como la ubicación de un jugador, entidad, etc.
Una vez obtenemos una localización, podemos llamar una gran cantidad de métodos para realizar cálculos, obtener bloques o incluso entidades.
Por ejemplo, supongamos que queremos obtener la localización de un jugador, y calcular la distancia hasta otra localización:
@EventHandler
public void onPlayerMove(PlayerMoveEvent event) {
Player player = event.getPlayer();
Location location = new Location(player.getWorld(), 0, 0, 0);
event.getPlayer().sendMessage(Component.text("Distancia hasta 0, 0, 0 -> " + player.getLocation().distance(location)));
}
Investiga por tu cuenta que cosas se pueden hacer con el
Location
(documentación aquí)
Como funcionan las coordenadas en Minecraft
El mapa de Minecraft está dividido en coordenadas XYZ. Cada uno de los valores de X, Y y Z se utiliza para indicar tu posición en el mapa.
- X: Determina tu posición Este/Oeste en el mapa. Un valor positivo aumenta tu posición hacia el Este. Un valor negativo aumenta tu posición hacia el Oeste.
- Y: Determina tu posición arriba/abajo en el mapa. Un valor positivo aumenta tu posición hacia arriba. Un valor negativo aumenta tu posición hacia abajo.
- Z: Determina tu posición Sur/Norte en el mapa. Un valor positivo aumenta tu posición hacia el Sur. Un valor negativo aumenta tu posición hacia el Norte.
(traducido de digminecraft.com)

Esquema de coordenadas dentro de Minecraft
¿Qué es un Block
?
Un Block
es Spigot es una clase que representa un bloque físico en el mundo. Este lo podemos obtener de una ubicación, y podemos modificar su tipo, estado, etc.
Para obtener un bloque de una ubicación usaremos Location#getBlock()
.
Para probar, haremos que cada vez que el jugador se mueva, el bloque debajo suyo se convierta en diamante:
@EventHandler
public void onPlayerMove(PlayerMoveEvent event) {
Player player = event.getPlayer();
player.getLocation().add(0, -1, 0).getBlock().setType(Material.DIAMOND_BLOCK);
}
El enum
Material
es una lista global que contiene una lista completa de todo el tipo de bloques y ítems que existen en el juego. Hablaremos de ello más adelante.