Corpse
Vue d'ensemble
Quand un joueur meurt, Corpse prend en charge ses drops : tout l'inventaire (barre d'accès rapide, armure, seconde main) et l'expérience sont déplacés dans un cadavre placé là où il est tombé. Les drops vanilla sont supprimés. Le cadavre reste jusqu'à ce que quelqu'un le pille ou qu'il expire, et il survit à un redémarrage.
Le cadavre est une entité par paquets, affichée séparément pour chaque joueur proche. Ce peut être un simple modèle de joueur dans la pose de mort portant le skin et l'armure de la victime, ou n'importe quel modèle d'un backend pris en charge. Deux entrées manifest pilotent l'ensemble : Corpse Global Settings pour les règles à l'échelle du serveur et Corpse Model Definition pour l'apparence du cadavre.
Fonctionnalités
- Capture complète du butin — inventaire, armure, seconde main et expérience vont dans le cadavre ; les drops et l'expérience vanilla sont supprimés.
- Trois modes de pillage — un menu de pillage paginé, un transfert direct dans l'inventaire du pilleur, ou tout lâcher au sol.
- Protection du butin — pillage réservé au propriétaire, ou fenêtre de protection au-delà de laquelle tout le monde peut piller.
- Expiration — les cadavres disparaissent après une durée configurable, ou jamais.
- Persistance — les cadavres survivent aux redémarrages, dans MySQL lorsqu'il est disponible, sinon dans un fichier local.
- Plusieurs apparences — les définitions sont choisies par monde et par priorité ; modèles issus de EntityExtension, ModelEngine, BetterModel, BTC Mob NPC ou MythicMobs NPC.
- Repli sur un joueur simple — skin, armure, lueur et une pose (allongé, tombé, mourant ou debout) lorsqu'aucun modèle n'est défini.
- Hooks de quêtes — événements à l'apparition, au pillage et à l'expiration, facts, un objectif de récupération et un waypoint indiquant le chemin du retour.
- Filtre de mondes — ne laisser de cadavres que dans certains mondes (par exemple les donjons) avec
allowedWorldsetexcludedWorlds. - Chaque texte est configurable — messages, libellés et matériaux du menu, format du waypoint et ses flèches, réponses des commandes : ce sont tous des champs.
- Commande du staff — liste et suppression des cadavres de tout le serveur.
- Compatible Folia — les modifications du monde s'exécutent sur la région qui possède le cadavre.
Installation
- Installez les extensions TypeWriter Basic, Quest et Entity depuis l'onglet Extensions du panel web (voir la documentation TypeWriter).
- Installez l'extension GUI : le menu de pillage est construit dessus.
- Facultatif : installez le backend de modèles de votre choix pour l'apparence du cadavre (ModelEngine, BetterModel, MythicMobs NPC ou BTC Mob NPC).
- Facultatif : installez l'extension MySQL pour stocker les cadavres dans une base de données. Sans elle, les cadavres sont enregistrés dans
plugins/Typewriter/corpse/corpses.json. - Placez le JAR de Corpse dans
plugins/Typewriter/extensions/et redémarrez le serveur.
Au démarrage, la console journalise les backends de modèles trouvés. Si aucun n'est trouvé, les cadavres conservent tout de même le butin et s'affichent comme un joueur simple.
Premiers pas
Configurez des cadavres qui durent cinq minutes, sont protégés pour leur propriétaire pendant une minute et indiquent le chemin du retour :
- Dans le panel web TypeWriter, ouvrez une page manifest et ajoutez une entrée Corpse Global Settings. Sans elle, les valeurs par défaut intégrées s'appliquent (300 secondes, menu de pillage, tout le monde peut piller).
- Définissez
durationsur300, désactivezonlyOwnerCanLootet définissezownerProtectionSecondssur60. - Choisissez
lootMode:GUIouvre le menu de pillage au clic droit,DIRECTdéplace tout dans l'inventaire du pilleur,DROPle lâche au sol. S'accroupir en cliquant utilise un autre mode (sneakSwapsLootMode). - Ajoutez une Corpse Model Definition. Laissez
definitionRefvide pour le modèle de joueur simple, ou choisissez une définition d'entité pour un modèle. Définissezpose,rotationModeet la hitboxinteraction*si nécessaire. - Ajoutez une entrée d'audience Corpse Waypoint pour afficher la distance et une flèche vers le cadavre dans l'action bar. Elle disparaît une fois le cadavre parti.
- Pour faire de la récupération une étape de quête, ajoutez un Corpse Recovery Objective relié à une quête.
- Publiez, mourez une fois dans un monde de test, puis faites un clic droit sur le cadavre.
Corpse ne prend que ce que la mort aurait lâché. Avec la gamerule keepInventory activée, le joueur garde ses objets et aucun cadavre n'est créé : la mort est vanilla. Les objets que d'autres plugins gardent pour le joueur (Malédiction de disparition, objets soulbound) ne sont pas dupliqués dans le cadavre.
Restreindre à certains mondes
Par défaut, tous les mondes laissent un cadavre. Deux listes de Corpse Global Settings choisissent où :
allowedWorlds: les mondes où une mort laisse un cadavre. Vide = tous les mondes.excludedWorlds: les mondes où une mort ne laisse jamais de cadavre. Elle l'emporte toujours surallowedWorlds.
Pour n'avoir des cadavres que dans les donjons, et nulle part ailleurs :
allowedWorlds:
- dungeon_*
Règles communes aux deux listes :
- Une entrée par monde.
*remplace n'importe quelle suite de caractères et?exactement un :dungeon_*couvre tous les mondes qu'un donjon génère pour une partie,dgbuilddésigne un monde précis. - Chaque entrée est comparée, sans tenir compte de la casse, au nom du monde (celui de son dossier) et à sa clé de dimension, par exemple
minecraft:the_nether. - Hors des mondes autorisés (ou dans un monde exclu), la mort est vanilla : drops et expérience normaux, pas de cadavre.
- Cela décide seulement si un cadavre existe. L'apparence reste choisie par la liste
worldsde la Corpse Model Definition, qui accepte les mêmes entrées.
Ce que voit le joueur dans un monde refusé. filteredWorldDeath le choisit. Sans effet quand les deux listes sont vides.
VANILLA_DEATH_SCREEN(défaut) : une mort Minecraft ordinaire. Le corps couché au sol et l'écran de mort sont dessinés par le client Minecraft, pas par Corpse, et Corpse ne peut pas les retirer.INSTANT_RESPAWN: le joueur réapparaît au tick suivant, sans écran de mort. Les objets et l'expérience tombent au sol comme en vanilla, dans les deux cas.
Pour des cadavres seulement dans les donjons, et un respawn instantané partout ailleurs :
allowedWorlds:
- dungeon_*
filteredWorldDeath: INSTANT_RESPAWN
Une mort ne laisse pas de cadavre, et reste vanilla, quand :
- le monde n'est pas autorisé ou est exclu ;
keepInventoryest activée ;- un autre plugin a annulé la mort (totem ou plugin de réanimation) : le joueur n'est pas mort ;
- il n'y a rien à reprendre : ni objet ni expérience.
Fonctionnement
La définition utilisée est choisie à la mort : parmi les entrées Corpse Model Definition dont la liste worlds contient le monde de la mort (une liste vide signifie tous les mondes), celle qui a la priority la plus élevée l'emporte. Sans aucune définition, une définition par défaut est utilisée. Sa durée de vie provient de overrideDuration lorsqu'elle est supérieure à 0, sinon du duration global. La règle de protection du propriétaire est figée à la création du cadavre.
Seul un clic droit sur le cadavre le pille. Le pillage vide le cadavre, et celui-ci est retiré. Un cadavre que personne ne pille expire et ses objets sont perdus.
Menus
En mode de pillage GUI, un clic droit sur le cadavre ouvre un menu de 54 emplacements construit avec l'extension GUI.
- Les cinq premières lignes (45 emplacements) contiennent les objets du cadavre. Cliquez sur un objet pour le prendre dans votre inventaire (un objet qui ne rentre pas est lâché à vos pieds) ; le cadavre est enregistré après chaque objet pris. Prendre le dernier objet vide le cadavre, ce qui donne l'expérience et déclenche
on_corpse_loot. - La dernière ligne contient les boutons : page précédente (à gauche), page suivante, un bouton qui prend tout, et fermer (à droite). Les boutons de pagination n'apparaissent que lorsqu'il y a plusieurs pages.
- Le coffre « tout prendre » indique dans son lore l'expérience détenue par le cadavre (et la page courante), et remet tout, expérience comprise, au pilleur.
- Le titre et chaque libellé peuvent être modifiés dans Corpse Global Settings (
guiTitle,guiLootAllLabel,guiCloseLabel,guiPreviousPageLabel,guiNextPageLabel,guiExperienceLabel,guiPageLabel).
Si l'inventaire du pilleur est plein en mode DIRECT, le surplus est lâché au niveau du cadavre et inventoryFullMessage s'affiche. Les objets lâchés peuvent être réservés au pilleur (reserveDroppedItems, reserveDroppedItemsSeconds).
Configuration
Les cadavres sont stockés en dehors du panel web :
| Stockage | Quand | Emplacement |
|---|---|---|
| MySQL | l'extension MySQL fournit une source de données | table corpse_corpses, créée automatiquement |
| Fichier local | pas de source de données, ou l'initialisation de MySQL a échoué | plugins/Typewriter/corpse/corpses.json |
Les cadavres dont l'heure d'expiration est passée pendant que le serveur était éteint sont supprimés au démarrage, sans déclencher on_corpse_expire. Après un redémarrage, un cadavre est affiché avec le nom et les paramètres qui sont des valeurs constantes : les noms et options pilotés par des placeholders retombent sur leurs valeurs par défaut. Un cadavre restauré garde sa pose, sa lueur, son nom et son animation, mais pas la peau ni l'armure du propriétaire : il affiche le modèle simple. Un fichier de stockage illisible est mis de côté (.unreadable-<time>) au lieu d'être écrasé.
Commandes
La commande est une entrée Corpse Admin Command que vous créez dans le panel web. Son nom et sa permission sont des champs de l'entrée ; les valeurs par défaut figurent ci-dessous.
| Commande | Description |
|---|---|
/corpses list | Liste chaque cadavre du serveur, quel que soit son monde, avec son propriétaire, sa position, son monde, son nombre d'objets et son expérience. |
/corpses clear | Supprime tous les cadavres du serveur, pas seulement ceux de votre monde. Ne déclenche pas on_corpse_expire. |
Les deux commandes sont globales au serveur, pas par monde. Leurs réponses et l'en-tête de la liste sont des champs modifiables de l'entrée.
Permissions
| Permission | Autorise |
|---|---|
typewriter.corpse.admin | /corpses list et /corpses clear (valeur par défaut du champ permission de l'entrée). |
Entrées
11 entrées, générées depuis la source de l'extension.
Événements3
- On Corpse ExpireWhen a corpse expires unlooted
- On Corpse LootWhen a corpse is looted
- On Corpse SpawnWhen a corpse spawns
Objectifs1
- Corpse Recovery ObjectiveRecover your corpse
Faits2
- Corpse CountHow many corpses the player has
- Has CorpseWhether the player has a corpse waiting
Audiences2
- Corpse Owner AudiencePlayers who have a corpse waiting
- Corpse WaypointPoints players back to their corpse
Commandes1
- Corpse Admin CommandAdmin command for corpses
Manifestes2
- Corpse DefinitionCorpse Model Definition
- Corpse SettingsCorpse Global Settings
Dépannage
Rien ne se passe quand je fais un clic droit sur le cadavre. Le cadavre est cliquable grâce à une hitbox invisible de interactionWidth sur interactionHeight blocs, soit 1.0 par défaut. Agrandissez-la pour un gros modèle. Activez debugInteractions dans Corpse Global Settings pour journaliser chaque clic dans la console, puis désactivez-le. Vérifiez aussi onlyOwnerCanLoot et ownerProtectionSeconds : les autres joueurs reçoivent le cannotLootMessage.
Le cadavre est un joueur simple, pas mon modèle. definitionRef est vide ou n'a pas pu être résolu (la console affiche Failed to resolve entity definition). Assurez-vous que l'extension du backend est installée : le journal de démarrage liste les backends détectés.
Le menu de pillage ne s'ouvre pas. Le menu nécessite l'extension GUI. Vérifiez aussi lootMode, et que vous n'êtes pas accroupi : avec sneakSwapsLootMode activé, s'accroupir utilise l'autre mode.
Il n'y a pas de cadavre après une mort. Vérifiez dans l'ordre : le monde est autorisé par allowedWorlds et absent de excludedWorlds (comparaison avec le nom du dossier et avec la clé de dimension) ; la gamerule keepInventory est désactivée dans ce monde ; aucun autre plugin n'a annulé la mort ; le joueur avait au moins un objet ou de l'expérience.
Cliquer de loin ne fait rien. Un clic ne compte qu'à moins de interactionReach blocs du cadavre (6 par défaut, 0 = pas de limite). Les clics répétés dans interactionCooldownMillis sont ignorés comme un seul geste.
Le cadavre a disparu après un redémarrage. Cherchez Restored n corpse(s) from storage dans la console. Si le cadavre a expiré pendant que le serveur était éteint, il est supprimé. Lorsque l'initialisation de MySQL échoue, Corpse se replie sur le fichier local avec un avertissement dans le journal.
Les placeholders dans le nom ne fonctionnent pas. Utilisez {player} pour le nom du propriétaire dans displayName. Dans respawnMessage, utilisez <x>, <y>, <z> et <world> ; dans guiTitle, <player>. Les placeholders des autres textes sont remplis avant MiniMessage, et le nom d'un joueur est échappé pour ne jamais devenir une balise cliquable.
Extensions associées
- GUI — fournit le menu de pillage.
- BetterModel et MythicMobs NPC — backends de modèles pour le cadavre.
- MySQL — stockage des cadavres en base de données.