Show HN: Pumpkin, un servidor moderno de Minecraft escrito en Rust
(github.com/Snowiiii)- Pumpkin es un servidor de Minecraft hecho únicamente en Rust, cuyo objetivo es ofrecer una experiencia de servidor rápida, eficiente y personalizable, siguiendo a la vez las mecánicas principales del juego
- Sus objetivos son rendimiento basado en multithreading, compatibilidad con las versiones más recientes de servidores Minecraft Java y Bedrock, cumplimiento de las mecánicas Vanilla del juego, prevención de vulnerabilidades de seguridad conocidas, alta configurabilidad y ofrecer una base para el desarrollo de plugins
- El alcance de funcionalidades se divide en las áreas de protocolo, mundo, jugador, entidades, servidor y proxy, e incluye Server Status/Ping, Encryption, Packet Compression, Java/Bedrock, World Loading/Saving, Lighting, Entity Spawning, Inventory, RCON, Permissions, Bungeecord, Velocity, entre otras
- Actualmente está en una etapa de desarrollo activo previa a la 1.0.0; Advancements y Villagers figuran como incompletos, y Mobs, Animals y Non-Living Entities figuran como W.I.P
- Para ejecutarlo, se debe seguir la documentación de Quick Start; además, ofrece vías de uso, participación comunitaria, patrocinio y contribución mediante la documentación, Discord, GitHub Sponsors y CONTRIBUTING.md
Propósito y estado de Pumpkin
- Pumpkin es un servidor de Minecraft escrito únicamente en Rust
- Busca ofrecer una experiencia rápida, eficiente y personalizable, y seguir las mecánicas principales de juego de Minecraft
- El proyecto se encuentra actualmente en estado de heavy development
- Las tareas necesarias antes del lanzamiento 1.0.0 pueden consultarse en el issue correspondiente
Objetivos de diseño
- Performance: apunta a mejorar la velocidad y la eficiencia aprovechando el multithreading
- Compatibility: soporta las versiones más recientes de servidores Minecraft Java y Bedrock, y sigue las mecánicas Vanilla del juego
- Security: prioriza la prevención de exploits de seguridad conocidos
- Flexibility: ofrece alta configurabilidad para desactivar funciones innecesarias
- Extensibility: proporciona una base para el desarrollo de plugins
Alcance de funciones implementadas
-
Configuración
- Soporta configuración basada en TOML
-
Protocolo
- Tracking: Protocol
- Server Status/Ping, Encryption, Packet Compression y soporte Java/Bedrock figuran como completados
-
Mundo
- Tracking: World
- Soporta Player Tab-list, Scoreboard, World Loading, World Time, World Borders, World Saving, Lighting, Entity Spawning y Bossbar
- Chunk Loading y Chunk Saving figuran como completados en las modalidades Vanilla, Linear y Pump
- Incluye los ítems Chunk Generation, Redstone y Liquid Physics
-
Jugador
- Tracking: Player
- Skins, Teleport, Movement, Animation, Inventory, Experience, Hunger, Off Hand y Eating figuran como completados
- Combat está vinculado como elemento de seguimiento separado
- Advancements figura como incompleto
Entidades, servidor y proxy
-
Entities
- Las entidades Non-Living incluyen Minecart, Eggs, etc., y figuran como W.I.P
- Entity Effects, Players, Boss y Entity Saving figuran como completados
- Mobs y Animals figuran como W.I.P
- Entity AI está vinculado como elemento de seguimiento separado
- Villagers figura como incompleto
-
Server
-
Proxy
- Bungeecord y Velocity figuran como completados
Ejecución, documentación y comunidad
- La forma de ejecución puede consultarse en la guía Quick Start
- La documentación está disponible en pumpkinmc.org
- Las contribuciones son bienvenidas y se indica consultar CONTRIBUTING.md
- Ofrece un servidor de Discord para actualizaciones, eventos y conectar con miembros
- Es posible patrocinar el proyecto mediante GitHub Sponsors
1 comentarios
Comentarios en Hacker News
https://dayssincelastrustmcserver.com/
Considerando la escala del juego, crear un servidor de Minecraft en cualquier lenguaje no es nada fácil, así que sorprende que ya haya 7 hechos en Rust
En los benchmarks la diferencia de rendimiento se ve bastante impresionante, pero parece que faltan las funciones de generación y guardado del mundo, y ambas son tareas costosas
En particular, la generación de chunks puede tumbar por completo un VPS modesto. Como el benchmark seguramente se midió en estado inactivo, me da curiosidad cómo se comparará cuando esas funciones estén implementadas y se usen de verdad
Tampoco parece haber soporte para romper/colocar bloques, y en ese caso el servidor probablemente necesitaría recalcular la iluminación y actualizar los chunks
Por último, me pregunto si también planean añadir funciones avanzadas como scoreboard, equipos y parsing de command blocks. Mojang ya liberó Brigadier como open source para ese lado
Ojalá madure lo suficiente como para que operar un servidor sea fácil incluso en hardware de bajos recursos
Colocar y romper bloques ya está soportado, pero la iluminación todavía no, así que por ahora todo se ve oscuro. Estamos trabajando en eso
También queremos meter funciones como scoreboard y equipos, y ya existe una API que se puede usar de forma parecida a Brigadier para comandos
Queremos que los jugadores puedan hostear servidores incluso en hardware modesto, y algún día pensamos probar Pumpkin en algo como una Raspberry Pi
Los chunks guardan tiempo de residencia, así que si después quieres aplicar una lógica actualizada de generación de chunks, también podrías regenerar solo los chunks que aún no han sido visitados
Reimplementar un servidor de Minecraft es bastante interesante y siempre da gusto ver nuevas implementaciones. También existen implementaciones de servidor con objetivos específicos, como MCHPRS para compilación rápida de redstone en Minecraft técnico
Me pregunto si hay benchmarks. ¿Qué tanto más rápido es que el servidor vanilla?
Los servidores de Minecraft tienden a disparar el uso de recursos a medida que aumenta la cantidad de jugadores, y a veces incluso corriendo servidores muy potentes el TPS sale mal
https://snowiiii.github.io/Pumpkin/about/benchmarks.html
Hace poco desarrollé Pumpkin. Es un servidor de Minecraft eficiente y rápido, escrito completamente desde cero en Rust; me gustaría que le echaran un vistazo
Un mazo de Uno no es un reemplazo drop-in de un mazo de Hearts, pero ambos siguen siendo juegos de cartas; no por eso ambos son mazos de Uno
O quizá significa que Pumpkin funciona distinto de vanilla fuera de la red, y que un mundo creado para vanilla podría no abrirse en Pumpkin
Conozco este proyecto desde hace tiempo y hasta estaba en su Discord. Ahora borré mi cuenta de Discord por salud mental
Me da gusto que en Hacker News parezca gustar bastante este proyecto. 140 upvotes me parece bastante bien
Según recuerdo, creo que también había otro servidor escrito en Rust, aunque no estoy seguro
La última vez que lo vi era realmente un software alfa muy temprano, pero el ritmo de desarrollo era bueno. No sé bien en qué estado esté ahora, aunque recuerdo que fue por la época en que el autor se fue a rendir exámenes
Terminé los exámenes la semana pasada y ahora estoy de vacaciones, así que los commits ya volvieron a la normalidad
Me pregunto si están usando un enfoque de shardear el hilo principal por regiones, como Paper Folia, por ejemplo. O si más bien solo separan en otros hilos las entidades que no son bloques
Minecraft ya ha sido suficientemente sometido a ingeniería inversa como para que solo estoy esperando que múltiples implementaciones de servidor y cliente simplemente se vuelvan un protocolo propio interoperable
Lo voy a probar. El rendimiento del jar del servidor vanilla puro es demasiado malo. Es algo que ojalá Mojang mejorara
Según entiendo, la generación de chunks nuevos al menos sí es multihilo
También me gustaría que hubiera soporte oficial para control básico de servidores SMP. Con una región definida por dos coordenadas de esquinas y permisos básicos como colocar, romper e interactuar, sería suficiente
Bastaría con un archivo de configuración simple, y las solicitudes o actualizaciones podrían gestionarse con otras herramientas. También serviría una utilidad sencilla de línea de comandos dentro del juego para operadores
Quisiera algo que no me obligue a usar siempre una whitelist cerrada. Sé que hay plugins para Paper/Waterfall y otros, pero mantener vanilla puro tiene sus ventajas
Llevo mucho tiempo manteniendo vivo mi servidor
Hay muchas probabilidades de que te guste, porque queremos que todo lo que enumeraste se pueda configurar desde archivos de configuración
Si tienes problemas, puedes revisar https://snowiiii.github.io/Pumpkin/troubleshooting/common_is... o pedir ayuda en Discord
Han pasado 0 días desde que salió un nuevo servidor de Minecraft escrito en Rust
https://dayssincelastrustmcserver.com/
De un total de 7, los primeros 3 están muertos, y los 3 más recientes, incluyendo Pumpkin, son todos proyectos de 2024. Todos los proyectos de 2024 dejan clara su diferencia frente a Valence, que es más bien un framework enfocado en la modularidad
Los 3 más recientes parecen competidores amistosos y sanos entre sí
Es una buena referencia para quien quiera aprender cómo se hace algo así en BEAM: https://github.com/thecodeboss/minecraft
¿Qué significa modern aquí?
Minecraft se creó en 2011 y, según Wikipedia, la última versión de la edición ‘classic’ salió en 2017. Así que, en teoría, todo lo posterior a 2017 ya no sería anticuado
Reescribir algo en sí no tiene nada de malo, pero presentar “modern” como un valor es bastante ambiguo, y si objetivamente es mejor también suele ser debatible
También quieren usar características modernas como multithreading o Rust. Considero que Rust es un lenguaje moderno, diseñado para corregir errores de lenguajes más antiguos
Por ejemplo, probablemente a SQLite no se le llamaría modern, pero como a todo el mundo le gusta, da igual