Cómo dejar que el bot de DzBot entre en tu servidor — y que Bedrock entre en tu Java
Paso a paso con los comandos listos para copiar. Todo esto se midió en un servidor Paper 26.3 de verdad, con el bot entrando por el panel y Geyser traduciendo el cliente Bedrock.
Lee esto antes de tocar cualquier configuración
Esta guía es lo que FUNCIONA, medido — no es la lista de lo que DzBot promete. Lo que todavía no funciona está escrito en la sección «Lo que todavía NO funciona», y está escrito porque se midió que no funciona. Cuando algo se desvíe de tu servidor, el error que devolvió tu servidor está escrito junto al paso.
LO QUE TODAVÍA NO FUNCIONA (resumen)
La lista completa, con el motivo de cada una, está al final de esta página:
- NetherNet ya está habilitado en Geyser, pero falta abrir los puertos en el router (UDP 19133 y TCP 19132).
- Con el login de Bedrock desactivado, cualquiera puede entrar usando el nombre de otro.
- El bot de Bedrock no tiene XUID: no es operador por Xbox, solo por ops.json.
- GrimAC registró 277 infracciones del bot: entra en el servidor, pero el anticheat todavía no lo acepta como cliente legítimo.
- GrimAC avisa de que ViaBackwards en un servidor 1.21.2+ es «currently unsupported» (afecta a vehículos con clientes antiguos).
El camino, paso a paso
Java 25 — sin él el servidor ni siquiera abre el puerto
Desde la 26.1, Paper exige Java 25 o más nuevo. Con Java 21 el proceso muere antes de abrir el puerto, y el mensaje sale en el log — no en la pantalla.
java -version
ls /usr/lib/jvm/openjdk version "25.0.4.1" 2026-08-18
OpenJDK Runtime Environment (build 25.0.4.1)
OpenJDK 64-Bit Server VM (build 25.0.4.1, mixed mode, sharing)En esta máquina el Java 25 está en /usr/lib/jvm/java-25-openjdk/bin/java — y esa es la ruta que va en el comando que arranca el servidor (paso 5).
Minecraft 26.1 and newer requires running the server with Java 25 or aboveEn Ubuntu/Debian: sudo apt install openjdk-25-jdk · El build de Paper usado en la medición fue el 211 — es lo que anuncia el servidor: 26.3-211-main@2d602d6. El archivo del servidor se llama paper-26.3-40.jar: el nombre viene de una build antigua y se quedó porque el script que levanta el servidor apunta a él.
eula.txt, server.properties y ops.json
Tres archivos. El primero es la aceptación de la licencia; el segundo dice cómo se comporta el servidor; el tercero es quien da OP en modo offline.
eula=trueSin esto el servidor no arranca: se detiene en el primer arranque pidiendo la aceptación y no abre el puerto.
server-port=25565
online-mode=false
level-type=minecraft\:flat
difficulty=peaceful
gamemode=survival
spawn-protection=0
white-list=false
view-distance=6
max-players=20server-port=25565El puerto TCP de Java. Es el mismo que escribes en el panel.online-mode=falseSin cuenta de Microsoft. Es lo que deja entrar al bot con un nombre y sin contraseña — y es lo que hace que el UUID sea el «offline» (mira el ops.json).level-type=minecraft\:flatMundo plano. El «\:» es el escape del propio Java: sin él el servidor no lee la línea.difficulty=peacefulEl valor medido en el servidor de prueba. No cambia cómo entra el bot: cambia el juego (sin mobs, sin hambre).gamemode=survivalIgual: el valor medido. El bot entra en survival.spawn-protection=0Sin protección de spawn: el bot puede excavar y construir en cualquier sitio, incluido el punto de aparición.white-list=false⛔ Paper 26.3 viene con white-list=true. Con la whitelist activada, quien entra es expulsado al instante — y el bot ni siquiera llega a aparecer.view-distance=6Cuántos chunks envía el servidor. Es el radio de mundo que el bot ve.max-players=20El valor medido en el servidor de prueba.
⛔ La whitelist es el error número uno
Paper 26.3 nace con white-list=true. Con la whitelist activada el servidor expulsa a quien entra con «You are not whitelisted on this server!» — y el bot ni siquiera llega al panel. Ponlo en false.
[
{
"uuid": "6dab31a9-d6e5-37ee-bfd9-83901093485f",
"name": "DuGueDark",
"level": 4,
"bypassesPlayerLimit": false
},
{
"uuid": "0ca09961-3774-3c9d-b7a6-af349b4a773f",
"name": "DzBot",
"level": 4,
"bypassesPlayerLimit": false
}
]Con online-mode=false el servidor calcula el UUID de cada jugador a partir del nombre: es el md5 de «OfflinePlayer:<nombre>», versión 3. Ese UUID NO es el UUID premium de la cuenta de Microsoft. Medido en este servidor: DzBot → 0ca09961-3774-3c9d-b7a6-af349b4a773f y DuGueDark → 6dab31a9-d6e5-37ee-bfd9-83901093485f.
La trampa: la consola responde «Nothing changed. The player is already an operator» y el jugador SIGUE sin ser operador. Es porque el UUID guardado era el de la cuenta premium, y el servidor busca el offline. Con el ops.json correcto, la consola deja de quejarse.
El atajo que siempre funciona: escribe /op DzBot en la consola del servidor. Resuelve el UUID por su cuenta y guarda el correcto en el ops.json.
Los plugins que funcionan en 26.3
Todos estos los cargó Paper 26.3 build 211 y se portaron bien. GrimAC es el más útil: es el «grillo» que mide si el bot colocó el bloque CON línea de visión.
- Geyser-Spigot2.12.0-b1268
Deja que el cliente Bedrock entre al servidor Java (y traduce el protocolo).
download.geysermc.org - Floodgate-Spigot2.2.5 (build 141)
La identidad Bedrock: es lo que firma el nombre del jugador que entra por Geyser.
download.geysermc.org - ViaVersion5.12.2-SNAPSHOT
Cliente Java antiguo en servidor nuevo (quien entra con 1.20 o 1.21).
modrinth.com - ViaBackwards5.12.2-SNAPSHOT
Servidor antiguo para cliente nuevo — el camino inverso de ViaVersion.
modrinth.com - GrimAC2.3.75-8baa16f
Anticheat. Te dice, con el nombre del motivo, cuándo el bot hizo algo que no debía.
modrinth.com
GrimAC es tu instrumento de medida
Señala FarPlace (el bot colocó el bloque desde lejos) y RotationPlace (lo colocó con la rotación equivocada). Si el bot falla al colocar un bloque, GrimAC dice el motivo exacto — y por eso se queda en el servidor de prueba. Y lo más importante: GrimAC también señala al PROPIO BOT, con el nombre de la regla. Las banderas de abajo son el comportamiento del bot medido, no un falso positivo del anticheat. GrimAC también avisa en el log que ViaBackwards en un servidor 1.21.2+ es «currently unsupported».
- 121×Postpaquetes enviados fuera del orden del tick de movimiento
- 67×Simulationel bot se movió distinto de lo que la simulación preveía
- 39×RotationPlacecolocó un bloque sin estar mirándolo
- 20×FarPlacecolocó un bloque desde demasiado lejos
- 18×GroundSpoofdijo estar en el suelo cuando la simulación dice que no
- 9×AntiKBno tomó el knockback esperado (el bot se cura del empujón)
- 3×AimModulo360mandó un giro grande de yaw de golpe
277 infracciones del DzBot y 0 del jugador humano (medido en la base de datos de GrimAC, plugins/GrimAC/data/history.v1.db). La forma de que el bot no sea marcado es hacer lo que hace un cliente legítimo: el alcance correcto, la cara correcta, en el suelo, sin acción de entidad espuria y con cadencia humana.
⛔ No uses un plugin de mochila que mande un resource pack
BackpackPlus 3.2.0 se quitó del servidor de prueba porque manda un resource pack (pack/resourcepack.zip) y el cliente del bot fallaba al recargar los recursos. Si quieres una mochila, elige una que no mande pack — o acepta que el bot pueda perderla al recargar.
Geyser: las TRES claves que exige el Bedrock offline
Geyser convierte el cliente Bedrock en Java. Sin las DOS primeras claves de abajo, el bot Bedrock es rechazado con «§rFaça login no Xbox para ingressar neste servidor» — y no es un problema de puerto, de versión ni de firewall. La tercera (NetherNet) es el camino nuevo de Bedrock y no cambia la entrada del bot: cambia lo que el router tiene que dejar pasar.
El archivo es plugins/Geyser-Spigot/config.yml.
1) auth-type: floodgate
Sección java: — el valor por defecto es online
java:
auth-type: floodgateLe dice a Geyser que la identidad Bedrock viene de Floodgate, y no de un inicio de sesión de Microsoft.
2) validate-bedrock-login: false
Sección advanced: → bedrock: — el valor por defecto es true
advanced:
bedrock:
validate-bedrock-login: falseEs la clave que rechaza el login Bedrock autofirmado. El bot offline firma su propio nombre, así que tiene que estar apagada.
3) NetherNet (el camino nuevo de Bedrock)
Sección bedrock: → signaling: — el valor por defecto es transport: raknet
bedrock:
port: 19132
webrtc-port: 19133
transport: both
signaling:
mode: builtinGeyser avisó de que NetherNet no estaba habilitado y de que, a partir del 27 de octubre, Bedrock pasa a usarlo. Con estas claves el aviso desaparece y el log dice: «Built-in signaling started on http://0.0.0.0:19132, with NetherNet on UDP port 19133». ⚠️ Todavía falta el reenvío de puertos en el router: UDP 19133 y TCP 19132. Medido aquí: el descubrimiento STUN mapeó el host al puerto público 32563, que no es el 19133 — señal de que la NAT del proveedor cambia el puerto. Si el tuyo no reenvía la misma puerta, pon tu IP pública en signaling: → advertise-addresses:.
El panel sigue usando el puerto UDP 19132 del Geyser para Bedrock: NetherNet no cambia el campo del panel, cambia lo que el router tiene que dejar pasar.
⚠️ Esto abre una brecha — léelo antes de aplicarlo
Con validate-bedrock-login apagado, CUALQUIERA puede entrar usando el nombre de cualquier otro. El propio Geyser lo avisa en el archivo: «Disabling Bedrock authentication for other use-cases is NOT SUPPORTED, as it allows anyone to spoof usernames, and is therefore a security risk.» Si el servidor es solo tuyo y el del bot, está bien. Si el servidor es público y tiene XP, ranking o PvP, lo correcto es dejar el login de Bedrock activado (true) y usar una cuenta de Xbox de verdad para el bot — así el bot deja de ser offline (y gana un XUID).
Las dos claves solo valen después de reiniciar el servidor.
La consola del servidor (por FIFO)
Si arrancaste el servidor con & al final de la línea, la consola desaparece cuando se cierra la terminal. La forma de tener consola de verdad en Linux es un FIFO: un archivo que el java lee como entrada y al que escribes con echo.
cd /home/duguedark/Servers/dzbot-26.3
JAVA=/usr/lib/jvm/java-25-openjdk/bin/java
[ -p consola ] || mkfifo consola
setsid "$JAVA" -Xms512M -Xmx1200M -jar paper-26.3-40.jar --nogui < consola > saida.log 2>&1 &
sleep 100000 > consola &⛔ Sin el escritor vivo, el java se QUEDA COLGADO
La última línea (sleep 100000 > consola &) no es adorno: es el escritor que mantiene abierto el FIFO. Sin él el java se queda colgado al abrir el FIFO — el servidor no arranca, no abre el puerto y no escribe NADA en el log. Es el clásico «no funciona y no dice por qué».
Enviando un comando
echo "op DzBot" > consolaLo que escribe la consola vuelve en saida.log. Y es por la consola donde se le da /tp y /give al bot — nunca por el chat (mira las trampas).
Los campos exactos en el panel
Con el servidor en pie, el bot entra por el panel de DzBot. Estos son los valores medidos:
- HostJava
127.0.0.1Bedrock127.0.0.1 - PuertoJava
25565Bedrock19132 - VersiónJava
26.3Bedrock1.26.51 - UsuarioJava
DzBotBedrockDzBot - AuthJava
offlineBedrockoffline
El puerto de Bedrock es el puerto UDP de Geyser (19132 por defecto), no el de Java. Si cambiaste el puerto en el config.yml de Geyser, ese es el que va aquí.
La versión 26.3 es la que el panel ofrece para Java, y la 1.26.51 para Bedrock. Si tu build de Bedrock es otra, usa la equivalente.
auth: offline en Bedrock es lo que da identidad al bot sin cuenta de Xbox. El precio: sin XUID — el bot no es operador por Xbox, solo por ops.json (nivel 4, como el resto).
DzBot[/127.0.0.1:52214] logged in with entity id 103 at ([minecraft:overworld]7.45, -60.0, 0.39)Después de encenderlo, el log del servidor muestra la prueba: DzBot[/127.0.0.1:52214] logged in with entity id 103 — esa línea es la que dice que el bot entró.
Trampas medidas
Las que de verdad costaron tiempo en este servidor de prueba.
La whitelist expulsa al bot
Paper 26.3 viene con white-list=true. Quien entra es expulsado con «You are not whitelisted on this server!» — y el bot nunca aparece en el panel.
Un FIFO sin escritor cuelga el java
Sin el sleep 100000 > consola &, el proceso se queda colgado al abrir el FIFO: no arranca, no abre el puerto y no registra nada.
El filtro de spam de Paper expulsa al bot
Cada mensaje de chat cuenta. Tres comandos de chat = expulsión. Para mover el bot usa /tp y /give desde la consola, nunca desde el chat.
El UUID offline no es el UUID premium
En modo offline el UUID es el md5 de «OfflinePlayer:'<nombre>». Si el ops.json tiene el UUID de la cuenta de Microsoft, la consola dice «Nothing changed…» y el jugador sigue sin ser operador.
Geyser sin las dos claves rechaza al cliente Bedrock
El síntoma es «Faça login no Xbox para ingressar neste servidor» — y parece un problema de cuenta, cuando es configuración de Geyser.
Java 21 no arranca la 26.3
El proceso muere con «Minecraft 26.1 and newer requires running the server with Java 25 or above».
Lo que todavía NO funciona
Esta sección es lo contrario del resto de la guía, a propósito. Es la lista de lo que se midió y NO funcionó — y es la misma lista que el dueño de DzBot pidió que quedara escrita en la pantalla.
El reenvío de puertos del NetherNet todavía no está hecho
NetherNet ya está habilitado en la configuración (transport: both, webrtc-port: 19133, signaling: → mode: builtin) y el aviso de Geyser desapareció. Lo que falta es abrir los puertos en el router: UDP 19133 y TCP 19132. Medido en esta máquina: el descubrimiento STUN mapeó el host al puerto público 32563 — no el 19133 —, así que la NAT del proveedor cambia el puerto y un cliente Bedrock desde fuera de la red todavía no llega por el camino nuevo.
Cualquiera puede falsificar un nombre (en modo offline)
Es el precio de apagar validate-bedrock-login para que el bot offline entre. En un servidor público eso es un agujero real, y el propio Geyser lo avisa en su archivo de configuración.
El bot Bedrock no tiene XUID
Sin cuenta de Xbox el bot no tiene XUID: no es operador por Xbox ni entra en la lista de permisos de la cuenta. El operador viene del ops.json, y solo de ahí.
El anticheat marca al bot (277 veces)
GrimAC registró 277 infracciones del DzBot — 121 Post, 67 Simulation, 39 RotationPlace, 20 FarPlace, 18 GroundSpoof, 9 AntiKB y 3 AimModulo360 — frente a 0 del jugador humano. Son el comportamiento real del bot: el orden de los paquetes de movimiento, el movimiento en sí, la rotación al colocar, el alcance, la afirmación de que está en el suelo, el knockback y el giro de yaw. El bot entra al servidor, pero todavía no es un cliente que el anticheat considere legítimo. La salida es hacer lo que hace un cliente legítimo: el alcance correcto, la cara correcta, en el suelo, sin acción de entidad espuria y con cadencia humana.
ViaBackwards en un servidor 1.21.2+ es «currently unsupported»
El aviso es de GrimAC: «This setup is currently unsupported and you will experience issues with older clients using vehicles.» No afecta al bot — afecta a vehículos con clientes antiguos.
Nada de esto es promesa de actualización: es la foto del 22/10/2026. Lo que cambie, se escribe — y la fecha cambia con ello.
Y ahora: dónde tocar en el panel
La guía termina aquí, pero el trabajo no. Estas son las pantallas que siguen el camino.
- Crear y encender el botLa pantalla del bot, donde se escriben el host, el puerto, la versión y el usuario del paso 6.
- Pestaña de plugins del botDonde se leen y encienden los plugins del servidor — el paso 3 de esta guía aparece aquí desde el otro lado.
- Documentación de la APIPara pilotar el bot con un script y una clave de acceso, en vez de hacer clic.
- Guía de redRakNet, NetherNet, puertos y el diagnóstico de Geyser y Floodgate.
- Guía de modsCuando el servidor es Forge o Fabric: qué puede hacer el bot y qué no.
- DzBot RunnerEjecutar el bot en tu propia máquina, en vez del servidor de la plataforma.
- Vitrina de MinecraftEl servidor de demostración de DzBot, para ver el bot funcionando antes de tocar el tuyo.