Registro de cambios
Notas de versión de las extensiones públicas de BTC Studio. Cada versión indica la extensión, su número de versión y lo que ha cambiado para los propietarios de servidores, de la más reciente a la más antigua, con un enlace a la versión y a la documentación de la extensión.
Las extensiones de pago enlazan solo a su documentación; sus descargas permanecen en la tienda. Las extensiones privadas no figuran aquí.
2026-10-16
Dungeon v1.2
Todos los cambios figuran en el registro de cambios de Dungeon. Nada cambia para una mazmorra existente hasta que use uno de los campos nuevos.
- Requiere GUI (OmniGUI) 0.20: la clasificación de Dungeon usa la fuente de clasificación de GUI 0.20 y no se carga con un GUI más antiguo. Actualiza primero GUI.
- Botín compartido: nueva entrada Dungeon Loot Table, usada por los cofres (
lootTableRef) y los mobs (lootTable). Un cofre la tira una vez al abrirse por primera vez, un mob al morir. - Más cofres:
additionalLocationscoloca varios cofres desde una sola entrada Dungeon Loot Chest (se ignora en una mazmorra generada). Loot Chest Trigger recibeparticleEffect, con ejes X, Y y Z separados. - Oleadas y escalado: Dungeon Mob Spawn recibe
waves,maxSimultaneous, el escalado según el número de jugadores (perExtraPlayer,maxCount,playerCountSource),spawnParticley los disparadoresonWaveClearedyonCleared. Nuevo evento On Dungeon Mobs Cleared, para abrir una puerta o hacer aparecer un cofre cuando todos los mobs son derrotados. - Restricciones: nueva entrada Dungeon Restrictions (élitros, barco o vagoneta, perla de ender, fruta de chorus, impulso del tridente, comandos bloqueados, mensaje de rechazo, permiso de exención), con
gameMode,limitInteractions(interacciones permitidas, entidades protegidas) ymessageRepeatDelay. El impulso del tridente y la fruta de chorus se rechazan desde el clic. Solo el permiso de exención exime a un jugador: un operador lo tiene mientras el nodo no esté enfalse. - Estadísticas: 22 estadísticas por jugador, contadas por artifact con un total entre varios artifacts: daño infligido y recibido (solo la vida realmente perdida), bajas, oleadas y salas despejadas, tiempo jugado, muertes, récords...
statsMobScopeelige los mobs que cuentan. Una muerte que saca al jugador de la partida ya no cuenta comoruns_left. Nuevo factdungeon_stat; placeholdersdungeon_stat_<key>[_raw],dungeon_total_<key>ydungeon_inst_<id>_<key>; snippetscontent.dungeon_stats.duration_formatycontent.dungeon_stats.missing_value. - Clasificación: nueva entrada
dungeon_leaderboard_source(LIFETIMEoCURRENT_RUN,rankBy,values,durationFormat,decimals) para conectar al camposourcede una clasificación de GUI. - Reconexión:
reconnectGrace(2 minutos por defecto). Un miembro desconectado conserva su sitio y continúa donde estaba (barra lateral, ocultaciones, modo de juego). Pasado el plazo, abandona la partida y vuelve a su punto de entrada en la siguiente conexión. - MMOProfiles: el regreso al punto de entrada y el modo de juego de origen se vuelven a aplicar tras elegir el perfil.
- Menús: los campos de ranura de Dungeon Category
unlockedLoreylockedLorepasan a llamarseunlockLoreylockLore. Las páginas antiguas se siguen leyendo; la clave nueva gana si están ambas. - Ruptura de API para los addons:
DungeonArtifactData,DungeonStatsyPlayerDungeonStatspasan al paquetebtcrenaud.dungeons.core, yDungeonArtifactEntry.getPlayerStatsyupdatecambian de firma. Un addon compilado contra Dungeon 1.1.x debe recompilarse.
GUI v0.20
- Devolver el botín:
dropOnCloseen un layout simple devuelve, al cerrar el menú, lo que el jugador no cogió o lo que dejó allí.closeDeliveryeligeGIVE_OR_DROP(por defecto: al inventario, el sobrante a los pies) oDROP. Desactivado por defecto. - Objetos aleatorios:
rollPerSlotsortea un objeto aleatorio para cada ranura repetida en lugar de uno solo para todas, y el nuevoliveItemlo vuelve a sortear en cada actualización. - Nombre vacío ignorado: un objeto con el nombre vacío conserva su propio nombre en lugar de mostrarse sin nombre.
- Filas de clasificación de otra extensión: nuevo campo
sourceengui_leaderboard. Las filas vienen de una entrada fuente, para todos los jugadores, conectados o no, como la de Dungeon. Los textos de fila aceptan{score},{score_raw}y{value_<key>}. Los textos de una fuente son texto plano: un nombre que parece una etiqueta MiniMessage, como<red>, ya no cambia el orden.
MythicMobs v0.12
- Mobs visibles solo para algunos jugadores:
spawn_mythicmobs_mobymythic_spawnertienen un nuevo campovisibilityCriteria. El mob solo es visible, objetivo y herible para los jugadores que cumplen los criteria, reevaluados de forma continua (visibilityRefreshInterval, 1 segundo por defecto). UnvisibilityGroupahora se sigue en directo en vez de quedar fijado al spawn. collidable(spawn_mythicmobs_mob,mythic_spawner, por defectotrue):falsequita la colisión y los empujones para todo el mundo.- Abandono:
spawn_mythicmobs_mobtiene nuevos camposabandonRangeyabandonDelay. El mob se retira si ningún jugador autorizado permanece al alcance durante la espera (abandonRange0= desactivado). El editor web rellena las duraciones nuevas con 1 segundo: revisaabandonDelay. despawn_mythicmobs_mob: nuevo camposcope,ALL(por defecto, como antes) oVISIBLE_TO_PLAYER(solo los mobs que el jugador ve).- Protección: todo el daño ligado a un mob restringido (cuerpo a cuerpo, proyectiles, skills de MythicMobs, fuego) se bloquea hacia los jugadores no autorizados, y al revés. Los proyectiles lo atraviesan, y el mob suelta un objetivo no autorizado.
- Condición de MythicMobs
typewritervisible(aliastwvisible): añádela a los skills sin daño (poción, lanzamiento...), en el targeter (conditions=[ - twvisible true ]) o comoTargetCondition, para que ignoren a los jugadores que no ven al mob. La extensión ejecuta/mm reloaduna vez al iniciar cuando tus archivos de MythicMobs la usan. - Un mob cuya entrada de origen se elimina sigue oculto para todos.
- Límites: la colisión es todo o nada; los skills sin daño no se filtran sin
twvisible; los sonidos y partículas lejos del mob no se ocultan.
Shops v1.12
- Recompilada contra GUI 0.20, que ahora requiere: la versión anterior no abre sus menús con GUI 0.20. No cambia nada más.
Quest Codex v2.16
- Recompilada contra GUI 0.20, que ahora requiere: la versión anterior no abre sus menús con GUI 0.20. No cambia nada más.
Corpse v0.7
- Recompilada contra GUI 0.20, que ahora requiere: la versión anterior no abre sus menús con GUI 0.20. No cambia nada más.
Numerical Storage v0.15
- Recompilada contra GUI 0.20, que ahora requiere: la versión anterior no abre sus menús con GUI 0.20. No cambia nada más.
2026-10-12
Dungeon v1.1.1
- Paper 26.x,
WORLD_PER_RUN: una partida podía fallar conThe server did not create world 'dungeon_classic_...'. La copia de la plantilla conservaba el ID de mundo de la plantilla (data/paper/metadata.dat), así que el servidor la rechazaba por duplicada. Ahora la copia recibe su propio ID.
Documentación · Changelog de Dungeon
2026-10-08
Dungeon v1.1
Una renovación completa construida en torno a las runs: mundos aislados, mazmorras generadas, NPC por run y mobs vanilla. Lee la nota de migración antes de actualizar desde la 0.10; cada cambio figura en el registro de cambios de Dungeon.
- Runs: cada run tiene su propio estado y su propio diario. Iniciar una run es todo o nada, y el coste de entrada se reembolsa si falla.
/tw reloady Publish recuperan las runs en curso en lugar de terminarlas. - Aislamiento: tres modos por mazmorra (
SLIME_CLONE,WORLD_PER_RUN,SHARED_WORLD_SLOTS) oAUTO. - Mazmorras generadas: plantillas de salas, conectores, pools, generadores y afijos, con un editor en el juego para puertas y marcadores.
- NPC y mobs: NPC por run a partir de cualquier definición de entidad, visibles solo para los miembros de la run; mobs de combate vanilla generados una vez por run, con un límite de mobs vivos.
- Textos: cada texto para el jugador es un snippet editable. Solo Paper.
- Respuestas de comandos: cada respuesta de los comandos
/tw dungeon, incluidas las de administración, es un snippet editable (content.dungeon_command.). - Estadísticas: se guardan por perfil de MMOProfiles cuando ese plugin está instalado y, si no, por jugador.
- Mundos de Paper 26.x: los mundos guardados al estilo de Paper 26.x (
dimensions/minecraft/<nombre>) se encuentran paraSHARED_WORLD_SLOTSy se copian paraWORLD_PER_RUN.
MythicMobs NPC v5.0
- NPC en mazmorras: con
tickingdesactivado, un NPC colocado por Dungeon 1.0 solo se muestra a los miembros de su run, y un clic da una interacción al jugador correcto. - Bone Visibility Data y Attachment Data ahora se aplican al modelo del NPC, con
tickingactivado o desactivado, y de nuevo tras cada reaparición. - Play Animation:
forceahora detiene las demás animaciones iniciadas por la acción en ese NPC; unaspeedde 0 o menos se reproduce a velocidad normal. - MythicMob Skill Objective:
skillNameahora funciona mediante la mecánica de MythicMobstypewriterSkill{name=..}(aliastwskill), añadida a la habilidad y seguida de/mm reload. El progreso se guarda enfact, y el progreso anterior se migra automáticamente. La mecánica sobrevive a una publicación desde el editor web; tras una parada y arranque completos de Typewriter, la consola pide/mm reload. - Objetivo de loot: los nombres de objeto y de mob del loot se leen con sus colores (antes eran texto técnico), y la marca de finalización ✔ es la misma que en las demás extensiones de objetivos.
MMOItems v2.4
- Advanced Tooltip Config:
overrideDefaultLoreahora se lee. Si está desactivado, si el sistema está desactivado o si falta la entrada, todo el lore de MMOItems se muestra en una sola página, sin paginación ni comparación. - Etiquetas del lore: las etiquetas del formato de lore de MMOItems (
<page_break>,<category_image>,<pagination_indicator>,<comparison_indicator>,<requirement_met>,<requirement_not_met>,<total_pages>,<current_page>,<comparison_value>,<comparison_sign>) ahora siempre se sustituyen o se eliminan, así que el jugador ya no las ve como texto sin procesar. - Modo creativo: la paginación y el lore avanzado solo se aplican en supervivencia y aventura. En creativo el lore de MMOItems se deja intacto (etiquetas incluidas), porque el cliente creativo devuelve los objetos tal como los muestra y reescribir el lore alteraría el objeto real.
- Los campos de la entrada empiezan con valores funcionales cuando la entrada se crea en el editor web (
isEnabled,overrideDefaultLoreyenableComparisonTagsactivados,paginationKeybindSWAP_OFFHAND,comparisonKeybindSNEAK,statsStartOnPage2, símbolos e indicadores por defecto).
Shops v1.11
perPlayerahora da a cada jugador su propio stock de cada objeto; un reinicio rellena el de todos. Los límites mantienen su propio ámbito.defaultRefreshTicksy elrefreshTicksdel objeto redibujan una tienda abierta cuando cambia el stock mostrado (solo stocks finitos;0en la tienda significa sin comprobación automática).- El
guiSlotdel objeto fija un objeto en una ranura fija del área de contenido en todas las páginas; un objeto que no se puede colocar se mueve a una celda libre o se notifica en la consola. sellAllEnableddesactivado ahora rechaza la acción de vender todo concannotSellMessage.- Las respuestas de los comandos, los iconos de tendencia, el lore Limited/Unlimited, las líneas de precio, los nombres por defecto, el texto sin precio y el formato de duración ahora son editables; el día del cooldown por defecto se escribe
d(antesj).
GUI v0.19
audioDefaultsdegui_settingsahora se aplica como valor de respaldo: un sonido dejado vacío en una acción Open GUI se toma de ahí, sonido por sonido.- Los diseños desplazables reciben flechas por defecto mientras
showDefaultButtonsesté activado (el valor por defecto): una por dirección sin entrada enbuttons, mostrada solo cuando el contenido puede desplazarse en ese sentido, y nunca sobre una celda ocupada. Los menús desplazables existentes ganan flechas; ponshowDefaultButtonsen false para mantenerlos como estaban. - Nuevo campo
defaultStepen los diseños desplazables y nueva listascrollArrowsengui_settings(direction, item, name, x, y) para cambiar las flechas por defecto. - Nuevo
textsengui_settings: los botones Confirm y Cancel y la línea de progreso del almacenamiento son editables. «Confirmer» pasa a ser «Confirm». Se corrige el separador de la ruta de navegación, que se mostraba dañado.
Quest Codex v2.15
- El permiso
typewriter.codex.openahora lo declara la extensión, solo para operadores por defecto, de modo que aparece en plugins de permisos como LuckPerms. - Las etiquetas de navegación, las etiquetas de orden, los títulos de menú por defecto y el mensaje de categoría desconocida son editables (
navLabels,sortTexts,mainMenuTitle,trackedQuestsTitle,unknownCategoryMessage).
Vote System v0.9
- Vote Config ahora se lee:
cooldownSecondspor encima de 0 permite a un jugador votar de nuevo tras ese número de segundos (los recuentos son acumulativos), ydebugregistra los votos aceptados y rechazados. - Los votos guardados antes de que existiera el enfriamiento se fechan en el primer contacto tras la actualización, por lo que su enfriamiento empieza entonces.
- Las respuestas de los comandos
/tw voteson snippets editables (content.vote.). - Colores MiniMessage: el mensaje de cierre, el nuevo
blockedMessagey los dos textos de Vote Message ahora se leen como MiniMessage, con los placeholders resueltos (las etiquetas se mostraban tal cual). Las respuestas de comando por defecto tienen color. - Un voto rechazado se rechaza de verdad: los
triggersymodifiersde Vote Action solo se ejecutan si el voto queda registrado; un rechazo ya no muestra el mensaje de aceptación y nada se dispara dos veces. Un rechazo muestra elclosedMessage(tras la fecha de fin) o el nuevoblockedMessage(antes de que termine la espera) y dispara los nuevosrefusedTriggers. Cada rechazo se registra en el log cuandodebugestá activado. - Nuevos placeholders
vote_has_voted_<id>yvote_closed_<id>(1o0), yvote_remaining_<id>(segundos hasta la fecha de fin,0sin fecha).
Discord v0.13
- Los
triggersde un Webhook Fact Event ahora se ejecutan tras publicarse un webhook, para el jugador cuyo cambio de fact se publicó. - Nuevo
triggerCooldownSeconds(por defecto1) en Webhook Fact Event: una protección contra bucles entre dos disparos detriggerspara el mismo jugador;0la desactiva.
Custom Biome v0.9
- Explore Biome Objective ahora funciona:
biomesyrequireAllse leen cuando un jugador entra en un bioma, y el nuevo campotriggersejecuta entries cuando el objetivo está completado y activo. El objetivo registra el descubrimiento por sí mismo; no hace falta ningún Enter Biome Event. - Las respuestas de los comandos
/tw biomey el textounknownde los placeholders de bioma son snippets editables (content.custombiome.). - Paper 26.3: los biomas personalizados se registran de nuevo; en 26.3 no se cargaban (inyección en vivo y alternativa por datapack).
Numerical Storage v0.14
optionalButtonsdel menú y de cada submenú ahora se dibujan: ítems solo de visualización en susslotsque sustituyen lo que el diseño coloque en la misma ranura.profileModeahora usa MMOProfiles: un saldo por perfil de MMOProfiles. Sin MMOProfiles, es el saldo del jugador. Con MMOProfiles y sin perfil activo (selección de perfil, o tras/mmoprofiles quit), el saldo mostrado es 0 y las escrituras se rechazan: los comandos de administración y las acciones de menú responden con elnoActiveProfileMessageeditable (enadminMessages) y no escriben nada. El interés de un perfil se liquida al seleccionarlo.- Las respuestas de los comandos de administración son editables (
adminMessages); los textos de los placeholders y el formato de duración son snippets (numericalstorage.placeholder.,numericalstorage.duration.). - Los placeholders cargan el almacenamiento al entrar, así que muestran el saldo guardado en lugar de uno vacío mientras la caché está fría.
- Los placeholders y el botón de mejora de nivel ahora siguen
profileMode;/tw ns add/removeresponden a una cantidad no válida o a un artefacto ausente con mensajes editables.
Puzzle v0.6
isSharedahora comparte el progreso de un grupo (el grupo delfactdel puzzle): la primera resolución cuenta para el grupo, el fact se activa una vez, y cada miembro recibe una sola vez el mensaje de finalización,onCompletey el paso de cadena (un miembro ausente los recibe a su regreso).- Un jugador recibe la finalización de un puzzle como máximo una vez, incluso al cambiar de grupo, hasta que un reinicio de admin le afecte.
/typewriter puzzle admin reset <player> <id>reabre un puzzle compartido para todo el grupo. - Ahora se requiere un Puzzle Artifact para los puzzles compartidos: sin él, un reinicio vuelve a pagar la finalización, y volver a una build anterior pierde el registro compartido.
- Los textos para el jugador y las respuestas de los comandos son editables: los mensajes de cada puzzle y del Puzzle Menu son campos de la entrada, y las respuestas de
/tw puzzleson snippets (content.puzzle.). Los textos que estaban en francés por defecto ahora están en inglés; una página que guardó el texto en francés lo conserva. - Corregido, bloques del lado del cliente: un bloque dibujado ya no desaparece cuando se cancela su clic. El tablero se vuelve a dibujar un tick después de cada clic cancelado (los espejos de Laser Grid desaparecían al hacer clic derecho en lugar de girar, los bloques de Block Push desaparecían cuando se rechazaba un empuje, y también los clics de Memory, Pattern, Item Frame y Pedestal).
- Corregido, Block Push: un bloque empujado de vuelta a su casilla de inicio ya no rebota ni desaparece, y un agujero objetivo se vuelve a dibujar cuando un bloque se ha empujado sobre él y más allá. Un empuje rechazado cuenta un intento fallido por bloque y casilla objetivo, ya no uno por clic, así que mantener el clic contra una pared no consume
maxAttempts. Deja vacías (aire) las casillas de inicio en el mundo.allowPullsigue sin tener efecto (no implementado). - Corregido, Lever Order: las palancas que descansan activadas vuelven a su posición original tras un orden erróneo, y accionarlas se ve. Un clic durante el cooldown de fallo ya no llega a una palanca real.
- Corregido, puzzles resueltos: un Block Push, Combination Lock, Lever Order o Laser Grid resuelto queda inerte (sin tablero, sin interacción cancelada) y ya no se traga los clics de sus palancas y botones cuando el jugador vuelve a su audiencia. Un Pedestal resuelto ya no se traga la recogida de su objeto.
- Laser Grid: el rayo se dibuja ahora por el centro de los bloques y gira exactamente sobre cada espejo (antes estaba desplazado).
beamDensityes un número de partículas por bloque, y los vértices se dibujan siempre. - Laser Grid,
maxBeamLength: campo nuevo, 64 bloques por defecto (0 o menos equivale a 64, nunca ilimitado). Un tablero con un rayo más largo debe aumentarlo. El rayo nunca carga un chunk: se detiene en el borde del mundo cargado. - Combination Lock: los dígitos se numeran desde 0 (la primera posición listada es el dígito 0); la ayuda lo indica con un ejemplo. Un valor de
codefuera de los dígitos ahora registra una advertencia en la consola en lugar de ignorar en silencio todas las pulsaciones.
Corpse v0.6
- Filtro de mundos:
allowedWorldsyexcludedWorldsencorpse_settingseligen dónde una muerte deja un cadáver. Una lista de permitidos vacía significa todos los mundos. Se entienden los comodines*y?(dungeon_*), los nombres de mundo y las claves de dimensión (minecraft:the_nether), y una exclusión siempre gana. Fuera de los mundos permitidos la muerte es vanilla. filteredWorldDeath: en un mundo que el filtro rechaza,VANILLA_DEATH_SCREEN(por defecto) mantiene la muerte normal de Minecraft, cuyo cuerpo y pantalla de muerte dibuja el cliente, eINSTANT_RESPAWNhace reaparecer al jugador en el tick siguiente sin pantalla de muerte. Los objetos y la experiencia caen como en vanilla. Sin efecto cuando ambas listas están vacías.- Todos los textos son editables: mensajes, etiquetas y materiales del menú, el formato del waypoint con sus ocho flechas de dirección, las respuestas de
/corpses, el nombre por defecto del cadáver y el texto del objetivo de recuperación. El nombre de un jugador se escapa, así que nunca se convierte en una etiqueta en la que se pueda hacer clic. - Nuevos ajustes
interactionReach(6 bloques; el servidor no comprobaba la distancia de un clic),interactionCooldownMillisyunknownWorldLabel. Una definición también puede elegirse con la clave de dimensión, y el encabezado de/corpses listes editable./corpses listyclearse aplican a todo el servidor. NuevooutOfReachMessageopcional (vacío por defecto: sin mensaje). - Revisión de pérdida y duplicación de objetos: se revisaron las muertes, el saqueo y el almacenamiento; las correcciones siguientes cierran todas las vías de pérdida o duplicación encontradas.
- Corregido, muertes: una muerte cancelada por otro plugin (tótem, resurrección) ya no se lleva el equipo del jugador; se respetan
keepInventoryykeepLevel(sin cadáver conkeepInventory), y los objetos que otros plugins conservan para el jugador ya no se duplican en el cadáver. Si no se puede crear el cadáver, los objetos caen con normalidad. - Corregido, saqueo: tomar un objeto con el inventario lleno ya no duplica la parte que cupo, y dos clics que compiten por el mismo cadáver ya no pueden entregar su contenido dos veces.
- Corregido, almacenamiento: un reinicio ya no devuelve objetos ya tomados, y un archivo de almacenamiento ilegible o escrito a medias ya no borra los cadáveres guardados. Los cadáveres restaurados conservan su pose, brillo, nombre y animación (no la skin ni la armadura del dueño).
- El mensaje de reaparición, el waypoint y el objetivo usan el último cadáver, y el menú de saqueo avisa antes de abrirse en lugar de tras el primer clic.
MythicMobs v0.11
mythic_spawner.groupahora se lee: solo los miembros del grupo activan el spawner,criteriase comprueba sobre ese grupo, y cada grupo tiene su propio calentamiento y enfriamiento; el estado de un grupo se descarta cuando no hay ningún miembro conectado.- La línea del MythicMob Kill Objective en el rastreador de misiones es editable con los snippets
advancedQuest.displayyadvancedQuest.completed.
Enchantment Creator v0.11
- Agricultural Harvest ahora lee el evento de rotura de bloque y cosecha los cultivos maduros alrededor del bloque roto (
radiuslimitado a 8) en lugar del bloque que mira el jugador. - Agricultural Harvest: nuevos campos
particle,particleCount,sound,soundVolumeysoundPitch. - Lo que un jugador escribe en
/enchantcreator give(el nombre del encantamiento) se muestra tal cual en las respuestas, sin interpretarse nunca como formato.
TextDisplayDialogue v2.4
- Textos editables: los 15 snippets ahora se leen. Los diseños, nombres de interlocutor, líneas de texto, indicaciones, líneas de opciones y prefijos de opciones de los diálogos Spoken, Option y Player option y de los subtítulos de cinemática se editan en
plugins/Typewriter/snippets; los valores por defecto reproducen la visualización anterior. - Placeholder del temporizador:
%typewriter_textdisplaydialogue_timer%ahora está registrado en PlaceholderAPI y funciona fuera de los diálogos (0cuando no hay ningún temporizador activo). - Dos mensajes más editables:
textdisplay.inventory.blocked(inventario bloqueado durante un diálogo) ytextdisplay.error.init(la visualización no pudo iniciarse); un snippet vacío oculta el mensaje. La causa de un error de inicialización ahora va solo al registro del servidor: no se muestra ningún detalle de la excepción al jugador. El diálogo Player option también leetextdisplay.speaker.formaty los snippetstextdisplay.option.*(misma visualización por defecto). audioProfileeliminado detextdisplay_spoken: el campo nunca se leía.- Solo Paper: Folia no es compatible.
Retirado de la documentación
- BTC Nameplates: fusionado en UiCore (mismas entries,
/nameplates); las páginas antiguas redirigen a UiCore. - MMO Profile: abandonado, nunca publicado; sus páginas se han eliminado.
2026-10-02
MythicMobs NPC v4.9.1
Correcciones para interacciones, animaciones y cinemáticas en Paper 26.x.
- Clics: el clic derecho vuelve a funcionar en Paper 26.x, y
LEFT_CLICKyALLtambién se activan ahora. Un clic activa el diálogo una sola vez, nunca dos, y/tw reloadya no rompe los clics con unNoClassDefFoundError. - Play Animation: una acción cuya velocidad se dejaba vacía se reproducía congelada en su primer fotograma; ahora se reproduce a velocidad normal. También funciona en NPC con
tickingdesactivado, se reproduce por encima de las animaciones de reposo, de caminar y de habilidades de MythicMobs, y espera al modelo cuando aún no está cargado. - Cinemáticas en otro mundo: el NPC de una cinemática de entidad se quedaba en el mundo anterior del jugador, por lo que solo aparecía tras varios lanzamientos. Ahora aparece desde el primer lanzamiento, con su animación.
- Movimiento en cinemáticas: caminar más fluido, sin alternancia entre reposo y caminar, y sin parpadeo de ModelEngine a corta distancia.
- Limpieza: los portadores de NPC invisibles ya no se acumulan en el mundo tras las cinemáticas.
CraftEngine v1.1
- Audiencia de la zona de misión:
dispose()siempre vacía su estado y restablece el indicador de liberación, de modo que un/tw reloadya no deja filtrado un listener que retiene el classloader anterior de la extensión.
2026-09-19
GUI v0.18
- La advertencia de solapamiento de ranuras ahora nombra
gapy recuerda que es un paso, no una separación:gap: 1significa ranuras adyacentes, no una ranura vacía entre cada una. Que una ranura repetida choque con una decoración colocada entre dos de sus copias es la causa más frecuente de esa advertencia. - Los menús escritos con la fórmula de Quest Codex anterior a la 0.3.0, en la que el paso aplicado era
gap + 1, caen exactamente aquí (consulta Quest Codex v2.14).
Quest Codex v2.14
- Se documentó un cambio incompatible introducido en Quest Codex 0.3.0 que nunca se anunció. Hasta entonces, los marcadores del codex usaban su propia fórmula de repetición en la que
gapera una separación (pasogap + 1). Desde la 0.3.0 usan la fórmula del motor de GUI, en la quegapes un paso:count: 3, direction: right, gap: 1desde x=2 ahora da x=2, 3, 4 en lugar de 2, 4, 6. - Por tanto, un menú escrito antes de la 0.3.0 coloca sus marcadores separados por una ranura y puede chocar con la decoración que hay entre ellos. Para restaurar la separación anterior, duplica el paso:
gap: 1pasa a sergap: 2. Se mantiene la semántica del paso. - Los marcadores indexados ahora restablecen
gapjunto concountyrepeatY, por lo que la validación de menús ya no informa de una repetición huérfana en ellos. - Compilada con GUI v0.18.
2026-09-14
GUI v0.17
- Un
gapde0ya no apila todas las copias repetidas en la celda de origen. El editor web serializa ungapsin tocar como0: unQUEST_SLOTconcount: 7ydirection: rightproducía siete marcadores en la misma posición y una advertencia "Slot overlap" que nunca escribiste. Ahoragapse fuerza a al menos1, igual quecountyrepeatY. - La corrección está en el código compartido de repetición de ranuras, por lo que Quest Codex y Shops la reciben sin necesidad de recompilar.
Shops v1.10
- Trueque: precios pagados en objetos. El nuevo
priceMode: ITEMSvende un artículo a cambio de uno o varios objetos en lugar de moneda.itemPriceen el objeto enumera el coste (objeto más cantidad por unidad comprada);defaultItemPriceen la tienda cubre todos los artículosITEMSque no declaran ninguno. La lista del artículo sustituye a la de la tienda; nunca se suma a ella. - Un artículo
ITEMSsin precio en ningún sitio se rechaza y se registra, nunca se regala. El pago se simula sobre todo el inventario antes de retirar nada, y primero se comprueba el espacio para el objeto comprado, ya que un trueque no tiene reembolso. - Nuevo
cannotAffordItemsMessage(tokens{missing},{amount}) y el token de lore{item_price}, una línea por cada objeto solicitado. Las líneas{buy}y{sell}se descartan en un artículo así, y los placeholdersbuy_price/sell_pricemuestran un guion. - "Comprar máximo" funciona con los artículos de trueque. Un artículo
ITEMSno se puede revender por moneda: su precio de venta es cero. - Recompilada con GUI v0.17.
2026-09-09
Puzzle v0.5
- Corregido:
NoClassDefFoundErrorenPuzzleRendererstras recargar la extensión. La extensión registraba dos listeners de Bukkit en el plugin del motor y nunca los eliminaba, por lo que las instancias antiguas seguían disparándose contra un classloader cerrado. Ahora ambos se desregistran cuando la extensión se apaga, lo que también evita que se acumule una copia adicional en cada recarga. - Una actualización visual ya programada cuando la extensión se apaga ya no puede provocar la carga de una clase en el classloader muerto.
2026-09-08
Shops v1.9
- Recompilada con el motor de Typewriter
0.9.0-beta-177. - Sin cambios de comportamiento.
- Compilada con GUI v0.16.
Discord v0.12
- Recompilada con el motor de Typewriter
0.9.0-beta-177. - Sin cambios de comportamiento.
Companion v0.10
- Recompilada con el motor de Typewriter
0.9.0-beta-177. - Sin cambios de comportamiento.
Corpse v0.5
- Recompilada con el motor de Typewriter
0.9.0-beta-177. - Sin cambios de comportamiento.
Custom Biome v0.8
- Recompilada con el motor de Typewriter
0.9.0-beta-177. - Sin cambios de comportamiento.
InputTracker v0.5
- Recompilada con el motor de Typewriter
0.9.0-beta-177. - Sin cambios de comportamiento.
Numerical Storage v0.13
- Recompilada con el motor de Typewriter
0.9.0-beta-177. - Sin cambios de comportamiento.
Puzzle v0.4
- Recompilada con el motor de Typewriter
0.9.0-beta-177. - Sin cambios de comportamiento.
Vanilla v1.4
- Recompilada con el motor de Typewriter
0.9.0-beta-177. - Los textos de progreso de los objetivos (objetivos de recolección, de recuento y de comprobación de hechos) ahora se analizan con el jugador, por lo que los placeholders que contienen se resuelven para ese jugador.
Vote System v0.8
- Recompilada con el motor de Typewriter
0.9.0-beta-177. - Sin cambios de comportamiento.
Enchantment Creator v0.10
- Recompilada con el motor de Typewriter
0.9.0-beta-177. - Las acciones de las mecánicas ahora se programan mediante el despachador síncrono propio de Typewriter en lugar del auxiliar de planificación privado de la extensión.
MMO Inventory v0.7
- Recompilada con el motor de Typewriter
0.9.0-beta-177. - Sin cambios de comportamiento.
MythicMobs v0.10
- Recompilada con el motor de Typewriter
0.9.0-beta-177. - Sin cambios de comportamiento.
GUI v0.16
- Recompilada con el motor de Typewriter
0.9.0-beta-177. - Corregidas las filas de clasificación que describían al espectador: una fila de un jugador clasificado ahora resuelve las
Varde su objeto, nombre y lore con respecto a ese jugador y no a quien abrió el menú, de modo que ya no todas las filas muestran los valores del espectador. Las filas de mundo, de grupo y de jugadores desconectados recurren al espectador.
Quest Codex v2.13
- Recompilada con el motor de Typewriter
0.9.0-beta-177. - Sin cambios de comportamiento.
- Compilada con GUI v0.16.
Tracking v0.11
- Recompilada con el motor de Typewriter
0.9.0-beta-177. - Sin cambios de comportamiento.
2026-09-06
Shops v1.8
- Recompilada con el motor de Typewriter
0.9.0-beta-176. - Sin cambios de comportamiento.
- Compilada con GUI v0.15.
Discord v0.11
- Recompilada con el motor de Typewriter
0.9.0-beta-176. - Sin cambios de comportamiento.
Companion v0.9
- Recompilada con el motor de Typewriter
0.9.0-beta-176. - Sin cambios de comportamiento.
Corpse v0.4
- Recompilada con el motor de Typewriter
0.9.0-beta-176. - La placa de nombre del cadáver ahora usa la
CustomNamePropertydel motor. - Compilada con GUI v0.15.
Custom Biome v0.7
- Recompilada con el motor de Typewriter
0.9.0-beta-176. - Sin cambios de comportamiento.
InputTracker v0.4
- Recompilada con el motor de Typewriter
0.9.0-beta-176. - Sin cambios de comportamiento.
Numerical Storage v0.12
- Recompilada con el motor de Typewriter
0.9.0-beta-176. - Sin cambios de comportamiento.
Puzzle v0.3
- Recompilada con el motor de Typewriter
0.9.0-beta-176. - Sin cambios de comportamiento.
Vanilla v1.3
- Recompilada con el motor de Typewriter
0.9.0-beta-176. - Las actividades de entidades (detección de visibilidad, seguir, orbitar, evitar, oído, olfato, patrulla y similares) se han portado al ciclo de vida de actividades del motor 0.9. Los nombres de las entradas no cambian.
Vote System v0.7
- Recompilada con el motor de Typewriter
0.9.0-beta-176. - Cambio incompatible: campo de
vote_actionrenombrado.optionse sustituye poroptionIndex, un número simple que empieza en 0. Vuelve a seleccionar la opción en cadavote_actionexistente. - Cambio incompatible: campo de
vote_messagedividido.messagese sustituye pornotVotedMessageyalreadyVotedMessage; deja el segundo vacío para no enviar ningún mensaje a los jugadores que ya han votado. vote_dataahora usa por defectovote_storagecomoartifactId: establece un nombre fijo para conservar las papeletas entre recargas.- Las nuevas entradas
vote_config(condebugycooldownSeconds),vote_factyvote_cast_eventaparecen en el editor.
Dialog Menu v0.7
- Recompilada con el motor de Typewriter
0.9.0-beta-176. - Sin cambios de comportamiento.
Enchantment Creator v0.9
- Recompilada con el motor de Typewriter
0.9.0-beta-176. - Sin cambios de comportamiento.
MMO Inventory v0.6
- Recompilada con el motor de Typewriter
0.9.0-beta-176. - Sin cambios de comportamiento.
MythicMobs v0.9
- Recompilada con el motor de Typewriter
0.9.0-beta-176. - Sin cambios de comportamiento.
GUI v0.15
- Recompilada con el motor de Typewriter
0.9.0-beta-176. - Sin cambios de comportamiento.
Quest Codex v2.12
- Recompilada con el motor de Typewriter
0.9.0-beta-176. - Sin cambios de comportamiento.
- Compilada con GUI v0.15.
Protection v1.3
- Obsoleta: esta es la última versión de Protection. El sistema de regiones nativo de Typewriter es el sustituto para las nuevas instalaciones.
- La extensión se mantiene para los servidores existentes y no recibirá nuevas funciones.
- Recompilada con el motor de Typewriter
0.9.0-beta-176.
Tracking v0.10
- Recompilada con el motor de Typewriter
0.9.0-beta-176. - Sin cambios de comportamiento.
2026-08-29
GUI v0.14
- Clasificaciones de hechos. La nueva definición
gui_leaderboardclasifica a jugadores, mundos o grupos de Typewriter según uno o más valores de hechos, y se renderiza con el nuevo layoutleaderboarden cualquier conjunto deopen_gui. Las filas admiten{rank},{name},{score},{group},{world}y{score_<fact_id>}. - El nuevo artefacto
gui_leaderboard_populationconserva los últimos valores conocidos de los jugadores desconectados, de modo que una clasificación incluye a más jugadores que los conectados. - El nuevo
dropOnCloseen las ranuras de almacenamiento suelta el contenido restante a los pies del jugador al cerrar, al pulsar Escape y al desconectarse. - Corregido que las ranuras de almacenamiento
temporarynunca se vaciaban, y que Shift + clic derecho con un objeto coincidente en el cursor lo retiraba en lugar de depositarlo. - Un
viewPermission/clickPermissionen blanco ya no se trata como un permiso: las restricciones sin definir que guardaba el editor web ocultaban la ranura o la pestaña a todos los jugadores que no eran operadores. - La validación al arrancar ahora conoce el layout
leaderboarde informa de un área de posiciones fuera del inventario.
Quest Codex v2.11
- Recompilada con GUI v0.14.
Shops v1.7
- Recompilada con GUI v0.14.
Corpse v0.3
- Recompilada con GUI v0.14.
Numerical Storage v0.11
- Recompilada con GUI v0.14.
2026-08-24
Shops v1.6
- Nuevo árbol de comandos de operador
/tw shop admin: listado de tiendas, inspección de definiciones, control de sesiones de jugadores, reinicio en tiempo de ejecución, gestión de existencias de objetos directos e historial de transacciones. - Nuevo permiso
typewriter.shop.admin(solo OP).typewriter.shop.opensigue disponible para los jugadores por defecto. - Un reinicio manual comparte el comportamiento del reinicio automático y recalcula el siguiente reinicio programado.
- Corregido el registro del permiso del comando público para que los jugadores que no son operadores puedan abrir tiendas.
2026-08-16
Discord v0.10
- Webhooks de hechos. El nuevo
webhook_fact_eventpublica un cambio de hecho en cualquier destinowebhook_definition, para los ámbitos de jugador, grupo de Typewriter y global, con audiencias opcionales, condiciones de valor, plantillas de mensaje y de embed, hilos de foro y menciones de rol. Los ámbitos de grupo y global eliminan los callbacks duplicados de los jugadores que observan el mismo hecho. - El enlace con Discord es totalmente opcional: sin un
discord_link_manifest, la extensión ya no inicializa los puentes de Discord ni resuelve clases de JDA. - Un JDA desactivado o incompleto lo comunica el cliente en lugar de lanzar un
NoClassDefFoundErroren el hilo del servidor. - La versión pública ahora incluye JDA 6.5.0 y sus dependencias de ejecución.
2026-08-21
GUI v0.13
- Objetos de ranura en vivo.
itemProviderreconstruye el objeto, el nombre y el lore de una ranura al renderizar. Las ranuras de un layout se analizan una sola vez y se devuelve la misma lista en cada renderizado, de modo que un placeholder o una cuenta atrás en un lore se resolvían una vez y después quedaban congelados:autoRefreshTicksredibujaba para siempre un inventario idéntico. - Solo una apertura de ventana en curso a la vez.
GuiFactory.open()se completa un tick después, así que hasta entonces el inventario superior sigue siendo la vista anterior y cada renderizado decidía volver a abrir. La segunda apertura cerraba la primera ventana, ese cierre se interpretaba como un cierre real y la sesión se destruía mientras su menú seguía en pantalla: todos los botones quedaban entonces muertos. - Una animación con una duración de
0deja de ser una animación. El panel estampa un bloque de animación por defecto en cada ranura, por lo que los objetos decorativos se dibujaban en el índice 0, y el nuevo renderizado que programaban competía con la apertura pendiente. - Un botón etiquetado conserva las interacciones propias del autor. Rellenar
buttonTypesolía descartar toda la lista de interacciones, por lo que un marcador que ningún resolutor reclamaba (prefijo equivocado, mayúsculas equivocadas o la extensión propietaria ausente de esa pantalla) se convertía en un objeto que reaccionaba al clic en silencio, sin nada en la consola.
Quest Codex v2.10
- Los menús que no se pueden dibujar se informan al arrancar, mientras todavía se está leyendo la consola, en lugar de fallar en silencio en el momento del clic. Cada mensaje indica la solución, no el síntoma.
- Conversión única de las páginas creadas antes del chasis
open_gui. El conjunto de layouts salió decategory_menua una entradaopen_guireferenciada, de modo que una página escrita con el esquema anterior conservaba un layout que el motor ya no lee: completamente configurada en el panel, sin renderizar nada. - Los títulos de los logros pasan por la conversión real de MiniMessage a JSON, de modo que el formato escrito en el título de una misión sobrevive en el logro que genera.
- Requiere OmniGUI v0.13.
Puzzle v0.2
- Nuevo
activationRadiusen cada puzzle, por defecto16bloques. Un puzzle solo se renderiza y se ejecuta para un jugador que esté en el mundo de sus propias posiciones, dentro de ese radio de una de ellas.0desactiva solo la comprobación de distancia: la comprobación de mundo se aplica siempre. - Corregido: un puzzle se dibujaba en todas las dimensiones. Los bloques y partículas del lado del cliente llevan coordenadas pero no mundo, por lo que una cuadrícula de láseres configurada en el Overworld se pintaba delante del jugador en el Nether, en el End o en cualquier otro mundo que visitara.
- Corregido: un puzzle empezaba en cuanto el jugador se unía a su audiencia, fuera cual fuera la distancia. Una secuencia de memoria podía reproducir todo su patrón a alguien situado a miles de bloques, o en otro mundo. Ahora la secuencia empieza cuando el jugador llega al tablero.
- Alejarse borra el tablero en el cliente y cancela las animaciones pendientes. El presupuesto de intentos, el cooldown de fallo,
timeLimitylifespanse activan al llegar y no al unirse a la audiencia.
Custom Biome v0.6
- Cambio incompatible: se elimina
biome_audience. Respondía a "¿está este jugador en ese bioma?" leyendo el bioma propio del mundo, que una superposición en el cliente nunca cambia, así que para cada bioma que pinta esta extensión respondía falso, viera lo que viera el jugador en pantalla. Ninguna configuración conseguía que funcionara. - Dos entradas lo sustituyen:
biome_overlay_audience(¿lleva este jugador esa superposición?) ybiome_region_audience(¿está este jugador dentro de esa región, mundo incluido?). Las páginas que usanbiome_audiencedeben redirigirse a una de ellas. - Las audiencias de región comparan también el mundo además de las coordenadas, de modo que una región definida en un mundo ya no coincide con las mismas coordenadas de otro.
ignoreYconvierte una región en una columna infinita. /tw biome region <entry>rellena las dos esquinas de una entrada a partir de tu selección actual de WorldEdit, en lugar de escribir las coordenadas a mano.- Las superposiciones por jugador se rastrean por chunk y por propietario: varias superposiciones pueden cubrir un chunk, una prevalece, y al borrarla se restaura el bioma real de ese chunk y no la última paleta pintada.
Shops v1.5
- Recompilada con OmniGUI v0.13.
GuiSlotganó un parámetroitemProvideren tiempo de renderizado, lo que cambió el constructor al que enlazan sus llamadores, de modo que el JAR de la v1.4 lanzabaNoSuchMethodErroren cuanto se abría una tienda en el motor de GUI actualizado: el inventario nunca aparecía. - Sin cambios de comportamiento. Las dos versiones van juntas: la v1.4 no puede ejecutarse en OmniGUI v0.13, y la v1.5 no puede ejecutarse en la v0.12.
Numerical Storage v0.10
- Recompilada con OmniGUI v0.13, por el mismo cambio de firma de
GuiSlot: el JAR de la v0.9 lanzabaNoSuchMethodErroral abrir un menú de almacenamiento, y el menú nunca aparecía. - Sin cambios de comportamiento y sin segunda migración: el almacenamiento con esquema v2 se lee exactamente como lo escribió la v0.9.
Corpse v0.2
- Recompilada con OmniGUI v0.13, por el mismo cambio de firma de
GuiSlot: el JAR de la v0.1 lanzabaNoSuchMethodErroral saquear un cadáver, por lo que el menú de botín nunca se abría y el cadáver se quedaba allí con su inventario inaccesible. - Sin cambios de comportamiento. Los cadáveres almacenados, sus inventarios y sus reglas de protección se leen como antes.
2026-08-12
GUI v0.12
- Menús extendidos.
extendToPlayerInventoryenopen_guiconvierte las 36 ranuras del propio inventario del jugador en cuatro filas adicionales del menú, lo que da un lienzo de 10 filas. La proyección es solo del lado del cliente: nunca se escribe en el inventario real, y este se restaura cuando se cierra el menú. - Un layout raíz cuyo id termina en
_extendedactiva esa proyección por sí mismo, de modo que un chasis compartido puede incluir una variante normal y otra extendida sin que cada menú repita la opción. DynamicMarkersconvierte los marcadores de contenido repetidos en marcadores indexados (QUEST_SLOT#0,QUEST_SLOT#1, …) antes de analizar, para que las extensiones dejen de mantener cada una una copia privada de esa semántica.- La repetición de ranuras está acotada e informada: las posiciones fuera de la cuadrícula se descartan y se registran con el id del layout y las coordenadas rechazadas. El editor avisa cuando
count/gap/repeatYse definen sin unadirection, y da un error si es desconocida. - Se documentó que
gapes un paso (1 = adyacente) y querepeatYse repite sobre el eje perpendicular adirection. - Corregida la herencia de
mainLayoutId: un valor en blanco en el hijo solía prevalecer sobre el heredado, de modo que una página que heredaba todo su chasis resolvía un layout inexistente y se renderizaba vacía, sin ningún botón que recibiera un clic. - El solapamiento de ranuras tiene un único propietario: cuando dos ranuras reclaman una celda, gana la que tiene comportamiento, tanto al renderizar como al hacer clic, y la colisión se registra una sola vez.
- La validación al arrancar ahora informa solo de lo que realmente falla. Se eliminaron las comprobaciones que señalaban la ausencia de elementos opcionales (
frame.view.unresolved,slot.outOfFrame,layout.unreferenced), porque en una arquitectura de plantillas describen el diseño, no un defecto. Lo que queda nombra una intención escrita que ha fallado: una vista que apunta a un layout inexistente, una ranura que sale del inventario, dos ranuras de la misma naturaleza que colisionan en un layout.
Shops v1.4
- Modo pestaña.
baseMenuIdconvierte una tienda en una pestaña de un menú compartido: su conjunto de layouts y sus vistas se combinan bajo el chasis, conviews,defaultViewIdy un rectángulo de contenido (contentX,contentY,contentColumns,contentRows). Si se deja vacío, una tienda se abre exactamente como antes. - Compatibilidad con chasis extendidos: una tienda abierta dentro de una base extendida ahora obtiene el lienzo de 10 filas.
- Añadidos
defaultNameFormatydefaultLoreFormat. Un objeto que no declara nombre ni lore hereda el formato de la tienda; un objeto que declara los suyos los conserva intactos: el formato de la tienda rellena huecos, nunca sobrescribe la redacción de un autor. - Ambos aceptan los mismos tokens:
{item},{buy},{sell},{stock},{stock_max},{currency}. Una línea de lore que pide un precio no disponible se descarta en lugar de mostrarse vacía. - Añadido
ShopTransactionEvent, que se dispara una vez completada una compra o una venta. Es el punto de enganche de otras extensiones (una retransmisión a Discord, un registro de auditoría) sin que Shops sepa que existen. Se anuncia, nunca es cancelable. - Añadido
notificationWebhookId. Shops no lo resuelve y no sabe qué es un webhook; el id viaja en el evento. Un listener que lanza una excepción se comunica y la transacción se mantiene: nada deshace una compra pagada. - Corregido que un layout vaciado de sus marcadores se descartara del conjunto: una pantalla de tienda compuesta íntegramente por marcadores, o una pestaña todavía vacía, desaparecían en silencio.
Quest Codex v2.9
- La promoción del chasis extendido ahora se transmite por herencia y no mediante un id de layout literal. Un chasis cuya raíz se llamara de cualquier forma distinta de
shell_rootperdía su decoración extendida, y todos los controles anclados en la banda inferior desaparecían al renderizar, y por tanto no se podía hacer clic en ellos. - La extensión se compila con el motor de GUI de la oleada de versiones en lugar de con un JAR antiguo fijado. Estaba congelada en la v0.11 del motor, por lo que todo lo añadido después de esa versión le resultaba invisible.
Discord v0.9
- La extensión ahora es Discord, no Community. El directorio, el paquete y el nombre de la extensión siguen el cambio. Los nombres de las entradas no se tocan, porque las páginas los serializan.
DiscordClientServicesalió de la función de enlace a su propio paquete: la sincronización del chat, la consola y los informes de errores lo usan todos, por lo que nunca perteneció al enlace de cuentas.- Los webhooks son entradas.
webhook_definitiondeclara un destino de Discord una sola vez y se referencia en todas partes. La sincronización del chat, el enlace de cuentas y los informes de errores solían llevar cada uno su propia copia de la URL, el nombre de usuario y el avatar: cambiar de canal significaba editar cada manifiesto, sin nada que garantizara que apuntaban al mismo lugar. WebhookServicees un singleton que cualquier extensión puede inyectar. El cliente HTTP solía construirse a mano en el inicializador y entregarse a cada servicio, de modo que nada del exterior podía enviar un mensaje.- Los informes de errores perdieron su segundo interruptor de activación: un destino vacío es el estado desactivado.
- Migración. Las páginas escritas antes de esta versión se convierten en el primer arranque: una
webhook_definitionpor destino distinto (los manifiestos configurados de forma idéntica comparten una entrada) y los manifiestos se redirigen a ella. Antes se hace una copia de seguridad de cada página reescrita, enbackup/community-webhook-v1/. La conversión se guía por la forma, no por un número de versión, así que ejecutarla dos veces no cambia nada. Un manifiesto que estaba desactivado conserva su URL en un destino desactivado en lugar de perderla. - Anuncios de tienda.
shop_notification_manifestdescribe cómo se lee una transacción de tienda cuando llega a Discord. El destino está deliberadamente ausente de él, porque pertenece a la tienda. Así, una sola presentación sirve a todas las tiendas, mientras cada una sigue publicando en su propio canal. Requiere la extensión Shops pero no depende de ella.
Puzzle v0.1
- Primera versión.
- Nueve tipos de puzzle, cada uno un objetivo de Typewriter con su propia audiencia, progreso y disparadores: empujar bloques, ofrendas en pedestal, secuencias de memoria, órdenes de palancas, colocación de patrones, giros de marcos de objetos, cerraduras de combinación, cuadrículas de láseres y placas de presión cooperativas.
- Todo lo que dibuja un puzzle es del lado del cliente: los bloques, las vistas previas fantasma, los resaltados y los rayos láser se envían al jugador que lo resuelve. Dos jugadores pueden trabajar el mismo tablero sin ver el progreso del otro, y el mundo nunca se modifica.
- Ciclo de vida compartido en cada puzzle:
timeLimit,maxAttempts,cooldownOnFail,resetOnWrong,lifespan, pistas y los disparadoresonStart/onComplete/onFail/onTimeout/onLifespanExpire. isSharedcambia un puzzle de progreso privado a un único tablero en el que avanza todo el grupo a la vez.puzzle_chainejecuta varios puzzles en orden y se dispara cuando se resuelve la secuencia;resetOnFaildecide si un error devuelve al jugador al principio.puzzle_artifactpersiste el estado de los puzzles, de modo que un reinicio a mitad de un intento no borra el progreso.puzzle_solved_factypuzzle_active_factexponen el progreso al resto de tu contenido;puzzle_menulista los puzzles y su estado en el chat.- Compatible con Folia: cada lectura y escritura del mundo se ejecuta en la región propietaria del puzzle.
Corpse v0.1
- Primera versión.
- Los cadáveres se renderizan una vez por espectador, como las visualizaciones de entidades propias del motor, de modo que todos los que están cerca los ven, con animación de modelo y placas de nombre que se actualizan en los motores de BetterModel, BTC Mob NPC y MythicMobs NPC.
- Funciona en Folia: toda la planificación pasa por un planificador compatible con Folia, y las caídas de objetos, las orbes de experiencia y las partículas se ejecutan en la región propietaria del cadáver.
- El inventario que contiene un cadáver sobrevive a un reinicio, a un fallo o a una recarga. Los cadáveres se almacenan en MySQL cuando está disponible y, en caso contrario, en la carpeta del plugin, y se restauran al arrancar.
- Se aplica
onlyOwnerCanLoot, y el saqueo se comprueba con el id de entidad propio del cadáver y no con cualquier clic derecho a menos de cuatro bloques. - Se elige una definición de cadáver por muerte según el mundo y la prioridad, y su duración se resuelve una sola vez, en ese cadáver.
- Los eventos
on_corpse_spawn,on_corpse_lootyon_corpse_expirepasan por la canalización de disparadores del motor y publican el propietario, el botín y la posición del cadáver como contexto. - Se respetan
displayName,showDisplayName,dropOnInteract,renderArmor,playDeathAnimationydeathAnimationName, y la mayoría de los ajustes son valores dinámicos, por lo que pueden controlarse con placeholders y hechos. - Un contorno brillante renderizado en el cliente con un color configurable, y sonidos de cadáver enviados a cada jugador cercano en lugar de a todo el mundo.
- Los hechos
has_corpseycorpse_count, la audienciacorpse_owner_audience,corpse_waypointque muestra la distancia y la dirección hacia el propio cadáver del jugador,corpse_recovery_objective, ycorpse_admin_commandcon los subcomandoslistyclear. - Una ventana de protección del botín, tras la cual el cadáver se abre a todos.
- El menú de botín es un menú de la extensión GUI en lugar de un inventario simple con su propio listener de clics, por lo que hereda el enrutamiento de clics del motor, el historial de menús y la proyección del inventario extendido. Por tanto, la extensión GUI es obligatoria.
Custom Biome v0.5
- Los biomas personalizados existen de inmediato. Una definición se registra en el registro en vivo en cuanto se guarda, en lugar de solo tras reiniciar el servidor. El datapack generado es ahora la capa de persistencia y no el único camino.
- Corregido que el servidor ignorara el datapack generado: su formato de pack estaba fijado a un valor antiguo y se escribía en una carpeta que el servidor nunca lee.
- Corregido que
baseBiomeno tuviera ningún efecto salvo con las llanuras. Ahora los biomas se construyen a partir del bioma base que tiene el servidor y se codifican con su propio codec, de modo que las apariciones de mobs, las características y los carvers se heredan en lugar de perderse. - Corregido que los cambios de bioma abrieran agujeros en el mundo: la actualización enviaba paquetes de descarga de chunks, a los que el servidor nunca seguía con un reenvío. Ahora los clientes reciben una actualización de bioma construida a partir de los datos reales del chunk.
- Corregido que
leave_biome_eventnunca se disparara. Los listeners de entrada y de salida se sobrescribían el estado mutuamente, por lo que el resultado dependía del orden de registro. - Corregido que la pintura escribiera todos los bloques de una columna en lugar de uno por celda de 4x4x4, y que lo hiciera desde el hilo que llamaba. Ahora las escrituras se programan en la región propietaria de cada chunk.
- Un bioma que el servidor se negaría a serializar ahora se rechaza al registrarlo, nombrando el valor que lo causa. Antes se aceptaba y después rompía el inicio de sesión de todos los jugadores.
- Superposiciones de bioma por jugador (
player_biome_overlay_action): muestra a un jugador un bioma distinto sin tocar el mundo ni afectar a nadie más. - Pintura de regiones (
paint_biome_region_action) con instantáneas, yrestore_biome_actionpara devolver una región a su estado. biome_transition_cinematic: cambia el bioma que ve un jugador a lo largo de una cinemática.custom_biome_preset: comparte colores y atributos visuales entre biomas, con sobrescritura por definición.explore_biome_objectiveybiome_discovery_fact: misiones que se completan visitando biomas.- Cada entrada de lectura ganó una opción
source, que permite elegir entre lo que se muestra al jugador y lo que contiene el mundo. - Se eliminaron
/tw biome setcolor, que creaba biomas desechables que nunca se persistían, y el modo de hechoHASH, cuyo valor no era estable entre reinicios. - El JAR de la extensión pasó de 2,6 MB a 230 KB: ya no incluye bibliotecas que el servidor ya proporciona.
Enchantment Creator v0.8
levelModeen una mecánica compararunOnLevelcomo un nivel exacto, un mínimo (AT_LEAST) o un máximo (AT_MOST). Antes solo era posible una coincidencia exacta.eventPhaseejecuta las acciones de una mecánica durante el evento actual de Bukkit, de modo que cancelar el evento o cambiar el daño tenga realmente efecto. Establécelo en false para las interacciones de Typewriter en cola.clientSideEffectspasó a tener en cuenta al cliente, con una acciónclient_particle_effect: el artefacto personalizado de BTC usa el renderizador basado en PacketEvents cuando está disponible, y el artefacto público de Paper una alternativa de Bukkit limitada al jugador.- Las claves de registro ahora se derivan de
id. Elnameanterior se conserva como alias heredado al cargar las páginas y los objetos existentes, de modo que no hay que volver a crear nada. - El artefacto público deliberadamente no lleva ninguna dependencia de BTC-CORE ni de BTC Velocity: se ejecuta en Paper 1.21.x con Java 21, compilado desde JDK 25 con bytecode de Java 21 como destino.
Numerical Storage v0.9
transactionModeen la configuración de transacciones:INTERNALmantiene la ruta de PlaceholderAPI más comando de consola,VAULTpasa directamente por la API de economía de Vault e ignoraamountPlaceholdery los campos de comando.addCommandyremoveCommandestaban documentados al revés.addCommandcompleta un depósito en el almacenamiento y se comprueba antes de la mutación persistente;removeCommandcompleta una retirada.- La persistencia ahora es asíncrona, con bloqueos de mutación por artefacto y una caché de corta duración, de modo que los depósitos simultáneos ya no pueden competir entre sí.
- Los archivos de almacenamiento pasan a la versión 2 del esquema JSON bajo una ruta técnica de artefacto. Un archivo heredado basado en
el antiguo
artifactIdsemántico se guarda en copia de seguridad enbackups/numericalstorage/y se migra en el primer acceso: haz una copia de seguridad del directorioassets/de Typewriter antes de actualizar. artifactIdes un identificador técnico generado: déjalo vacío y Typewriter lo rellena.- Los placeholders reciben un argumento de definición explícito (
%typewriter_ns_balance_bank%), lo que elimina la antigua ambigüedad de la división por guiones bajos cuando el ID de una definición contiene guiones bajos. - Claves opcionales conscientes del perfil cuando la integración con Profiles está instalada.
2026-08-07
Quest Codex v2.8
- Logros reales de Minecraft. La nueva entrada
advancement_definitionescribe logros reales en un datapack que posee la extensión, por lo que aparecen en la pantalla de logros vanilla con su propia pestaña, árbol, marcos y avisos emergentes.parenthace referencia a otra definición, de modo que el árbol se dibuja en el editor de nodos. grant_advancementconcede un logro o lo retira, y recorre la cadena de padres para que un hijo nunca se obtenga bajo un padre no obtenido.autoGranthace que un logro se obtenga en el primer tick del jugador. En una raíz, esto es lo que da existencia a su pestaña antes de haber obtenido nada.- Corregido el orden de las misiones: una misión anidada lee su orden de su propia subcategoría, las misiones sin un orden explícito ya no se agrupan todas juntas y añadir una misión ya no borra el orden que ya tenía.
- Los marcadores de misión están paginados, el modo de ordenación es por jugador y el seguimiento múltiple sobrevive a una reconexión en el orden que eligió el jugador.
GUI v0.11
- Tooltips de objetos, con un interruptor
hideVanillaItemStatsen la entrada de configuración de GUI. - Un layout paginado puede llevar un indicador de página, mediante el nuevo rol
INDICATOR. - Los menús se validan cuando arranca el servidor: una ranura fuera de los límites, una plantilla ausente o un tipo de botón desconocido se nombran en la consola antes de que un jugador llegue a abrir el menú.
<shift:N>se resuelve sin CraftEngine, mediante la fuente Magic Digit incluida.countyrepeatYse documentan como recuentos de repetición de ranuras, no como tamaños de pila.
Shops v1.3
- Una tienda ya no puede dejar a un jugador por debajo de cero. Tres rutas independientes lo permitían.
- Un saldo ilegible ya no se lee como cero, y se analizan los saldos con formato como
12.5k.
2026-08-03
Quest Codex v2.7
- Añadidos modos de visualización de waypoints:
WORLD_DIRECTIONALproyecta los marcadores sobre una esfera alrededor de los ojos del jugador siguiendo la dirección real de su destino,TARGET_ANCHOREDlos coloca sobre el objetivo yADAPTIVEsuaviza la transición entre ambos.HUD_LOCKEDsigue siendo el valor por defecto, de modo que las páginas existentes no cambian. - Añadidos un tamaño aparente constante y un desagrupamiento angular para que varios marcadores sigan siendo legibles cuando sus destinos comparten una línea de visión.
- Añadido el renderizado de varios objetivos en una sola entrada de waypoint, con las nuevas selecciones de objetivo seguido
ALLyONE_PER_QUESTy un límitemaxTargets. - Corregido que los waypoints ignoraran el seguimiento múltiple: los objetivos de las misiones seguidas secundarias nunca se resolvían, de modo que solo la misión principal producía un marcador.
- Añadido
quest_codex_locator_bar, que renderiza los mismos objetivos resueltos como puntos de la barra de localización vanilla en Minecraft 1.21.6+ sin generar ninguna entidad.
2026-08-02
Quest Codex v2.6
- Añadida la recuperación persistente de los diálogos y cinemáticas de Typewriter interrumpidos, incluido el último fotograma de la cinemática. Ahora la recuperación conserva la instantánea capturada cuando Typewriter emite eventos de desmontaje tras la desconexión de un jugador.
- Añadido el seguimiento múltiple persistente de misiones con un menú de misiones seguidas, placeholders dedicados y un banco de pruebas público de waypoint con dos misiones.
- Añadidos waypoints solo de texto en el cliente con texto de icono configurable, visualizaciones de bloque centradas, rotación centrada de la baliza, alineación con el nivel del objetivo, interpolación suave, colocación cerca del objetivo y un cono de visibilidad horizontal configurable.
- Eliminadas las antiguas capas de waypoint de visualización de objeto y de flecha direccional antes de su primer despliegue público.
GUI v0.10
- Añadidos los motores de layout Flex y Composite para la colocación adaptable de ranuras y capas de menú compuestas.
- Añadidas vistas direccionables reutilizables con conjuntos de layouts heredados, vistas por defecto, rutas de navegación, etiquetas de vista e integración opcional con el historial.
- Añadidas la migración de esquema consciente de las vistas y la integración con QuestCodex, además de metadatos de publicación en Maven.
- Corregido que los cambios de vista reconstruyan los menús sin parpadeo de cierre y reapertura, y se hizo que el cierre del inventario fuera compatible con Folia.
Shops v1.2
- Recompilada y validada la Shop Extension pública con OmniGUI v0.10.
- Se conservaron los layouts de tienda dinámicos existentes, el historial de navegación, la gestión del relleno, las reglas de existencias y de límites, y los gestores de botones de tienda personalizados.
- No se necesita ninguna migración desde la Shop Extension v1.1.
MythicMobsNPC Extension v0.4.6
- Corregido que se ignorara un cambio de escala en un modelo que se entrega sin ninguna animación, igual que en la extensión BetterModel.
- Las variantes de mobs vanilla (gato, zorro, lobo, aldeano y similares) se informan una sola vez en la consola en lugar de ignorarse en silencio: pertenecen a la configuración de MythicMobs, que es propietaria de la identidad del mob y las sobrescribiría en cada reaparición.
- Corregido que una sola entrada de datos que fallaba cancelara todas las demás entradas enviadas en el mismo lote, lo que podía dejar a un NPC sin ninguno de sus datos configurados aplicados.
- El efecto de brillo y el equipamiento ahora se aplican sobre el modelo, no solo sobre el mob. El cuerpo del mob está oculto tras el modelo, así que aplicarlos solo al mob no dejaba nada visible.
- Ahora el equipamiento informa en la consola cuando el modelo no tiene hueso de objeto, en lugar de no hacer nada en silencio.
- El fuego se reafirma cada segundo para que ya no se apague por sí solo, y ahora avisa cuando BetterModel oculta el cuerpo sobre el que se dibujan las llamas.
- Corregido que la placa de nombre se entrecortara cuando el NPC camina o sigue una red de caminos: la visualización de texto ahora interpola entre actualizaciones en lugar de teletransportarse a saltos.
BetterModel Extension v1.3
- Corregido que se ignorara la escala del modelo en los modelos que se entregan sin ninguna animación. BetterModel solo recalcula la transformación de un modelo mientras se está ejecutando una animación, por lo que un cambio de escala aplicado en tiempo de ejecución nunca llegaba a un modelo estático. Ahora la extensión fuerza ella misma el recálculo.
- La misma corrección se aplica al desfase del modelo, que pasaba por el mismo camino de código.
- Las entradas de datos de entidad ahora llegan realmente al modelo en lugar de descartarse. Compatibles: efecto de brillo, color del efecto de poción (renderizado como un tinte del objeto), brillo de luz, restricción de billboard, duración de interpolación, traslación, escala 3D, tamaño de caja, equipamiento y en llamas.
- Añadido
bettermodel_bone_appearance, una versión por hueso de los ajustes de brillo, tinte, destello y luminosidad, con el mismo sistema de criterios quebettermodel_bone_visibility. - El equipamiento se asigna a los huesos de objeto de mano y de cabeza de BetterModel. Las ranuras de armadura se informan una sola vez en la consola en lugar de ignorarse en silencio, porque el torso y las piernas de un modelo llevan su propia geometría.
- Una escala 3D que no es uniforme ahora avisa en lugar de usar en silencio un solo eje: BetterModel solo admite una escala uniforme.
- Toda entrada de datos que no tiene sentido en un modelo 3D (poses, variantes de mobs, estado de cría...) ahora se informa una sola vez en la consola en lugar de descartarse en silencio.
- El brillo, el tinte, la luminosidad, el billboard, la traslación y el equipamiento ahora sobreviven a una recarga del resource pack o a una reaparición en lugar de volver al aspecto por defecto del modelo.
- Ahora el equipamiento informa en la consola cuando el modelo no tiene ningún hueso etiquetado
ri,lioph, en lugar de no hacer nada en silencio: ese es el motivo habitual por el que un objeto no aparece. - Ahora el fuego se dibuja sobre la entidad de interacción del NPC y no sobre los huesos del modelo: el cliente escala la llama según la caja de colisión de la entidad, y una entidad de visualización no tiene ninguna, por lo que las llamas se renderizaban con tamaño cero.
Nexo Extension v1.0
- Añadidos hechos para comprobar qué sostiene el jugador, qué lleva en el inventario, a qué mira o sobre qué está de pie.
- Añadidas variables que dan el ID y las propiedades del objeto, bloque y mueble apuntados.
- Añadidas una acción de dar y otra de quitar objetos, ambas basadas en el ID de objeto de Nexo.
- Añadidos eventos de recoger, soltar y consumir objetos.
- Añadidos eventos de interacción y de daño para bloques y muebles personalizados, además de un evento de caída de botín.
- Ahora los eventos pasan sus datos (ID del bloque, posición, objeto en la mano) a lo que se ejecute a continuación, de modo que un diálogo o una acción pueden usarlos directamente.
CraftEngine Extension v1.0
- Ahora los objetivos de misión funcionan. Se pueden asociar a una misión, guardan el progreso y pueden activar una secuencia al completarse.
- Añadidos hechos para los cooldowns, para los objetos sostenidos y transportados, y para el bloque o mueble al que apunta el jugador.
- Añadidas variables que dan IDs, propiedades de objetos y la lista del contenido cargado.
- Añadidas una acción de dar y otra de quitar objetos, ambas basadas en el ID de objeto de CraftEngine.
- Añadidos eventos de recoger, soltar y consumir objetos.
- Añadidos eventos para los intentos de colocación y para golpear muebles.
- Ahora los eventos pasan sus datos a lo que se ejecute a continuación.
ItemsAdder Extension v1.0
- Ahora los eventos de bloques y muebles leen ItemsAdder directamente en lugar de deducirlos de los eventos vanilla, lo que los hace fiables y elimina un breve retraso que podía perder o repetir un disparador.
- Añadidos hechos para los objetos sostenidos y transportados, los usos restantes, la durabilidad personalizada, la visibilidad del HUD y el crecimiento de los cultivos.
- Añadidas variables que dan IDs, propiedades de objetos e imágenes de fuente.
- Añadidas una acción de dar y otra de quitar objetos, ambas basadas en el ID de objeto de ItemsAdder.
- Añadidos eventos de recoger, soltar y consumir objetos.
- Añadidos eventos de interacción, un evento previo a la colocación para muebles y un evento de muerte de entidad personalizada.
- Ahora los eventos pasan sus datos a lo que se ejecute a continuación.
2026-07-26
Quest Codex v2.5
- Añadido el seguimiento múltiple persistente de misiones mediante la entrada
quest_codex_tracking_artifact. - Añadidos el modo de menú de categoría
@trackedy los marcadores dinámicosTRACKED_QUEST_SLOT. - Añadidos
/tw codex trackedy el comando interno de GUIcodex:tracked. - Añadidos placeholders de PlaceholderAPI para el número de misiones seguidas, el límite, la misión principal, las misiones seguidas indexadas, los estados, los objetivos y las prioridades.
- Se documentó la estructura del paquete de páginas públicas: manifiesto principal, artefacto de seguimiento estático, definiciones de misiones y ajustes de GUI.
GUI v0.9
- Añadida la migración automática del esquema de las páginas públicas para el almacenamiento en línea y los campos de paginación heredados.
- Se documentó el esquema compacto
storagePool/storageIdynavigationButtonsusado para reducir los bloqueos de publicación del editor de Typewriter. - Se aclaró el patrón recomendado de menús referenciados para los menús grandes de QuestCodex.