Corpse
Descripción general
Cuando un jugador muere, Corpse se encarga de sus drops: todo el inventario (barra rápida, armadura, mano secundaria) y la experiencia pasan a un cadáver que queda donde cayó. Los drops de vanilla se eliminan. El cadáver permanece hasta que alguien lo saquea o caduca, y sobrevive a un reinicio.
El cadáver es una entidad de paquetes, renderizada por separado para cada jugador cercano. Puede ser un modelo de jugador normal en pose de muerte con la skin y la armadura de la víctima, o cualquier modelo de un backend compatible. Dos entradas del manifest controlan todo: Corpse Global Settings para las reglas de todo el servidor y Corpse Model Definition para el aspecto del cadáver.
Características
- Captura completa del botín — inventario, armadura, mano secundaria y experiencia pasan al cadáver; los drops y la experiencia de vanilla se eliminan.
- Tres modos de saqueo — un menú de botín paginado, transferencia directa al inventario de quien saquea o soltar todo en el suelo.
- Protección del botín — saqueo solo para el dueño, o una ventana de protección tras la cual cualquiera puede saquear.
- Caducidad — los cadáveres desaparecen tras un tiempo configurable, o nunca.
- Persistencia — los cadáveres sobreviven a los reinicios, en MySQL cuando está disponible y, si no, en un archivo local.
- Varios aspectos — las definiciones se eligen por mundo y prioridad; modelos de EntityExtension, ModelEngine, BetterModel, BTC Mob NPC o MythicMobs NPC.
- Jugador normal como alternativa — skin, armadura, brillo y una pose (tumbado, caído, moribundo o de pie) cuando no hay modelo definido.
- Enlaces con misiones — eventos al aparecer, al saquear y al caducar, facts, un objetivo de recuperación y un waypoint que indica el camino de vuelta.
- Filtro de mundos — deja cadáveres solo en algunos mundos (por ejemplo, las mazmorras) con
allowedWorldsyexcludedWorlds. - Todos los textos son configurables — mensajes, etiquetas y materiales del menú, el formato del waypoint con sus flechas y las respuestas de los comandos son campos.
- Comando para el staff — lista y elimina los cadáveres de todo el servidor.
- Compatible con Folia — los cambios en el mundo se ejecutan en la región propietaria del cadáver.
Instalación
- Instala las extensiones de TypeWriter Basic, Quest y Entity desde la pestaña Extensions del panel web (consulta la documentación de TypeWriter).
- Instala la extensión GUI: el menú de botín está construido sobre ella.
- Opcional: instala el backend de modelos que quieras para el aspecto del cadáver (ModelEngine, BetterModel, MythicMobs NPC o BTC Mob NPC).
- Opcional: instala la extensión MySQL para guardar los cadáveres en una base de datos. Sin ella, los cadáveres se guardan en
plugins/Typewriter/corpse/corpses.json. - Coloca el JAR de Corpse en
plugins/Typewriter/extensions/y reinicia el servidor.
Al iniciar, la consola registra qué backends de modelos se encontraron. Si no se encuentra ninguno, los cadáveres siguen guardando el botín y se muestran como un jugador normal.
Primeros pasos
Configura cadáveres que duren cinco minutos, estén protegidos para su dueño durante un minuto y muestren el camino de vuelta:
- En el panel web de TypeWriter, abre una página de manifest y añade una entrada Corpse Global Settings. Sin ella se aplican los valores por defecto integrados (300 segundos, menú de botín, cualquiera puede saquear).
- Establece
durationen300,onlyOwnerCanLootdesactivado yownerProtectionSecondsen60. - Elige
lootMode:GUIabre el menú de botín con clic derecho,DIRECTmueve todo al inventario de quien saquea yDROPlo suelta en el suelo. Hacer clic agachado usa otro modo (sneakSwapsLootMode). - Añade una Corpse Model Definition. Deja
definitionRefvacío para el modelo de jugador normal, o elige una definición de entidad para un modelo. Establecepose,rotationModey la caja de colisióninteraction*si hace falta. - Añade una entrada de audiencia Corpse Waypoint para mostrar en la action bar la distancia y una flecha hacia el cadáver. Desaparece cuando el cadáver ya no existe.
- Para convertir la recuperación en un paso de misión, añade un Corpse Recovery Objective enlazado a una misión.
- Publica, muere una vez en un mundo de pruebas y haz clic derecho en el cadáver.
Corpse solo toma lo que la muerte habría soltado. Con la regla de juego keepInventory activada, el jugador conserva sus objetos y no se crea ningún cadáver: la muerte es vanilla. Los objetos que otros plugins conservan para el jugador (Maldición de desaparición, objetos soulbound) no se duplican en el cadáver.
Restringir a algunos mundos
Por defecto, todos los mundos dejan un cadáver. Dos listas de Corpse Global Settings eligen dónde:
allowedWorlds: los mundos donde una muerte deja un cadáver. Vacía significa todos los mundos.excludedWorlds: los mundos donde una muerte nunca deja un cadáver. Siempre gana aallowedWorlds.
Para tener cadáveres solo en las mazmorras y en ningún otro sitio:
allowedWorlds:
- dungeon_*
Reglas de ambas listas:
- Una entrada por mundo.
*equivale a cualquier serie de caracteres y?a exactamente uno:dungeon_*cubre todos los mundos que una mazmorra genera para una partida, ydgbuildes un mundo concreto. - Cada entrada se compara, sin distinguir mayúsculas, con el nombre del mundo (el de su carpeta) y con su clave de dimensión, por ejemplo
minecraft:the_nether. - Fuera de los mundos permitidos (o en uno excluido) la muerte es vanilla: drops y experiencia normales, sin cadáver.
- Esto solo decide si existe un cadáver. El aspecto lo sigue eligiendo la lista
worldsde la Corpse Model Definition, que acepta las mismas entradas.
Lo que ve el jugador en un mundo rechazado. filteredWorldDeath lo elige. No tiene efecto cuando ambas listas están vacías.
VANILLA_DEATH_SCREEN(por defecto): una muerte normal de Minecraft. El cuerpo tendido en el suelo y la pantalla de muerte los dibuja el cliente de Minecraft, no Corpse, y Corpse no puede quitarlos.INSTANT_RESPAWN: el jugador reaparece en el tick siguiente, sin pantalla de muerte. Los objetos y la experiencia caen al suelo como en vanilla, en ambos casos.
Para cadáveres solo en las mazmorras y reaparición instantánea en el resto:
allowedWorlds:
- dungeon_*
filteredWorldDeath: INSTANT_RESPAWN
Una muerte no deja cadáver, y sigue siendo vanilla, cuando:
- el mundo no está permitido o está excluido;
keepInventoryestá activado;- otro plugin canceló la muerte (un tótem o un plugin de resurrección): el jugador no está muerto;
- no hay nada que tomar: ni objetos ni experiencia.
Cómo funciona
La definición que se usa se decide en el momento de la muerte: entre las entradas Corpse Model Definition cuya lista worlds contiene el mundo de la muerte (una lista vacía significa todos los mundos), gana la de mayor priority. Sin ninguna definición, se usa una por defecto. Su duración sale de overrideDuration cuando es mayor que 0 y, si no, del duration global. La regla de protección del dueño queda fijada al crear el cadáver.
Solo un clic derecho sobre el cadáver lo saquea. Saquearlo lo vacía y el cadáver se elimina. Un cadáver que nadie saquea caduca y sus objetos se pierden.
Menús
En el modo de saqueo GUI, hacer clic derecho en el cadáver abre un menú de 54 ranuras construido con la extensión GUI.
- Las cinco primeras filas (45 ranuras) contienen los objetos del cadáver. Haz clic en un objeto para llevarlo a tu inventario (un objeto que no cabe se suelta a tus pies); el cadáver se guarda tras cada objeto tomado. Al tomar el último objeto, el cadáver queda vacío, entrega la experiencia y activa
on_corpse_loot. - La fila inferior contiene los botones: página anterior (izquierda), página siguiente, un botón que lo toma todo y cerrar (derecha). Los botones de paginación solo aparecen cuando hay varias páginas.
- El cofre de tomar todo muestra en su lore la experiencia que guarda el cadáver (y la página actual), y entrega todo, experiencia incluida, a quien saquea.
- El título y todas las etiquetas se pueden cambiar en Corpse Global Settings (
guiTitle,guiLootAllLabel,guiCloseLabel,guiPreviousPageLabel,guiNextPageLabel,guiExperienceLabel,guiPageLabel).
Si el inventario de quien saquea está lleno en el modo DIRECT, el excedente se suelta junto al cadáver y se muestra inventoryFullMessage. Los objetos soltados pueden reservarse para quien saquea (reserveDroppedItems, reserveDroppedItemsSeconds).
Configuración
Los cadáveres se almacenan fuera del panel web:
| Almacenamiento | Cuándo | Ubicación |
|---|---|---|
| MySQL | la extensión MySQL proporciona un origen de datos | tabla corpse_corpses, creada automáticamente |
| Archivo local | no hay origen de datos, o MySQL no pudo inicializarse | plugins/Typewriter/corpse/corpses.json |
Los cadáveres cuya hora de caducidad pasó mientras el servidor estaba apagado se eliminan al iniciar, sin activar on_corpse_expire. Tras un reinicio, un cadáver se muestra con el nombre y los ajustes que son valores constantes: los nombres y opciones controlados por placeholders vuelven a sus valores por defecto. Un cadáver restaurado conserva su pose, brillo, nombre y animación, pero no la skin ni la armadura del dueño: muestra el modelo sencillo. Un archivo de almacenamiento ilegible se aparta (.unreadable-<time>) en lugar de sobrescribirse.
Comandos
El comando es una entrada Corpse Admin Command que creas en el panel web. Su nombre y su permiso son campos de la entrada; los valores por defecto se indican a continuación.
| Comando | Descripción |
|---|---|
/corpses list | Lista todos los cadáveres del servidor, sea cual sea su mundo, con su dueño, posición, mundo, número de objetos y experiencia. |
/corpses clear | Elimina todos los cadáveres del servidor, no solo los de tu mundo. No dispara on_corpse_expire. |
Ambos comandos son globales al servidor, no por mundo. Sus respuestas y el encabezado de la lista son campos editables de la entrada.
Permisos
| Permiso | Concede |
|---|---|
typewriter.corpse.admin | /corpses list y /corpses clear (valor por defecto del campo permission de la entrada). |
Entradas
11 entradas, generadas a partir del código fuente de la extensión.
Eventos3
- On Corpse ExpireWhen a corpse expires unlooted
- On Corpse LootWhen a corpse is looted
- On Corpse SpawnWhen a corpse spawns
Objetivos1
- Corpse Recovery ObjectiveRecover your corpse
Hechos2
- Corpse CountHow many corpses the player has
- Has CorpseWhether the player has a corpse waiting
Audiencias2
- Corpse Owner AudiencePlayers who have a corpse waiting
- Corpse WaypointPoints players back to their corpse
Comandos1
- Corpse Admin CommandAdmin command for corpses
Manifiestos2
- Corpse DefinitionCorpse Model Definition
- Corpse SettingsCorpse Global Settings
Solución de problemas
No pasa nada al hacer clic derecho en el cadáver. El cadáver es clicable mediante una caja de colisión invisible de interactionWidth por interactionHeight bloques, que es 1.0 por defecto. Hazla más grande para un modelo grande. Activa debugInteractions en Corpse Global Settings para registrar cada clic en la consola y vuelve a desactivarlo después. Comprueba también onlyOwnerCanLoot y ownerProtectionSeconds: los demás jugadores reciben el cannotLootMessage.
El cadáver es un jugador normal, no mi modelo. definitionRef está vacío o no se pudo resolver (la consola muestra Failed to resolve entity definition). Asegúrate de que la extensión del backend está instalada: el registro de inicio lista los backends detectados.
El menú de botín no se abre. El menú necesita la extensión GUI. Comprueba también lootMode y que no estás agachado: con sneakSwapsLootMode activado, agacharse usa el otro modo.
No hay cadáver tras una muerte. Comprueba por este orden: el mundo está permitido por allowedWorlds y no figura en excludedWorlds (compara con el nombre de la carpeta y con la clave de dimensión); la regla keepInventory está desactivada en ese mundo; ningún otro plugin canceló la muerte; el jugador tenía al menos un objeto o algo de experiencia.
Hacer clic desde lejos no hace nada. Un clic solo cuenta a menos de interactionReach bloques del cadáver (6 por defecto, 0 = sin límite). Los clics repetidos dentro de interactionCooldownMillis se ignoran como un solo gesto.
El cadáver ha desaparecido tras un reinicio. Busca en la consola Restored n corpse(s) from storage. Si el cadáver caducó mientras el servidor estaba apagado, se elimina. Cuando falla la inicialización de MySQL, Corpse recurre al archivo local con una advertencia en el registro.
Los placeholders del nombre no funcionan. Usa {player} para el nombre del dueño en displayName. En respawnMessage, usa <x>, <y>, <z> y <world>; en guiTitle, <player>. Los placeholders de los demás textos se rellenan antes de MiniMessage, y el nombre de un jugador se escapa para que nunca se convierta en una etiqueta en la que se pueda hacer clic.
Extensiones relacionadas
- GUI — proporciona el menú de botín.
- BetterModel y MythicMobs NPC — backends de modelos para el cadáver.
- MySQL — almacenamiento de cadáveres en base de datos.