4 puntos por GN⁺ 2024-10-16 | 1 comentarios | Compartir por WhatsApp
  • 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

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

    • Incluye los ítems Plugins, Query, RCON, Inventories, Particles, Chat, Commands, Permissions y Translations
  • 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

 
GN⁺ 2024-10-16
Comentarios en Hacker News
  • https://dayssincelastrustmcserver.com/

    • Como alguien que hizo mucho modding de Minecraft hace 10 años, da gusto ver que la comunidad sigue tan activa como para que todavía surjan este tipo de bromas internas
      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

    • El benchmark incluso viéndolo directamente es bastante impresionante
      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
    • La generación de chunks tiene sentido implementarla al final o incluso no implementarla en absoluto. Si quieres un servidor de Minecraft con buen rendimiento, de todos modos deberías pregenerar todos los chunks
      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

  • 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

    • Genial. Me da curiosidad cómo funciona el multithreading. Si solo separaron las partes fáciles, o si de verdad paralelizaron el trabajo real relacionado con el mundo
    • Dice “Lo que Pumpkin no hará: convertirse en un reemplazo drop-in de vanilla u otros servidores”, pero si no es un reemplazo drop-in, cuesta verlo como un servidor de Minecraft
      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

    • Me alegra mucho que a tanta gente le guste el proyecto. Sigue siendo un proyecto en progreso, pero le estamos metiendo muchas ganas
      Terminé los exámenes la semana pasada y ahora estoy de vacaciones, así que los commits ya volvieron a la normalidad
    • Podría ser Cuberite, escrito en C
  • 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

    • El protocolo de red de Bedrock está documentado: https://github.com/Mojang/bedrock-protocol-docs
    • Eso ya pasó. Todo el protocolo ya fue revertido, también existen herramientas que desofuscan el código automáticamente, e incluso ya hay reimplementaciones completas de Minecraft que incluyen servidor
  • 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

    • Solo ten en cuenta que todavía no está terminado y que le faltan muchas funciones
      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/

    • Es un sitio gracioso, pero un poco injusto. De esos, en realidad el único del que se puede decir “ya existe” es Valence
      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í
      released stars last_update
      feather 19aug 2,614 2 years ago
      mchprs 20jun 1,632 last month
      graphite 22jun 160 2 years ago
      valence 22sep 2,731 3 days ago
      hyperion 24mar 361 today
      pumpkin 24jul 965 today
      ferrumc 24sep 673 today
    • Da bastante risa que muchos de estos en realidad sean “¿un servidor de Minecraft? No. Son un framework para crear tu propia reimplementación de servidor de Minecraft”
    • Pumpkin ya está en esa lista
    • Esto me hace pensar si Rust de verdad es la herramienta adecuada para este trabajo. Más bien sentí que Elixir/Erlang sería la herramienta perfecta, y de hecho alguien ya hizo uno
      Es una buena referencia para quien quiera aprender cómo se hace algo así en BEAM: https://github.com/thecodeboss/minecraft
    • Pensé que estaría genial que hubiera un servidor de Minecraft hecho con Bevy, pero eso también ya existía: https://github.com/valence-rs/valence
  • ¿Qué significa modern aquí?

    • Hoy en día parece que “modern” se usa como un adjetivo flexible para decir “reescribimos $thing [en Rust]”
      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
    • Significa que fue escrito desde cero y que, a diferencia del código del servidor vanilla de Minecraft, tiene una base limpia
      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
    • En software, modern casi siempre solo significa que fue escrito en los últimos años. Como adjetivo para describir software, no sirve de mucho
      Por ejemplo, probablemente a SQLite no se le llamaría modern, pero como a todo el mundo le gusta, da igual