4 points par GN⁺ 2024-10-16 | 1 commentaires | Partager sur WhatsApp
  • Pumpkin est un serveur Minecraft conçu uniquement en Rust, avec pour objectif d’offrir une expérience serveur rapide, efficace et personnalisable, tout en respectant les mécanismes fondamentaux du jeu
  • Ses objectifs sont les suivants : performance basée sur le multithreading, compatibilité avec les dernières versions des serveurs Minecraft Java et Bedrock, respect des mécaniques de jeu Vanilla, prévention des vulnérabilités de sécurité connues, haut niveau de configuration et base pour le développement de plugins
  • Le périmètre fonctionnel est réparti entre les domaines protocole, monde, joueur, entités, serveur et proxy, avec notamment Server Status/Ping, Encryption, Packet Compression, Java/Bedrock, World Loading/Saving, Lighting, Entity Spawning, Inventory, RCON, Permissions, Bungeecord et Velocity
  • Le projet est actuellement en phase de développement active avant la 1.0.0 ; Advancements et Villagers sont marqués comme incomplets, tandis que Mobs, Animals et Non-Living Entities sont indiqués comme W.I.P
  • L’exécution suit la documentation Quick Start, et le projet propose la documentation, Discord, GitHub Sponsors et CONTRIBUTING.md comme points d’entrée pour l’usage, la participation communautaire, le soutien et les contributions

Objectif et état de Pumpkin

  • Pumpkin est un serveur Minecraft écrit uniquement en Rust
  • Il vise à fournir une expérience rapide, efficace et personnalisable, tout en respectant les mécaniques de jeu fondamentales de Minecraft
  • Le projet est actuellement en état de heavy development

Objectifs de conception

  • Performance : l’objectif est d’améliorer la vitesse et l’efficacité grâce au multithreading
  • Compatibility : prise en charge des dernières versions des serveurs Minecraft Java et Bedrock, avec respect des mécaniques de jeu Vanilla
  • Security : priorité à la prévention des exploits de sécurité connus
  • Flexibility : offre un haut niveau de configuration permettant de désactiver les fonctionnalités inutiles
  • Extensibility : fournit une base pour le développement de plugins

Périmètre des fonctionnalités implémentées

  • Configuration

    • Prise en charge d’une configuration basée sur TOML
  • Protocole

    • Tracking: Protocol
    • Server Status/Ping, Encryption, Packet Compression et Java/Bedrock sont cochés comme pris en charge
  • Monde

    • Tracking: World
    • Prise en charge de Player Tab-list, Scoreboard, World Loading, World Time, World Borders, World Saving, Lighting, Entity Spawning et Bossbar
    • Chunk Loading et Chunk Saving sont cochés sous les formes Vanilla, Linear et Pump
    • Comprend aussi les éléments Chunk Generation, Redstone et Liquid Physics
  • Joueur

    • Tracking: Player
    • Skins, Teleport, Movement, Animation, Inventory, Experience, Hunger, Off Hand et Eating sont cochés
    • Combat est relié comme élément de suivi séparé
    • Advancements est indiqué comme incomplet

Entités, serveur et proxy

  • Entities

    • Les entités non vivantes incluent Minecart, Eggs, etc., et sont marquées comme W.I.P
    • Entity Effects, Players, Boss et Entity Saving sont cochés
    • Mobs et Animals sont marqués comme W.I.P
    • Entity AI est relié comme élément de suivi séparé
    • Villagers est indiqué comme incomplet
  • Server

    • Comprend les éléments Plugins, Query, RCON, Inventories, Particles, Chat, Commands, Permissions et Translations
  • Proxy

    • Bungeecord et Velocity sont cochés

Exécution, documentation et communauté

  • La méthode d’exécution est disponible dans le guide Quick Start
  • La documentation est fournie sur pumpkinmc.org
  • Les contributions sont les bienvenues, avec invitation à consulter CONTRIBUTING.md
  • Un serveur Discord est proposé pour les mises à jour, les événements et les échanges entre membres
  • Il est possible de soutenir le projet via GitHub Sponsors

1 commentaires

 
GN⁺ 2024-10-16
Avis sur Hacker News
  • https://dayssincelastrustmcserver.com/

    • Ayant beaucoup fait de modding Minecraft il y a dix ans, ça me fait plaisir de voir que la communauté est encore assez active pour générer ce genre de private jokes
      Vu l’ampleur du jeu, créer un serveur Minecraft dans n’importe quel langage n’a rien de simple, et c’est surprenant qu’il en existe déjà sept rien qu’en Rust
  • L’écart de performances dans les benchmarks est assez impressionnant, mais il semble que la génération et la sauvegarde du monde soient absentes, alors que ce sont deux opérations coûteuses
    La génération de chunks, en particulier, peut mettre à genoux un petit VPS. Les benchmarks ont probablement été mesurés au repos, donc je serais curieux de voir la comparaison une fois ces fonctions ajoutées et utilisées en conditions réelles
    Je ne vois pas non plus de prise en charge de la destruction/pose de blocs ; dans ce cas, le serveur devra sans doute recalculer l’éclairage et mettre à jour les chunks
    Enfin, je me demande s’il est prévu d’ajouter des fonctions avancées comme les tableaux de score, les équipes ou le parsing des blocs de commande. Mojang a publié Brigadier en open source pour cela
    J’espère que le projet deviendra assez mature pour faciliter l’exploitation de serveurs même sur du matériel modeste

    • Les benchmarks sont assez impressionnants, même en les regardant directement
      La pose et la destruction de blocs sont déjà prises en charge, mais pas encore l’éclairage, donc pour l’instant tout apparaît sombre. C’est en cours
      J’aimerais aussi ajouter des fonctions comme les tableaux de score et les équipes, et il existe déjà une API utilisable pour les commandes, proche de Brigadier
      Je veux permettre aux joueurs d’héberger des serveurs même sur du matériel peu puissant, et j’ai l’intention de tester un jour Pumpkin sur quelque chose comme un Raspberry Pi
    • Il serait logique d’implémenter la génération de chunks en dernier, voire pas du tout. Si l’on veut un serveur Minecraft performant, il faut de toute façon prégénérer tous les chunks
      Comme le temps de résidence est stocké dans les chunks, si l’on veut appliquer plus tard une logique de génération de chunks mise à jour, on peut aussi ne régénérer que les chunks qui n’ont pas encore été visités
      Les réimplémentations de serveurs Minecraft sont assez intéressantes, et c’est toujours agréable d’en voir de nouvelles. Il existe aussi des implémentations de serveurs à usage spécifique, comme MCHPRS pour la compilation rapide de redstone destinée au Minecraft technique
  • Je me demande s’il y a des benchmarks. À quel point est-ce plus rapide qu’un serveur vanilla ?
    Les serveurs Minecraft voient leur consommation de ressources exploser à mesure que le nombre de joueurs augmente, et même avec un serveur très puissant, on obtient souvent un mauvais TPS

  • J’ai récemment développé Pumpkin. C’est un serveur Minecraft efficace et rapide, entièrement écrit from scratch en Rust, donc j’aimerais bien que vous y jetiez un œil

    • Super. Je me demande comment fonctionne le multithreading. Est-ce que seules les parties faciles ont été séparées, ou est-ce que le vrai travail lié au monde est aussi parallélisé ?
    • Il est écrit : « Ce que Pumpkin ne fera pas : devenir un remplaçant drop-in de vanilla ou d’autres serveurs ». Mais si ce n’est pas un remplaçant drop-in, j’ai du mal à voir en quoi c’est un serveur Minecraft
      Un paquet de Uno n’est pas un remplaçant drop-in d’un paquet pour Hearts, mais ce sont simplement deux jeux de cartes ; pour autant, ce ne sont pas tous les deux des paquets de Uno
      À moins que cela veuille dire que Pumpkin se comporte différemment de vanilla en dehors du réseau, et qu’un monde créé avec vanilla pourrait ne pas s’ouvrir avec Pumpkin ?
  • Je connaissais ce projet depuis un moment et j’étais aussi sur le Discord. J’ai depuis supprimé mon compte Discord pour préserver ma santé mentale
    Je suis content de voir que Hacker News semble bien apprécier ce projet. 140 upvotes, c’est plutôt correct à mon avis
    Dans mon souvenir, il existait aussi un autre serveur écrit en Rust, mais je ne sais plus exactement lequel
    La dernière fois que je l’ai vu, c’était vraiment un logiciel en alpha très précoce, mais le rythme de développement était bon. Je ne sais pas où il en est maintenant, et je me souviens que l’auteur était parti passer des examens à cette période

    • Je suis vraiment heureux que tant de gens aiment le projet. C’est encore un projet en cours, mais on y travaille dur
      J’ai terminé mes examens la semaine dernière et je suis maintenant en vacances, donc les commits sont revenus à leur rythme habituel
    • C’était peut-être Cuberite, écrit en C
  • Je me demande si le thread principal est shardé par région, comme avec Paper Folia par exemple, ou si seules les entités non-bloc sont séparées dans un thread distinct

  • J’attends que Minecraft soit suffisamment rétro-ingéniéré pour que plusieurs implémentations de serveurs et de clients deviennent simplement compatibles comme avec un protocole propre

    • Le protocole réseau de Bedrock est documenté : https://github.com/Mojang/bedrock-protocol-docs
    • C’est déjà le cas. Le protocole complet a été rétro-ingéniéré, il existe des outils qui désobfusquent automatiquement le code, et il existe déjà une réimplémentation complète de Minecraft avec prise en charge serveur
  • Je vais essayer. Les performances du jar vanilla pur sont vraiment trop mauvaises. C’est quelque chose que j’aimerais voir Mojang améliorer
    Pour autant que je sache, la génération de nouveaux chunks est au moins multithreadée
    J’aimerais aussi qu’il y ait un support officiel pour le contrôle de base des serveurs SMP. Une région définie par deux coordonnées de sommets, avec des permissions de base comme poser, casser et interagir, suffirait
    Un simple fichier de configuration ferait l’affaire, et les requêtes ou les mises à jour pourraient être gérées par d’autres outils. Un petit utilitaire de ligne de commande en jeu pour les administrateurs serait aussi acceptable
    Je voudrais simplement ne pas toujours devoir utiliser une liste blanche fermée. Je sais qu’il existe des plugins pour Paper/Waterfall, etc., mais il y a des avantages à rester en vanilla pur
    Je maintiens un serveur en vie depuis longtemps

    • Il faut juste garder en tête que ce n’est pas encore terminé et qu’il manque beaucoup de fonctions
      J’aimerais que tout ce que tu as listé soit configurable via un fichier de configuration, donc il y a de bonnes chances que ça te plaise
      En cas de problème, tu peux consulter https://snowiiii.github.io/Pumpkin/troubleshooting/common_is... ou demander de l’aide sur Discord
  • Cela fait 0 jour qu’un nouveau serveur Minecraft écrit en Rust est sorti
    https://dayssincelastrustmcserver.com/

    • Site amusant, mais un peu injuste. Parmi ceux-là, le seul pour lequel on pourrait vraiment dire « il existe déjà », c’est Valence
      Sur 7 au total, les 3 premiers sont morts, et les 3 plus récents sont tous des projets de 2024, Pumpkin compris. Les projets de 2024 indiquent tous explicitement ce qui les distingue de Valence, qui ressemble davantage à un framework axé sur la modularité
      Les 3 plus récents semblent être des concurrents sains et bienveillants les uns envers les autres
      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
    • C’est assez drôle que beaucoup d’entre eux soient plutôt du genre « Est-ce un serveur Minecraft ? Non. C’est un framework pour créer votre propre réécriture de serveur Minecraft »
    • Pumpkin figure déjà dans cette liste
    • En voyant ça, je me demande si Rust est vraiment l’outil adapté à cette tâche. Au contraire, Elixir/Erlang m’a semblé être l’outil parfait, et quelqu’un l’a d’ailleurs déjà fait
      C’est une bonne référence pour quiconque veut apprendre comment faire ce genre de choses sur la BEAM : https://github.com/thecodeboss/minecraft
    • Je me disais qu’un serveur Minecraft fait avec Bevy serait cool, et ça existait déjà aussi : https://github.com/valence-rs/valence
  • Que signifie modern ici ?

    • Ces temps-ci, « modern » semble être utilisé comme un adjectif assez vague signifiant « $thing réécrit [en Rust] »
      Minecraft a été créé en 2011 et, selon Wikipédia, la dernière version de l’édition « classic » est sortie en 2017. Donc tout ce qui date d’après 2017 n’est pas vraiment ancien
      Réécrire quelque chose n’est pas un problème en soi, mais mettre en avant « modern » comme une valeur est assez vague, et il est souvent discutable que ce soit objectivement meilleur
    • Cela signifie que c’est écrit depuis zéro et que, contrairement au code du serveur Minecraft vanilla, ça repose sur une base propre
      On veut aussi utiliser des fonctionnalités modernes comme le multithreading ou Rust. Je considère Rust comme un langage moderne conçu pour corriger les erreurs des anciens langages
    • Dans le logiciel, modern signifie presque toujours simplement que ça a été écrit ces dernières années. Comme adjectif pour décrire un logiciel, ce n’est pas très utile
      Par exemple, SQLite ne serait probablement pas qualifié de modern, mais comme tout le monde l’aime, ça n’a pas d’importance