4 Punkte von GN⁺ 2024-10-16 | 1 Kommentare | Auf WhatsApp teilen
  • Pumpkin ist ein ausschließlich in Rust entwickelter Minecraft-Server, der eine schnelle, effiziente und anpassbare Servererfahrung bieten und zugleich den zentralen Spielmechaniken folgen soll
  • Ziel sind Performance durch Multithreading, Kompatibilität mit aktuellen Java- und Bedrock-Versionen von Minecraft-Servern, Einhaltung der Vanilla-Spielmechaniken, Schutz vor bekannten Sicherheitslücken, hohe Konfigurierbarkeit und eine Grundlage für die Plugin-Entwicklung
  • Der Funktionsumfang ist in die Bereiche Protokoll, Welt, Spieler, Entitäten, Server und Proxy gegliedert und umfasst unter anderem Server Status/Ping, Encryption, Packet Compression, Java/Bedrock, World Loading/Saving, Lighting, Entity Spawning, Inventory, RCON, Permissions, Bungeecord und Velocity
  • Derzeit befindet sich das Projekt in aktiver Entwicklung vor 1.0.0; Advancements und Villagers sind als unvollständig markiert, Mobs, Animals und Non-Living Entities als W.I.P
  • Die Ausführung erfolgt gemäß der Quick-Start-Dokumentation; über Dokumentation, Discord, GitHub Sponsors und CONTRIBUTING.md gibt es Wege zur Nutzung, Community-Teilnahme, Förderung und Mitarbeit

Zweck und Status von Pumpkin

  • Pumpkin ist ein ausschließlich in Rust geschriebener Minecraft-Server
  • Er soll eine schnelle, effiziente und anpassbare Erfahrung bieten und sich an den zentralen Spielmechaniken von Minecraft orientieren
  • Das Projekt befindet sich derzeit im Status heavy development
    • Welche Arbeiten vor dem Release von 1.0.0 noch nötig sind, lässt sich im zugehörigen Issue nachsehen

Designziele

  • Performance: Ziel ist es, durch Multithreading Geschwindigkeit und Effizienz zu steigern
  • Compatibility: Unterstützt aktuelle Java- und Bedrock-Versionen von Minecraft-Servern und folgt den Vanilla-Spielmechaniken
  • Security: Die Vermeidung bekannter Sicherheits-Exploits hat Priorität
  • Flexibility: Bietet hohe Konfigurierbarkeit, damit unnötige Funktionen deaktiviert werden können
  • Extensibility: Bietet eine Grundlage für die Plugin-Entwicklung

Umfang der implementierten Funktionen

  • Konfiguration

    • Unterstützt TOML-basierte Konfiguration
  • Protokoll

    • Tracking: Protocol
    • Server Status/Ping, Encryption, Packet Compression sowie Java/Bedrock-Unterstützung sind abgehakt
  • Welt

    • Tracking: World
    • Unterstützt Player Tab-list, Scoreboard, World Loading, World Time, World Borders, World Saving, Lighting, Entity Spawning und Bossbar
    • Für Chunk Loading und Chunk Saving sind die Varianten Vanilla, Linear und Pump abgehakt
    • Enthält Punkte zu Chunk Generation, Redstone und Liquid Physics
  • Spieler

    • Tracking: Player
    • Skins, Teleport, Movement, Animation, Inventory, Experience, Hunger, Off Hand und Eating sind abgehakt
    • Combat ist als eigener Tracking-Punkt verlinkt
    • Advancements sind als unvollständig markiert

Entitäten, Server und Proxy

  • Entities

    • Non-Living-Entitäten umfassen Minecart, Eggs usw. und sind als W.I.P markiert
    • Entity Effects, Players, Boss und Entity Saving sind abgehakt
    • Mobs und Animals sind als W.I.P markiert
    • Entity AI ist als eigener Tracking-Punkt verlinkt
    • Villagers sind als unvollständig markiert
  • Server

    • Enthält Punkte zu Plugins, Query, RCON, Inventories, Particles, Chat, Commands, Permissions und Translations
  • Proxy

    • Bungeecord und Velocity sind abgehakt

Ausführung, Dokumentation und Community

  • Die Ausführung ist im Quick Start-Guide beschrieben
  • Die Dokumentation wird auf pumpkinmc.org bereitgestellt
  • Beiträge sind willkommen; dazu wird auf CONTRIBUTING.md verwiesen
  • Für Updates, Events und die Vernetzung der Mitglieder gibt es einen Discord-Server
  • Das Projekt kann über GitHub Sponsors unterstützt werden

1 Kommentare

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

    • Aus der Perspektive von jemandem, der vor 10 Jahren viel Minecraft-Modding gemacht hat, ist es schön zu sehen, dass die Community immer noch so lebendig ist, dass solche Insider-Witze entstehen.
      Wenn man die Größe des Spiels bedenkt, ist es in keiner Sprache einfach, einen Minecraft-Server zu bauen, und dass es allein in Rust schon 7 davon gibt, ist erstaunlich.
  • Laut den Benchmarks ist der Leistungsunterschied ziemlich beeindruckend, aber es scheint, als würden Weltgenerierung und Speichern fehlen, und beides sind kostspielige Aufgaben.
    Gerade die Chunk-Generierung kann einen schwachen VPS komplett in die Knie zwingen. Da die Benchmarks wohl im Leerlauf gemessen wurden, wäre ich neugierig auf einen Vergleich, wenn diese Funktionen drin sind und real genutzt werden.
    Unterstützung für das Zerstören/Platzieren von Blöcken scheint es auch nicht zu geben; in dem Fall müsste der Server wohl Beleuchtung neu berechnen und Chunks aktualisieren.
    Zum Schluss würde mich interessieren, ob auch fortgeschrittene Funktionen wie Scoreboards, Teams und das Parsen von Command-Blöcken geplant sind. Mojang hat Brigadier für genau diesen Bereich als Open Source veröffentlicht.
    Ich hoffe, dass es reif genug wird, damit sich Server auch auf Hardware mit geringer Leistung leichter betreiben lassen.

    • Die Benchmarks sind auch beim direkten Ansehen ziemlich beeindruckend.
      Blöcke platzieren und zerstören wird bereits unterstützt, aber Beleuchtung noch nicht, deshalb sieht derzeit alles dunkel aus. Daran wird gearbeitet.
      Funktionen wie Scoreboards und Teams würde ich auch gern einbauen, und für Befehle gibt es bereits eine API, die sich ähnlich wie Brigadier nutzen lässt.
      Ich möchte es möglich machen, dass Spieler auch auf Hardware mit geringer Leistung Server hosten können, und irgendwann will ich Pumpkin auf etwas wie einem Raspberry Pi testen.
    • Chunk-Generierung ganz zum Schluss zu implementieren oder sogar ganz wegzulassen ergibt Sinn. Wenn man einen performanten Minecraft-Server will, sollte man ohnehin alle Chunks im Voraus generieren.
      In Chunks wird die Aufenthaltszeit gespeichert, daher könnte man, wenn man später eine aktualisierte Chunk-Generierungslogik anwenden möchte, auch nur die noch nicht besuchten Chunks neu generieren.
      Reimplementierungen von Minecraft-Servern sind ziemlich interessant, und es ist immer schön, neue Implementierungen zu sehen. Es gibt auch Server-Implementierungen für spezielle Zwecke, etwa MCHPRS für schnelle Redstone-Kompilierung für Technical Minecraft.
  • Ich frage mich, ob es Benchmarks gibt. Wie viel schneller ist es als der Vanilla-Server?
    Minecraft-Server haben mit steigender Spielerzahl einen extrem hohen Ressourcenverbrauch, und selbst auf sehr leistungsstarken Servern ist die TPS oft schlecht.

  • Ich habe vor Kurzem Pumpkin entwickelt. Es ist ein effizienter und schneller Minecraft-Server, komplett von Grund auf in Rust geschrieben, also schaut ihn euch gern mal an.

    • Cool. Ich würde gern wissen, wie Multithreading funktioniert. Ist nur der einfache Teil aufgeteilt, oder sind auch die eigentlichen weltbezogenen Aufgaben parallelisiert?
    • Dort steht: „Was Pumpkin nicht sein wird: ein Drop-in-Ersatz für Vanilla oder andere Server“ — aber wenn es kein Drop-in-Ersatz ist, ist es dann nicht schwer, es als Minecraft-Server zu sehen?
      Ein Uno-Deck ist auch kein Drop-in-Ersatz für ein Hearts-Deck, aber beides sind trotzdem Kartenspiele; beides ist nur kein Uno-Deck.
      Oder bedeutet es, dass Pumpkin abseits des Netzwerks anders als Vanilla funktioniert, sodass man eine in Vanilla erstellte Welt möglicherweise nicht in Pumpkin öffnen kann?
  • Ich kannte das Projekt schon länger und war auch auf dem Discord. Inzwischen habe ich meinen Discord-Account aus Gründen der psychischen Gesundheit gelöscht.
    Ich freue mich, dass das Projekt auf Hacker News offenbar ziemlich gut ankommt. 140 Upvotes sind schon ziemlich ordentlich.
    Soweit ich mich erinnere, gab es noch einen anderen in Rust geschriebenen Server, aber ich weiß nicht mehr genau welchen.
    Als ich zuletzt nachgesehen habe, war es wirklich noch frühe Alpha-Software, aber das Entwicklungstempo war gut. Wie der aktuelle Stand ist, weiß ich nicht, aber ich erinnere mich daran, dass der Autor damals in einer Prüfungsphase war.

    • Ich freue mich wirklich sehr, dass so viele Leute das Projekt mögen. Es ist noch ein Work-in-Progress-Projekt, aber ich arbeite hart daran.
      Letzte Woche habe ich die Prüfungen beendet, und jetzt sind Ferien, daher sind auch die Commits wieder auf dem üblichen Niveau.
    • Das könnte Cuberite sein, das in C geschrieben ist.
  • Ich würde gern wissen, ob der Main-Thread nach Regionen geshardet wird, etwa wie bei Paper Folia. Oder ob nur nicht blockierende Entitäten in separate Threads ausgelagert werden.

  • Minecraft ist inzwischen weit genug rückentwickelt, dass ich nur noch darauf warte, dass mehrere Server- und Client-Implementierungen einfach als kompatibles eigenes Protokoll existieren.

    • Das Netzwerkprotokoll von Bedrock ist dokumentiert: https://github.com/Mojang/bedrock-protocol-docs
    • Das ist bereits so. Das komplette Protokoll wurde rückentwickelt, es gibt Tools zum automatischen Deobfuskieren des Codes, und es existiert bereits eine vollständige Reimplementierung von Minecraft, die sogar Server unterstützt.
  • Ich werde es mal ausprobieren. Die Performance des reinen Vanilla-Server-JAR ist einfach zu schlecht. Das ist etwas, das Mojang verbessern sollte.
    Soweit ich weiß, ist die Generierung neuer Chunks zumindest multithreaded.
    Ich hätte außerdem gern grundlegende offizielle Unterstützung für die Verwaltung von SMP-Servern. Ein mit zwei Eckkoordinaten definierter Bereich und einfache Berechtigungen wie Platzieren, Zerstören und Interagieren würden völlig reichen.
    Eine einfache Konfigurationsdatei wäre genug, und Anfragen oder Updates könnte man mit anderen Tools verwalten. Ein einfaches In-Game-Kommandozeilen-Utility für Admins wäre auch in Ordnung.
    Ich hätte einfach gern etwas, das nicht immer nur geschlossene Whitelists erzwingt. Ich weiß, dass es dafür Plugins für Paper/Waterfall usw. gibt, aber es hat Vorteile, bei reinem Vanilla zu bleiben.
    Ich halte meinen Server schon seit langer Zeit am Laufen.

    • Man sollte nur im Hinterkopf behalten, dass es noch nicht fertig ist und viele Funktionen fehlen.
      Es ist gut möglich, dass dir gefällt, dass ich alles Genannte über Konfigurationsdateien einstellbar machen möchte.
      Falls es Probleme gibt, schau unter https://snowiiii.github.io/Pumpkin/troubleshooting/common_is... nach oder bitte auf Discord um Hilfe.
  • Es ist 0 Tage her, seit ein neuer Minecraft-Server in Rust erschienen ist
    https://dayssincelastrustmcserver.com/

    • Lustige Website, aber ein bisschen unfair. Von denen ist eigentlich nur Valence ein Fall, bei dem man sagen kann: „Gibt es doch schon.“
      Von insgesamt 7 sind die ersten 3 tot, und die neuesten 3 sind allesamt Projekte aus 2024, einschließlich Pumpkin. Die Projekte aus 2024 weisen ausdrücklich auf ihre Unterschiede zu Valence hin, das eher einem Framework ähnelt, das sich auf Modularität konzentriert.
      Die neuesten 3 wirken wie freundliche, gesunde Konkurrenten zueinander
      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
    • Es ist ziemlich witzig, dass viele davon im Grunde sagen: „Ein Minecraft-Server? Nein. Ein Framework, mit dem du deinen eigenen Rewrite eines Minecraft-Servers bauen kannst.“
    • Pumpkin steht bereits auf dieser Liste
    • Das lässt mich darüber nachdenken, ob Rust dafür wirklich das richtige Werkzeug ist. Elixir/Erlang fühlte sich eher wie das perfekte Werkzeug an, und tatsächlich hat das schon jemand gebaut
      Gutes Referenzmaterial für Leute, die lernen wollen, wie man so etwas auf der BEAM macht: https://github.com/thecodeboss/minecraft
    • Ich dachte, ein mit Bevy gebauter Minecraft-Server wäre cool, aber selbst das gab es schon: https://github.com/valence-rs/valence
  • Was bedeutet hier eigentlich modern?

    • Heutzutage scheint „modern“ als loses Adjektiv im Sinn von „$thing [in Rust] neu geschrieben“ verwendet zu werden
      Minecraft wurde 2011 entwickelt, und laut Wikipedia erschien die letzte Version der „classic“-Edition 2017. Also ist streng genommen alles nach 2017 nicht altmodisch. Etwas neu zu schreiben ist an sich völlig okay, aber „modern“ als Wert an sich zu verkaufen ist ziemlich vage, und ob es objektiv besser ist, ist oft umstritten
    • Es bedeutet, dass es von Grund auf geschrieben wurde und im Unterschied zum Vanilla-Minecraft-Servercode eine saubere Basis hat
      Man will auch moderne Features wie Multithreading oder eben Rust nutzen. Ich sehe Rust als eine moderne Sprache, die dafür entworfen wurde, Fehler älterer Sprachen zu korrigieren
    • In Software bedeutet modern fast immer nur, dass etwas in den letzten Jahren geschrieben wurde. Als Adjektiv zur Beschreibung von Software ist es nicht besonders nützlich
      SQLite würde man zum Beispiel wahrscheinlich nicht als modern bezeichnen, aber das ist egal, weil es ohnehin alle mögen