Base de Datos y Persistencia
PlayerFurnaces ha sido diseñado para garantizar cero pérdida de ítems, prevenir duplicaciones y preservar intactos los datos y metadatos NBT/PDC a través de reinicios del servidor y desconexiones de jugadores.
🗄️ Motores de Base de Datos Soportados
El motor de almacenamiento se configura en la sección database de config.yml:
database: # Opciones disponibles: SQLITE, H2 type: SQLITE file: furnaces.db1. SQLite (type: SQLITE)
- Recomendado para: Servidores pequeños o medianos, modalidades survival clásicas o entornos de prueba locales.
- Almacenamiento: Archivo local único en
plugins/PlayerFurnaces/furnaces.db. - Ventajas: No requiere configuración externa. Ligero, fiable y fácil de respaldar mediante copia directa del archivo
.db.
2. Motor de Base de Datos H2 (type: H2)
- Recomendado para: Servidores con alto tráfico y cientos de hornos cocinando simultáneamente.
- Almacenamiento: Base de datos relacional embebida con tablas indexadas.
- Ventajas: Mayor rendimiento en escritura concurrente y menor latencia bajo operaciones simultáneas en segundo plano.
⚡ Pool de Conexiones (HikariCP)
Toda la comunicación con la base de datos se canaliza a través de HikariCP, un pool JDBC de alto rendimiento.
- Operaciones Asíncronas: Las tareas de guardado de estados, persistencia de ítems y carga de perfiles se ejecutan en hilos de trabajo independientes (
CompletableFuture). - Cero Impacto en TPS: El hilo principal del servidor de Minecraft no sufre bloqueos ni caídas de TPS durante el guardado intensivo.
📦 Serialización Binaria NBT (byte[] BLOB)
Muchos plugins convierten los ítems en cadenas de texto YAML o JSON, lo que con frecuencia descarta etiquetas NBT avanzadas, corrompe caracteres o pierde metadatos. PlayerFurnaces utiliza arreglos de bytes binarios nativos de Bukkit:
+-------------------------------------------------------------+| CANAL DE PERSISTENCIA BINARIA DE ÍTEMS |+-------------------------------------------------------------+
1. ITEMSTACK EN EL JUEGO └── Contiene lore, encantamientos, CustomModelData, PDC │ ▼ 2. CODIFICACIÓN BINARIA NATIVA DE BUKKIT └── Serializado directamente a un BLOB comprimido (byte[]) │ ▼ 3. POOL ASÍNCRONO HIKARICP └── Enviado a los hilos de trabajo de SQLite/H2 │ ▼ 4. ALMACENAMIENTO SQL PERSISTENTE └── Guardado en la tabla 'player_furnaces' de forma atómica+-------------------------------------------------------------+Garantías Fundamentales:
- Preservación Total de Metadatos: Todos los valores de
CustomModelData, descripciones personalizadas, nombres con formato RGB/HEX, encantamientos, durabilidad y etiquetasPersistentDataContainer(PDC) de plugins como Craftorithm, ExecutableItems, Oraxen e ItemsAdder permanecen intactos. - Seguridad Transaccional Antiduplicaciones: Las interacciones de shift-click y movimientos de cursor se gestionan de forma atómica. El plugin bloquea la recolección por doble clic y el intercambio rápido de teclas numéricas de la barra de acceso rápido para impedir inyecciones ilegales de ítems en ranuras protegidas.
- Sincronización Fuera de Línea mediante Delta-Time: Aunque el servidor se apague durante días, al reconectar se calcula la diferencia de tiempo transcurrido y se actualizan los ítems fundidos con precisión milimétrica sin perder combustible.