Jeder erfahrene Minecraft Server-Betreiber kennt das Szenario: Der Chat wird von einer Flut an Meldungen über freigeschaltete Advancements überschwemmt, während Spieler mit einem unaufhörlichen „Pling!” und Pop-ups konfrontiert werden. Auf Vanilla-Servern sind diese Fortschrittsbenachrichtigungen eine nette Sache, ein Motivator für Erkundung und Errungenschaften. Doch auf spezialisierten Servern wie Minigame-Lobbys, Kreativ-Welten oder großen Survival-Netzwerken können sie schnell zur Plage werden – sie stören den Spielfluss, lenken ab und können sogar zu Client-seitigem Stottern führen.
Wenn du die Kontrolle über deinen Server zurückgewinnen und dieses Chaos beenden möchtest, bist du hier genau richtig. In diesem umfassenden Guide erfährst du, wie du mithilfe der leistungsstarken Paper API diese nervigen Advancement Packets effektiv abfängst und unterdrückst. Wir zeigen dir sowohl die einfache Konfigurationsmethode für Nicht-Entwickler als auch den detaillierten Weg über die Plugin-Entwicklung für maximale Flexibilität.
Was sind Minecraft Advancements und warum können sie stören?
Advancements wurden in Minecraft 1.12 eingeführt und dienen als internes Erfolgssystem, das Spieler für das Erreichen bestimmter Meilensteine belohnt. Ob es das erste Holzhacken ist („Minecraft.”) oder das Besiegen des Enderdrachens („Das Ende?”), diese Benachrichtigungen sollen den Fortschritt des Spielers hervorheben. Sie erscheinen als Toast-Pop-ups oben rechts auf dem Bildschirm und senden eine Nachricht in den Chat.
Auf einem reinen Survival-Server, wo die Spieler oft lange Zeit mit der Entwicklung ihrer Welt verbringen, sind Advancements eine willkommene Ergänzung. Sie bieten eine zusätzliche Ebene der Zielsetzung und belohnen die Ausdauer. Doch stell dir vor, du betreibst einen Minigame-Server, auf dem Spieler ständig in neue Welten geladen werden, sterben und neu starten. Jedes Mal, wenn ein Spieler ein Advancements zum ersten Mal in dieser Session erreicht (oder dessen Kriterien erneut erfüllt), kann die Benachrichtigung erneut aufploppen oder zumindest die Chat-Meldung erscheinen, wenn es ein global sichtbar gemachtes Advancements ist. Die schiere Menge dieser Nachrichten kann Spieler frustrieren, wichtige Chat-Nachrichten überdecken und die Immersion stören.
Besonders problematisch wird es auf Servern mit einer großen Anzahl von Spielern oder bei solchen, die modifizierte Spielmechaniken nutzen. Die kontinuierlichen Benachrichtigungen und die damit verbundene Verarbeitung auf Client- und Server-Seite, so gering sie im Einzelnen auch sein mag, addieren sich und können die Server-Performance subtil beeinträchtigen oder zumindest die Client-Erfahrung stören. Kurz gesagt: Auf vielen Server-Typen sind sie mehr Last als Lust.
PaperMC: Der Performance-Boost mit extra Kontrolle
Bevor wir in die technischen Details eintauchen, müssen wir über PaperMC sprechen. Paper ist ein hochleistungsfähiger Fork von Spigot, der speziell entwickelt wurde, um die Performance von Minecraft-Servern zu verbessern und gleichzeitig zusätzliche Funktionen und APIs für Entwickler bereitzustellen. Im Vergleich zu Vanilla, Bukkit oder selbst Spigot bietet Paper optimierte Code-Basen, behebt zahlreiche Bugs und führt eine Vielzahl von Konfigurationsoptionen ein, die tiefgreifende Anpassungen ermöglichen.
Die Paper API ist dabei das Herzstück dieser erweiterten Kontrolle. Sie erweitert die Funktionalität der Bukkit/Spigot API und bietet Entwicklern Zugang zu spezifischen Features, die Performance-Optimierungen, erweiterte Event-Handling-Möglichkeiten und eben auch die Möglichkeit zur Manipulation von Netzwerkpaketen – wie denen für Advancements – umfassen. Für unseren Zweck ist Paper ideal, da es direkt Event-Hooks und Konfigurationsmöglichkeiten bietet, die genau auf das Problem der Advancement-Benachrichtigungen zugeschnitten sind. Wer also einen stabilen, performanten und anpassbaren Minecraft Server betreiben möchte, kommt an PaperMC kaum vorbei.
Die einfache Lösung: Advancements über paper.yml deaktivieren
Du bist kein Entwickler, möchtest aber dennoch die nervigen Advancements loswerden? Kein Problem! PaperMC bietet eine integrierte Lösung, die sich in wenigen Schritten aktivieren lässt. Diese Methode ist ideal, wenn du eine globale Deaktivierung wünschst und keine spezifische Logik implementieren möchtest.
Schritt-für-Schritt-Anleitung für Nicht-Entwickler:
- Stelle sicher, dass dein Server PaperMC verwendet: Dies ist die Grundvoraussetzung. Wenn du noch Vanilla oder Spigot benutzt, lade dir die neueste Paper-Version von der offiziellen PaperMC-Website herunter und ersetze deine Server-JAR-Datei damit.
- Starte deinen Server einmal: Wenn du Paper zum ersten Mal verwendest, muss der Server einmal gestartet werden, damit die Standardkonfigurationsdateien, einschließlich der
paper.yml
, generiert werden. Stoppe den Server anschließend wieder. - Navigiere zum Server-Verzeichnis: Dort findest du eine Datei namens
paper.yml
. Öffne diese Datei mit einem Texteditor deiner Wahl (z.B. Notepad++, Sublime Text, VS Code). - Finde die relevante Einstellung: Suche in der
paper.yml
nach dem Abschnitt, der mitadvancements:
beginnt. Darunter solltest du eine Zeile wiehide-advancements: false
finden. - Ändere die Einstellung: Ändere den Wert von
false
auftrue
. Die Zeile sollte dann so aussehen:hide-advancements: true
. - Speichere die Datei und starte den Server neu: Nachdem du die
paper.yml
gespeichert hast, starte deinen Minecraft Server neu.
Ab sofort sollten die standardmäßigen Advancement-Benachrichtigungen, die als Pop-ups erscheinen und in den Chat gesendet werden, global unterdrückt werden. Diese einfache Methode ist der schnellste Weg, um die visuellen und textuellen Störungen zu eliminieren, ohne eine einzige Zeile Code schreiben zu müssen.
Für Entwickler: Advancements mit der Paper API programmatisch steuern
Wenn du feinere Kontrolle über die Advancements benötigst – zum Beispiel, um bestimmte Advancements weiterhin anzuzeigen, rollenbasierte Regeln zu implementieren oder spezielle Aktionen beim Erreichen eines Advancements auszulösen – dann ist die Entwicklung eines eigenen Minecraft Plugins mit der Paper API der richtige Weg. Dies erfordert grundlegende Java-Kenntnisse und ein Verständnis der Bukkit/Spigot/Paper API.
Grundlagen der Plugin-Entwicklung für Advancements
- Entwicklungsumgebung einrichten: Stelle sicher, dass du eine geeignete Java-Entwicklungsumgebung hast (z.B. IntelliJ IDEA oder Eclipse) und ein Build-System wie Maven oder Gradle für dein Projekt konfiguriert ist.
- Projekt erstellen und Abhängigkeiten hinzufügen: Erstelle ein neues Maven- oder Gradle-Projekt. Füge die Paper API als Abhängigkeit in deine
pom.xml
(Maven) oderbuild.gradle
(Gradle) ein. Die genaue Abhängigkeit findest du typischerweise auf der PaperMC-Website oder in der Paper-Dokumentation. Ein Beispiel für Maven könnte so aussehen:<dependency> <groupId>io.papermc.paper</groupId> <artifactId>paper-api</artifactId> <version>1.20.1-R0.1-SNAPSHOT</version> <!-- Oder die aktuelle Paper-Version --> <scope>provided</scope> </dependency>
- Das
plugin.yml
erstellen: Jedes Bukkit/Spigot/Paper-Plugin benötigt eineplugin.yml
-Datei im Root-Verzeichnis deines JARs (normalerweise untersrc/main/resources
). Diese Datei definiert grundlegende Informationen über dein Plugin.name: AdvancementBlocker version: 1.0 main: your.plugin.package.AdvancementBlockerPlugin api-version: 1.16 author: DeinName description: Blockiert unerwünschte Advancement-Benachrichtigungen.
Der Kern: Das PlayerAdvancementCriterionGrantEvent
Die Paper API bietet ein spezifisches Event, das ausgelöst wird, wenn ein Spieler ein Kriterium eines Advancements erfüllt: das PlayerAdvancementCriterionGrantEvent
. Dieses Event ist perfekt geeignet, um die Benachrichtigung abzufangen, bevor sie an den Client gesendet wird.
Dein Plugin wird eine Hauptklasse haben, die von JavaPlugin
erbt und einen Event-Listener implementiert. Hier ist ein einfaches Beispiel, das alle Advancement-Benachrichtigungen blockiert:
package your.plugin.package;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;
import com.destroystokyo.paper.event.player.PlayerAdvancementCriterionGrantEvent;
public class AdvancementBlockerPlugin extends JavaPlugin implements Listener {
@Override
public void onEnable() {
// Registriert diesen Listener, damit er Events verarbeiten kann
getServer().getPluginManager().registerEvents(this, this);
getLogger().info("AdvancementBlockerPlugin wurde aktiviert! Alle Advancement-Benachrichtigungen werden blockiert.");
}
@Override
public void onDisable() {
getLogger().info("AdvancementBlockerPlugin wurde deaktiviert.");
}
@EventHandler
public void onAdvancementGrant(PlayerAdvancementCriterionGrantEvent event) {
// Wenn dieses Event eintritt, bedeutet das, dass ein Spieler ein Kriterium für ein Advancement erfüllt hat.
// Um die Benachrichtigung zu unterdrücken, setzen wir das Event auf 'cancelled'.
// Paper wird dann das Senden des Advancement-Pakets an den Client verhindern.
event.setCancelled(true);
// Optional: Du könntest hier eine Nachricht an den Spieler senden,
// um ihn darüber zu informieren, dass Advancements blockiert sind.
// event.getPlayer().sendMessage("§7[DeinServer] Advancements sind auf diesem Server deaktiviert.");
// Optional: Logging auf der Serverkonsole für Debugging-Zwecke
// getLogger().info("Advancement '" + event.getAdvancement().getKey().getKey() + "' für " + event.getPlayer().getName() + " blockiert.");
}
}
Erklärung des Codes:
package your.plugin.package;
: Dies ist der Java-Paketname deines Plugins.import ...
: Importiert die notwendigen Klassen aus der Bukkit/Paper API.public class AdvancementBlockerPlugin extends JavaPlugin implements Listener
: Deine Hauptklasse, die vonJavaPlugin
erbt (macht sie zu einem Bukkit-Plugin) und dasListener
-Interface implementiert (ermöglicht das Empfangen von Events).onEnable()
: Diese Methode wird aufgerufen, wenn dein Plugin geladen wird. Hier registrieren wir unseren Event-Listener mitgetServer().getPluginManager().registerEvents(this, this);
, damit die MethodeonAdvancementGrant
aufgerufen werden kann.onDisable()
: Wird beim Entladen des Plugins aufgerufen (z.B. beim Server-Stopp).@EventHandler
: Annotation, die anzeigt, dass die folgende Methode ein Event-Handler ist.public void onAdvancementGrant(PlayerAdvancementCriterionGrantEvent event)
: Die Methode, die aufgerufen wird, wenn dasPlayerAdvancementCriterionGrantEvent
eintritt. Dasevent
-Objekt enthält alle Informationen über das gerade ausgelöste Advancement.event.setCancelled(true);
: Dies ist die entscheidende Zeile! Indem wir das Event abbrechen, verhindern wir, dass Paper die Standardverarbeitung durchführt, was in diesem Fall das Senden der Advancement-Benachrichtigung an den Spieler ist.
Fortgeschrittene Techniken: Dein Advancement-Killer nach Maß
Mit dem obigen Beispiel hast du eine solide Basis. Aber die Paper API erlaubt noch viel mehr. Hier sind einige Ideen für erweiterte Funktionalität:
Selektives Blockieren von Advancements
Was, wenn du nur *bestimmte* Advancements blockieren möchtest? Du kannst die ID des Advancements überprüfen:
public void onAdvancementGrant(PlayerAdvancementCriterionGrantEvent event) {
String advancementId = event.getAdvancement().getKey().getKey(); // Z.B. "minecraft:adventure/kill_a_mob"
// Eine Liste von Advancements, die du blockieren möchtest
if (advancementId.equals("minecraft:story/mine_stone") || advancementId.contains("end")) {
event.setCancelled(true);
// getLogger().info("Selektives Advancement '" + advancementId + "' blockiert für " + event.getPlayer().getName());
}
}
Die IDs der Advancements findest du oft in den Minecraft-Wiki oder indem du sie durch Logging auf der Konsole ausgibst.
Rollenbasierte Kontrolle mit Permissions
Du könntest bestimmten Spielern erlauben, Advancements zu sehen, während andere sie nicht sehen. Dies lässt sich über Permissions managen:
public void onAdvancementGrant(PlayerAdvancementCriterionGrantEvent event) {
// Wenn der Spieler die Permission 'yourplugin.seeadvancements' hat, zeige das Advancement an.
if (!event.getPlayer().hasPermission("yourplugin.seeadvancements")) {
event.setCancelled(true);
}
}
Spieler mit der Permission yourplugin.seeadvancements
würden die Benachrichtigungen erhalten, alle anderen nicht. Dies erfordert ein Permissions-Plugin wie LuckPerms auf deinem Server.
Benutzerdefinierte Nachrichten oder Effekte
Anstatt nur zu blockieren, könntest du dem Spieler eine alternative Nachricht senden oder einen kleinen Effekt auslösen:
public void onAdvancementGrant(PlayerAdvancementCriterionGrantEvent event) {
event.setCancelled(true); // Trotzdem blockieren
event.getPlayer().sendMessage("§aGlückwunsch! Du hast eigentlich ein Advancement freigeschaltet, aber wir halten das geheim. ;)");
// event.getPlayer().playSound(event.getPlayer().getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1, 1);
}
Performance-Aspekte und Best Practices
Die Verwendung von Events ist in der Regel sehr effizient. Das Abbrechen eines Events wie PlayerAdvancementCriterionGrantEvent
hat minimale Performance-Auswirkungen, da es die Verarbeitung eines Pakets lediglich stoppt, anstatt sie komplex zu manipulieren. Achte jedoch immer darauf, in deinen Event-Handlern keine rechenintensiven Operationen durchzuführen, insbesondere in Events, die häufig ausgelöst werden. Für Advancement Packets ist dies in der Regel kein Problem, da diese nicht in extrem hoher Frequenz auftreten.
Schritt-für-Schritt-Anleitung zur Implementierung deines Plugins
- Code schreiben: Schreibe den Java-Code für dein Plugin wie oben beschrieben.
- Kompilieren (Build): Erstelle eine JAR-Datei deines Plugins. In IntelliJ IDEA oder Eclipse geht das meist über „Build” -> „Build Artifacts” oder eine Export-Funktion. Stelle sicher, dass das
plugin.yml
korrekt im JAR enthalten ist. - Plugin bereitstellen: Kopiere die generierte JAR-Datei in den
plugins
-Ordner deines Minecraft Servers. - Server neu starten: Starte deinen PaperMC-Server neu. Dein Plugin sollte beim Start geladen werden und seine
onEnable()
-Methode ausführen. Überprüfe die Serverkonsole auf die „AdvancementBlockerPlugin wurde aktiviert!”-Nachricht. - Testen: Spiele auf dem Server und überprüfe, ob die Advancement-Benachrichtigungen wie erwartet blockiert oder angepasst werden.
Fazit: Mehr Kontrolle, weniger Chaos auf deinem Minecraft Server
Die Möglichkeit, Advancement Packets zu kontrollieren, ist ein kleines, aber feines Detail, das die Qualität deines Minecraft Servers erheblich verbessern kann. Egal, ob du dich für die einfache Methode über die paper.yml
entscheidest oder ein eigenes, maßgeschneidertes Plugin entwickelst: Die Paper API bietet dir die notwendigen Werkzeuge, um das Spielerlebnis auf deinem Server zu optimieren.
Indem du die Flut an unnötigen Benachrichtigungen eindämmst, schaffst du eine sauberere und fokussiertere Umgebung für deine Spieler. Das führt zu weniger Ablenkung, einem aufgeräumteren Chat und potenziell einem reibungsloseren Spielerlebnis, besonders in intensiven Spielsituationen. Nimm die Zügel in die Hand und gestalte deinen Minecraft Server genau so, wie du ihn haben möchtest – effizient, aufgeräumt und ohne nervige Unterbrechungen.
Die Paper API ist ein mächtiges Werkzeug in den Händen jedes Minecraft Server-Betreibers und -Entwicklers. Nutze sie, um nicht nur Advancements zu steuern, sondern auch um weitere Aspekte deines Servers zu optimieren und ein einzigartiges Spielerlebnis zu schaffen.