Versiones v1.0.1

Changelog

Registro de cambios entre versiones de EventUI. Cada entrada documenta bugs corregidos, mejoras y nuevas features.

v1.0.1

2026 — En progreso latest
Sistema de Tooltips Avanzados
  • NEW Nuevos tipos de sección de receta: FURNACE_RECIPE, SMITHING_RECIPE, ANVIL_RECIPE, BREWING_RECIPE — cada uno con su textura de interfaz vanilla incluida en el mod
  • NEW CUSTOM_RECIPE — tipo genérico donde el admin define su propia textura y las coordenadas X,Y de cada slot en el YAML, para recetas de mods
  • NEW Soporte para override de textura de frame desde el YAML con section_1_recipe_frame — compatible con resource packs
  • NEW RecipeCache — las recetas se cachean tras la primera búsqueda, eliminando búsquedas O(n) en el RecipeManager cada frame
  • NEW inventory_preview — overlay oscuro en ingredientes que el jugador no tiene en su inventario (opcional, activar con inventory_preview: true)
  • NEW show_tooltip_background — controla si se muestra el cuadro morado/negro del tooltip. Poner en false para mostrar solo la receta sin fondo
  • NEW Cycling de items en todos los tipos de receta — múltiples items separados por coma se rotan automáticamente cada segundo
  • IMPROVED show_grid_frame ahora funciona correctamente en Shaped/Shapeless (mostraba el frame aunque estuviera en false)
  • FIX FURNACE_RECIPE, SMITHING_RECIPE, ANVIL_RECIPE y BREWING_RECIPE no se reconocían como SectionType válidos (el catch del valueOf hacía fallback silencioso a RECIPE)
Sistema de guardado de progreso
  • NEW Guardado inmediato al completar un objetivo, evento, o auto-inicio — ya no hay que esperar al auto-save periódico para eventos importantes
  • NEW Guardado inmediato en cambios de estado desde /ev y desde el bridge
  • IMPROVED Auto-save periódico reducido de 5 minutos a 2 minutos
  • IMPROVED Sistema de throttle/coalescing por jugador — si llegan múltiples solicitudes de guardado juntas, se agrupan en una sola escritura
  • FIX Validación al cargar playerdata: estado inválido → fallback a AVAILABLE, evento inexistente → ignorado con warning, values fuera de rango → clamping
Sistema de mensajería del mod
  • FIX EVENT_RELOAD_NOTIFICATION era sobreescrito silenciosamente por EventViewModel (Map<MessageType, MessageHandler> hacía put() en vez de add()) — la reconstrucción de UI tras /ev reload nunca se ejecutaba
  • IMPROVED MessageHandler cambiado a Map<MessageType, List<MessageHandler>> con CopyOnWriteArrayList — múltiples handlers por tipo de mensaje
  • NEW removeHandler(type, handler) para remover un handler específico sin afectar a los demás (patrón MessageHandler[] handlerRef para auto-remoción)
Caché de UI en el cliente
  • FIX cachedUIMode y cachedScreenId (campos static) sobrevivían entre reconexiones — al reconectar a un servidor con UI distinta, el cliente seguía mostrando la UI anterior
  • FIX Cambiar screenId en config.yml en caliente no actualizaba la UI en el cliente porque el handler de EVENT_RELOAD_NOTIFICATION era sobreescrito (ver fix de MessageHandler arriba)
  • NEW invalidateCache() llamado automáticamente en ClientPlayConnectionEvents.JOIN y DISCONNECT — cada conexión nueva siempre pide el modo de UI fresco
Objetivos y tracking
  • FIX BREW_POTION: el handler de InventoryClickEvent no detectaba pociones completadas cuando el jugador cerraba la GUI antes de que terminara el brewing — migrado a BrewEvent de Bukkit
  • FIX tryAutoStart() tenía la lógica de retorno completamente invertida en las tres ramas — afectaba a TODOS los tipos de objetivo, haciendo que los eventos IN_PROGRESS siempre se saltaran en processAction()
  • FIX /ev abandon conectado al switch de comandos (existía el handler pero nunca se llamaba — el cliente enviaba "abandon_event" sin el event_id)
  • FIX Cliente enviaba action: "abandon_event" sin concatenar el event_id — ahora envía "abandon_event:{eventId}" como esperaba PluginEventBridge
Toolchain y build
  • FIX fabric-loom migrado de 1.8-SNAPSHOT a 1.12.7 (getDependencyProject() removido en Gradle 8.14+)
  • FIX Shadow plugin migrado de com.github.johnrengelman.shadow:8.1.1 a com.gradleup.shadow:9.4.2 (StubbedFileCopyDetails.mode removido en Gradle 8.14)
Renderizado, UI State y Textos
  • NEW ENTITY_RENDER follow_mouse mode — nuevo modo de rotación que hace que las entidades sigan al cursor del mouse de forma suave, similar al inventario del jugador
  • NEW ENTITY_RENDER idle animations — las entidades renderizadas ahora muestran sus animaciones de reposo (idle) automáticamente
  • IMPROVED ENTITY_RENDER rotation modes — el modo "fixed" ahora es un alias válido de "static"
  • FIX ENTITY_RENDER orientation — las entidades ya no se renderizan boca abajo o mirando hacia atrás
  • NEW TEXT line_spacing y paragraph_spacing — control de espaciado entre líneas y párrafos
  • NEW TEXT font_size — control de tamaño de fuente
  • NEW TEXT anchor_offset_x/y — desplazamiento adicional para anclas
  • IMPROVED Text rendering — mejoras en el procesamiento de párrafos y word wrapping con soporte para saltos de línea suaves (\n) y dobles (\n\n)
  • FIX Text breaking — corregido problema donde el texto se rompía después del procesamiento de párrafos
  • NEW visible_if = operator — soporte para operador de igualdad simple (=) además de == en condiciones visible_if
  • NEW UI State persistence — variables de UI establecidas con /ev setuivar ahora persisten al reiniciar el servidor (guardadas en playerstate/{uuid}.yml)
  • NEW Click animations — animaciones de clic para UI elements (punch, shake, bounce, flash)
  • NEW Hover sounds — sonidos de hover para UI elements y skill tree nodes
Sistema de Skill Trees
  • NEW Exclusive branches — sistema de grupos exclusivos y ramas, los jugadores seleccionan una rama por grupo exclusivo
  • NEW Branch selection tooltips — tooltips que muestran información de selección de rama
  • NEW Multi-type point distribution — soporte para point_distribution map con múltiples tipos de puntos
  • NEW Bukkit tag checking — multiplicadores basados en tags de entity, block e item
  • NEW Playtime timer system — sistema de timer de playtime con daily cap
  • NEW Attribute operations add/multiply/add_scalar/add_percent — nuevas operaciones para efectos de atributos
  • NEW New attribute effects — GENERIC_REGENERATION, MOVEMENT_SPEED, ARMOR, ARMOR_TOUGHNESS, KNOCKBACK_RESISTANCE, LUCK
  • NEW PointTypeResolver — mapeo de nombres amigables a IDs internos de tipos de puntos
  • IMPROVED Connection visuals — visuales de conexión configurables con optimizaciones de rendimiento
Hot Reload
  • NEW EventFileWatcher — hot reload automático de eventos usando WatchService
  • IMPROVED UIFileWatcher y SkillTreeFileWatcher — optimizados con WatchService (fallback a polling)
  • NEW Selective reload — solo recarga archivos modificados en lugar de todo el sistema
  • FIX Duplicate reload message — corregido mensaje duplicado en /ev reload
  • FIX Event objectives not reloading — corregido problema donde objetivos no recargaban target_amount en /ev reload