Zum Hauptinhalt springen

Corpse

Spielerleichen mit Inventar und XP, mit Beutemenü, Schutz, Ablaufzeit und Modell-Backends.

Kostenlosv0.7Entitäten & Modelle
BenötigtTypeWriter0.9Basic extensionEntity extensionQuest extensionGUIMySQLoptionalModelEngineoptionalBetterModeloptionalMythicMobs NPCoptionalBTC Mob NPCoptional

Überblick​

Stirbt ein Spieler, übernimmt Corpse seine Drops: das gesamte Inventar (Hotbar, Rüstung, Zweithand) und die Erfahrung werden in eine Leiche verschoben, die dort liegt, wo er gefallen ist. Die Vanilla-Drops werden entfernt. Die Leiche bleibt bestehen, bis jemand sie plündert oder sie abläuft, und überlebt einen Neustart.

Die Leiche ist eine Packet-Entity, die für jeden Spieler in der Nähe separat dargestellt wird. Sie kann ein einfaches Spielermodell in Sterbepose sein, das Skin und Rüstung des Opfers trägt, oder ein beliebiges Modell eines unterstützten Backends. Zwei Manifest-Entries steuern alles: Corpse Global Settings für serverweite Regeln und Corpse Model Definition für das Aussehen der Leiche.

Funktionen​

  • Vollständige Loot-Erfassung — Inventar, Rüstung, Zweithand und Erfahrung gehen in die Leiche; Vanilla-Drops und -Erfahrung werden entfernt.
  • Drei Loot-Modi — ein Loot-Menü mit Seiten, direkte Übertragung ins Inventar des Plünderers oder alles auf den Boden fallen lassen.
  • Loot-Schutz — Plündern nur durch den Besitzer oder ein Schutzfenster, nach dem jeder plündern darf.
  • Ablaufzeit — Leichen verschwinden nach einer konfigurierbaren Zeit oder nie.
  • Persistenz — Leichen überleben Neustarts, in MySQL, wenn verfügbar, andernfalls in einer lokalen Datei.
  • Mehrere Erscheinungsbilder — Definitionen werden nach Welt und Priorität gewählt; Modelle aus EntityExtension, ModelEngine, BetterModel, BTC Mob NPC oder MythicMobs NPC.
  • Einfacher Spieler als Fallback — Skin, Rüstung, Leuchten und eine Pose (liegend, gefallen, sterbend oder stehend), wenn kein Modell gesetzt ist.
  • Quest-Anbindung — Events bei Entstehung, Plündern und Ablauf, Facts, ein Bergungsziel und ein Waypoint, der den Weg zurück zeigt.
  • Welt-Filter — Leichen nur in bestimmten Welten hinterlassen (zum Beispiel in den Dungeons), mit allowedWorlds und excludedWorlds.
  • Jeder Text ist konfigurierbar — Nachrichten, Menübeschriftungen und -materialien, das Wegpunkt-Format mit seinen Pfeilen und die Befehlsantworten sind Felder.
  • Staff-Befehl — Leichen des gesamten Servers auflisten und entfernen.
  • Folia-tauglich — Weltänderungen laufen in der Region, der die Leiche gehört.

Installation​

  1. Installiere die TypeWriter-Erweiterungen Basic, Quest und Entity über den Tab Extensions des Web-Panels (siehe die TypeWriter-Dokumentation).
  2. Installiere die GUI-Erweiterung: Das Loot-Menü baut darauf auf.
  3. Optional: Installiere das Modell-Backend deiner Wahl für das Aussehen der Leiche (ModelEngine, BetterModel, MythicMobs NPC oder BTC Mob NPC).
  4. Optional: Installiere die MySQL-Erweiterung, um Leichen in einer Datenbank zu speichern. Ohne sie werden Leichen in plugins/Typewriter/corpse/corpses.json gespeichert.
  5. Lege die Corpse-JAR in plugins/Typewriter/extensions/ ab und starte den Server neu.

Beim Start protokolliert die Konsole, welche Modell-Backends gefunden wurden. Wird keines gefunden, enthalten Leichen weiterhin Loot und werden als einfacher Spieler dargestellt.

Erste Schritte​

So richtest du Leichen ein, die fünf Minuten bestehen, eine Minute lang für den Besitzer geschützt sind und einen Weg zurück anzeigen:

  1. Öffne im TypeWriter-Web-Panel eine Manifest-Seite und füge einen Corpse Global Settings-Entry hinzu. Ohne ihn gelten die eingebauten Standardwerte (300 Sekunden, Loot-Menü, jeder darf plündern).
  2. Setze duration auf 300, onlyOwnerCanLoot auf aus und ownerProtectionSeconds auf 60.
  3. Wähle lootMode: GUI öffnet das Loot-Menü per Rechtsklick, DIRECT verschiebt alles ins Inventar des Plünderers, DROP lässt alles auf den Boden fallen. Wer beim Klicken schleicht, verwendet einen anderen Modus (sneakSwapsLootMode).
  4. Füge eine Corpse Model Definition hinzu. Lass definitionRef leer für das einfache Spielermodell oder wähle eine Entity-Definition für ein Modell. Setze bei Bedarf pose, rotationMode und die Hitbox interaction*.
  5. Füge einen Corpse Waypoint-Audience-Entry hinzu, um Entfernung und einen Pfeil zur Leiche in der Actionbar anzuzeigen. Er verschwindet, sobald die Leiche weg ist.
  6. Um die Bergung zu einem Quest-Schritt zu machen, füge ein Corpse Recovery Objective hinzu und verknüpfe es mit einer Quest.
  7. Veröffentliche (Publish), stirb einmal in einer Testwelt und klicke die Leiche mit Rechtsklick an.
hinweis

Corpse übernimmt nur, was der Tod fallen gelassen hätte. Ist die Spielregel keepInventory aktiv, behält der Spieler seine Items und es entsteht keine Leiche: Der Tod bleibt Vanilla. Items, die andere Plugins für den Spieler behalten (Fluch des Verschwindens, Soulbound-Items), werden nicht in die Leiche dupliziert.

Auf bestimmte Welten beschränken​

Standardmäßig hinterlässt jede Welt eine Leiche. Zwei Listen in den Corpse Global Settings legen fest, wo:

  • allowedWorlds: die Welten, in denen ein Tod eine Leiche hinterlässt. Leer bedeutet jede Welt.
  • excludedWorlds: die Welten, in denen ein Tod nie eine Leiche hinterlässt. Sie gewinnt immer gegenüber allowedWorlds.

Für Leichen nur in den Dungeons und sonst nirgends:

allowedWorlds:
- dungeon_*

Regeln für beide Listen:

  • Ein Eintrag pro Welt. * steht für beliebig viele Zeichen und ? für genau eins: dungeon_* deckt jede Welt ab, die ein Dungeon für einen Run erzeugt, dgbuild ist eine einzelne benannte Welt.
  • Jeder Eintrag wird ohne Beachtung der Groß-/Kleinschreibung mit dem Weltnamen (Ordnername) und dem Dimensionsschlüssel verglichen, zum Beispiel minecraft:the_nether.
  • Außerhalb der erlaubten Welten (oder in einer ausgeschlossenen) bleibt der Tod Vanilla: normale Drops und normale Erfahrung, keine Leiche.
  • Das entscheidet nur, ob eine Leiche existiert. Das Aussehen wählt weiterhin die Liste worlds der Corpse Model Definition, die dieselben Einträge akzeptiert.

Was der Spieler in einer abgelehnten Welt sieht. filteredWorldDeath legt es fest. Es hat keine Wirkung, wenn beide Listen leer sind.

  • VANILLA_DEATH_SCREEN (Standard): ein gewöhnlicher Minecraft-Tod. Die am Boden liegende Leiche und der Todesbildschirm werden vom Minecraft-Client gezeichnet, nicht von Corpse, und Corpse kann sie nicht entfernen.
  • INSTANT_RESPAWN: Der Spieler respawnt im nächsten Tick, ohne Todesbildschirm. Items und Erfahrung fallen in beiden Fällen wie in Vanilla auf den Boden.

Für Leichen nur in den Dungeons und sofortigen Respawn überall sonst:

allowedWorlds:
- dungeon_*
filteredWorldDeath: INSTANT_RESPAWN

Ein Tod hinterlässt keine Leiche und bleibt Vanilla, wenn:

  • die Welt nicht erlaubt oder ausgeschlossen ist;
  • keepInventory aktiv ist;
  • ein anderes Plugin den Tod abgebrochen hat (Totem oder Wiederbelebungs-Plugin): Der Spieler ist nicht tot;
  • nichts zu übernehmen ist: weder Item noch Erfahrung.

So funktioniert es​

Welche Definition verwendet wird, wird beim Tod entschieden: Unter den Corpse-Model-Definition-Entries, deren Liste worlds die Welt des Todes enthält (eine leere Liste bedeutet jede Welt), gewinnt der mit der höchsten priority. Ohne jede Definition wird eine Standarddefinition verwendet. Ihre Lebensdauer stammt aus overrideDuration, wenn der Wert über 0 liegt, andernfalls aus der globalen duration. Die Besitzerschutz-Regel wird beim Erstellen der Leiche festgelegt.

Nur ein Rechtsklick auf die Leiche plündert sie. Das Plündern leert die Leiche, und die Leiche wird entfernt. Eine Leiche, die niemand plündert, läuft ab, und ihre Items gehen verloren.

Menüs​

Im Loot-Modus GUI öffnet ein Rechtsklick auf die Leiche ein Menü mit 54 Slots, das mit der GUI-Erweiterung aufgebaut ist.

  • Die ersten fünf Reihen (45 Slots) enthalten die Items der Leiche. Klicke auf ein Item, um es in dein Inventar zu nehmen (passt es nicht hinein, fällt es dir vor die Füße); die Leiche wird nach jedem entnommenen Item gespeichert. Wird das letzte Item entnommen, ist die Leiche leer, die Erfahrung wird ausgezahlt und on_corpse_loot wird ausgelöst.
  • In der unteren Reihe befinden sich die Buttons: vorherige Seite (links), nächste Seite, ein Button, der alles nimmt, und Schließen (rechts). Die Blätter-Buttons erscheinen nur, wenn es mehrere Seiten gibt.
  • Die Truhe „Alles nehmen“ zeigt die in der Leiche gespeicherte Erfahrung (und die aktuelle Seite) in ihrer Lore und übergibt dem Plünderer alles, Erfahrung eingeschlossen.
  • Der Titel und alle Beschriftungen lassen sich in den Corpse Global Settings ändern (guiTitle, guiLootAllLabel, guiCloseLabel, guiPreviousPageLabel, guiNextPageLabel, guiExperienceLabel, guiPageLabel).

Ist das Inventar des Plünderers im Modus DIRECT voll, wird der Überschuss an der Leiche fallen gelassen und inventoryFullMessage angezeigt. Fallen gelassene Items können für den Plünderer reserviert werden (reserveDroppedItems, reserveDroppedItemsSeconds).

Konfiguration​

Leichen werden außerhalb des Web-Panels gespeichert:

SpeicherWannOrt
MySQLdie MySQL-Erweiterung stellt eine Datenquelle bereitTabelle corpse_corpses, wird automatisch angelegt
Lokale Dateikeine Datenquelle oder MySQL konnte nicht initialisiert werdenplugins/Typewriter/corpse/corpses.json

Leichen, deren Ablaufzeit verstrich, während der Server aus war, werden beim Start gelöscht, ohne dass on_corpse_expire ausgelöst wird. Nach einem Neustart wird eine Leiche mit dem Namen und den Einstellungen angezeigt, die konstante Werte sind: Namen und Optionen, die von Platzhaltern abhängen, fallen auf ihre Standardwerte zurück. Eine wiederhergestellte Leiche behält Pose, Leuchten, Namen und Animation, aber nicht Skin und Rüstung des Besitzers: Sie zeigt das einfache Modell. Eine unlesbare Speicherdatei wird beiseitegelegt (.unreadable-<time>), statt überschrieben zu werden.

Befehle​

Der Befehl ist ein Corpse Admin Command-Entry, den du im Web-Panel erstellst. Name und Berechtigung sind Felder des Entrys; die Standardwerte stehen unten.

BefehlBeschreibung
/corpses listListet jede Leiche des Servers, in welcher Welt auch immer, mit Besitzer, Position, Welt, Item-Anzahl und Erfahrung auf.
/corpses clearEntfernt jede Leiche des Servers, nicht nur die deiner Welt. Löst on_corpse_expire nicht aus.

Beide Befehle gelten für den ganzen Server, nicht pro Welt. Ihre Antworten und die Kopfzeile der Liste sind bearbeitbare Felder des Entries.

Berechtigungen​

BerechtigungErlaubt
typewriter.corpse.admin/corpses list und /corpses clear (Standardwert des Felds permission des Entrys).

Entries​

11 Einträge, aus dem Quellcode der Erweiterung generiert.

Ereignisse3
Ziele1
Fakten2
Zielgruppen2
Befehle1
Manifeste2

Fehlerbehebung​

Beim Rechtsklick auf die Leiche passiert nichts. Die Leiche ist über eine unsichtbare Hitbox anklickbar, interactionWidth mal interactionHeight Blöcke, standardmäßig 1.0. Mache sie bei einem großen Modell größer. Aktiviere debugInteractions in den Corpse Global Settings, um jeden Klick in der Konsole zu protokollieren, und schalte es danach wieder aus. Prüfe außerdem onlyOwnerCanLoot und ownerProtectionSeconds: Andere Spieler erhalten die cannotLootMessage.

Die Leiche ist ein einfacher Spieler, nicht mein Modell. definitionRef ist leer oder konnte nicht aufgelöst werden (die Konsole zeigt Failed to resolve entity definition). Stelle sicher, dass die Backend-Erweiterung installiert ist: Das Startprotokoll listet die erkannten Backends auf.

Das Loot-Menü öffnet sich nicht. Das Menü benötigt die GUI-Erweiterung. Prüfe außerdem lootMode und dass du nicht schleichst: Bei aktivem sneakSwapsLootMode wird beim Schleichen der andere Modus verwendet.

Nach einem Tod gibt es keine Leiche. Prüfe der Reihe nach: Die Welt ist durch allowedWorlds erlaubt und nicht in excludedWorlds (Vergleich mit Ordnernamen und Dimensionsschlüssel); die Spielregel keepInventory ist in dieser Welt aus; kein anderes Plugin hat den Tod abgebrochen; der Spieler hatte mindestens ein Item oder etwas Erfahrung.

Ein Klick aus der Ferne bewirkt nichts. Ein Klick zählt nur innerhalb von interactionReach Blöcken um die Leiche (standardmäßig 6, 0 = keine Grenze). Wiederholte Klicks innerhalb von interactionCooldownMillis werden als eine Geste ignoriert.

Die Leiche ist nach einem Neustart weg. Suche in der Konsole nach Restored n corpse(s) from storage. Ist die Leiche abgelaufen, während der Server aus war, wird sie gelöscht. Schlägt die MySQL-Initialisierung fehl, greift Corpse mit einer Warnung im Log auf die lokale Datei zurück.

Platzhalter im Namen funktionieren nicht. Verwende {player} für den Namen des Besitzers in displayName. In respawnMessage verwendest du <x>, <y>, <z> und <world>; in guiTitle <player>. Platzhalter in den übrigen Texten werden vor MiniMessage eingesetzt, und der Name eines Spielers wird maskiert, sodass er nie zu einem klickbaren Tag wird.

Verwandte Erweiterungen​