Saltar al contenido principal

Corpse

Cadáveres de jugadores que conservan inventario y XP, con menú de botín, protección, caducidad y backends de modelos.

Gratuitasv0.7Entidades y modelos
RequiereTypeWriter0.9Basic extensionEntity extensionQuest extensionGUIMySQLopcionalModelEngineopcionalBetterModelopcionalMythicMobs NPCopcionalBTC Mob NPCopcional

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 allowedWorlds y excludedWorlds.
  • 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​

  1. Instala las extensiones de TypeWriter Basic, Quest y Entity desde la pestaña Extensions del panel web (consulta la documentación de TypeWriter).
  2. Instala la extensión GUI: el menú de botín está construido sobre ella.
  3. Opcional: instala el backend de modelos que quieras para el aspecto del cadáver (ModelEngine, BetterModel, MythicMobs NPC o BTC Mob NPC).
  4. 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.
  5. 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:

  1. 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).
  2. Establece duration en 300, onlyOwnerCanLoot desactivado y ownerProtectionSeconds en 60.
  3. Elige lootMode: GUI abre el menú de botín con clic derecho, DIRECT mueve todo al inventario de quien saquea y DROP lo suelta en el suelo. Hacer clic agachado usa otro modo (sneakSwapsLootMode).
  4. Añade una Corpse Model Definition. Deja definitionRef vacío para el modelo de jugador normal, o elige una definición de entidad para un modelo. Establece pose, rotationMode y la caja de colisión interaction* si hace falta.
  5. 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.
  6. Para convertir la recuperación en un paso de misión, añade un Corpse Recovery Objective enlazado a una misión.
  7. Publica, muere una vez en un mundo de pruebas y haz clic derecho en el cadáver.
nota

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 a allowedWorlds.

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, y dgbuild es 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 worlds de 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;
  • keepInventory está 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:

AlmacenamientoCuándoUbicación
MySQLla extensión MySQL proporciona un origen de datostabla corpse_corpses, creada automáticamente
Archivo localno hay origen de datos, o MySQL no pudo inicializarseplugins/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.

ComandoDescripción
/corpses listLista 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 clearElimina 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​

PermisoConcede
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
Objetivos1
Hechos2
Audiencias2
Comandos1
Manifiestos2

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.