Servidor Paper · requisitos, arquitectura y configuración

INSTALACIÓN & CONFIGURACIÓN

Todo lo necesario para desplegar Protect The Core: qué exige Paper, qué dependencias son opcionales, cómo se compone el plugin, dónde vive cada archivo y qué valores conviene revisar antes de abrir el servidor.

Paper API 26.1.2 Java 25 Una edición: Free o Premium Persistencia SQLite / MySQL

Ficha técnica y requisitos

El proyecto se compila contra Paper 26.1.2 build 74 y Java 25. La versión exacta de tu servidor debe ser compatible con esa API.

ElementoValorNotas
Nombre del pluginProtectTheCoreComando principal /ptc; alias /protectthecore y /ptcmd.
Versión2.0.1-SNAPSHOTLa consola muestra edición, versión y nombre del archivo al arrancar.
PlataformaPaper 26.1.2 o superiorapi-version: '26.1'. No está pensado para Spigot sin Paper API.
Java25maven.compiler.release=25; una JVM anterior no carga las clases.
EdicionesFree y PremiumSe instala una sola. Comparten módulos, comandos y configuración.
JAR FreeProtectTheCore-Free-2.0.1-SNAPSHOT.jarSalida en target/free/.
JAR PremiumProtectTheCore-Premium-2.0.1-SNAPSHOT.jarSalida en target/premium/.
Carpeta de datosplugins/ProtectTheCore/Migra datos de Protect The Core/ y Protect-The-Core/ sin sobrescribir.
AlmacenamientoSQLite (por defecto) o MySQL / MariaDBLos controladores JDBC viajan dentro del JAR.
IdiomaEspañolEl antiguo selector language fue retirado; se usan los catálogos españoles.
# Compilación desde el repositorio (Maven Wrapper incluido)
.\mvnw.cmd clean verify -Pfree
.\mvnw.cmd clean verify -Ppremium

# Instalación: detén el servidor, copia UN solo JAR y arranca
plugins/
└─ ProtectTheCore-Premium-2.0.1-SNAPSHOT.jar
No instales ambas ediciones. Dos JAR del mismo plugin registran comandos, tareas y listeners duplicados. Conserva una copia de seguridad y reemplaza el artefacto anterior en cada actualización.

Dependencias: obligatorias y opcionales

plugin.yml declara softdepend: [Multiverse-Core, LuckPerms, Vault, PlaceholderAPI]. Ninguna de esas cuatro es obligatoria; Paper y Java sí.

DependenciaTipoVersión de compilaciónPara qué sirve
PaperObligatoriaAPI 26.1.2 build 74Plataforma del plugin: eventos, scoreboard, mundos, tareas y entidades.
JavaObligatoria25Runtime y compilación. Paper 26.1 también requiere una JVM moderna.
Multiverse-CoreOpcional5.8.1Administración de mundos ya cargados. PTC guarda, analiza y restaura con Bukkit/Paper y su propio generador de mundo; no lo necesita para esos flujos.
LuckPermsOpcional, recomendadaIntegración por API de permisosGrupos, prefijos, pesos y nodos ptc.*. Sin LuckPerms, PTC usa Vault/PAPI como respaldo.
VaultOpcionalIntegración de chat/permisosRespaldo para prefijos y servicio de chat cuando no hay una fuente más específica.
PlaceholderAPIOpcional, recomendada2.11.6Placeholders externos en header/footer, nametags y scoreboard; PTC registra su expansión %ptc_*%.
SQLite JDBCIncluida3.49.1.0Controlador embebido para el almacenamiento local por defecto.
MySQL Connector/JIncluida9.3.0Controlador embebido para MySQL y MariaDB (protocolo compatible).
TebexExterna, opcionalOnline Commands / RCONEntrega Coins con /ptcdeliver; no es un plugin de Bukkit.

Orden de carga

Si usas Multiverse, debe cargar sus mundos antes de que PTC los resuelva. Las operaciones de bloques siguen siendo de PTC y se ejecutan por Bukkit/Paper; Multiverse no aplica la copia ni la restauración.

Prefijos visibles

PTC lee primero PlaceholderAPI, después LuckPerms y por último Vault. PTC nunca muestra sus nombres de nivel VIP: el rango visible es el prefijo externo del servidor.

Sin proveedor de permisos

Los OP conservan ptc.* y ven la etiqueta DevOP. La consola indica al arrancar qué proveedor se detectó. Para producción se recomienda LuckPerms.

Conflictos posibles

Plugins que sustituyan scoreboards, equipos, chat, nametags, mundos o eventos de bloques pueden competir por los mismos recursos. PTC reaplica la visibilidad de equipos cada tick, pero no puede impedir que otro plugin reemplace el scoreboard completo.

Cómo está conformado el plugin

Un solo JAR, cuatro módulos jugables y servicios compartidos. Los módulos no son plugins independientes: comparten economía, base de datos y ciclo de vida.

Capa / móduloPaquete principalResponsabilidad
PTC Gamesmodules.games.arenaArenas, equipos, núcleos, regiones, recursos regenerables, tienda, kits, encantamientos, granjas y tareas de partida.
PTC-Clanesmodules.clansClanes, roles, invitaciones, solicitudes, banco, chat y límite de miembros.
PCW-Coremodules.pcwGuerras de 2-15 clanes, salas, alineaciones, desafíos, apariciones y resultado.
Parkour-Coremodules.parkourCursos por mapa, placas de inicio/meta, checkpoints, cronómetro, récords, hologramas y premios.
Servicios compartidosmodules.shared.economy, databaseUna única economía de Coins y persistencia común para saldos, niveles, clanes, PCW y Parkour.
PresentaciónpresentationTAB, scoreboard, belowname, anuncios por contexto, lobby central y cosméticos.
Edición de mapaseditor, resourcesVarita, selección de límites, análisis de bloques, .ptcmap v3, guardado, restauración y reparación por lotes.
Juego y protecciónlisteners, combat, victory, stats, levelsProtección de bloques, PvP, núcleos, muertes, recompensas, estadísticas, XP y condiciones de victoria.
Economía y tiendashop, kits, enchant, special, tebexCatálogo, compras, kits, encantamientos, objetos especiales y entregas externas.
Integraciones y redintegration, networkPlaceholderAPI, LuckPerms, Vault, Multiverse y mensajería BungeeCord para modo multiserver.

Un ciclo de vida

Todo se inicia y se detiene con ProtectTheCore.java. No hay módulos que se carguen por separado ni JAR adicionales para PCW, Parkour o clanes.

Una economía

PTC Games, PCW, Parkour, misiones y niveles usan la misma instancia de Coins y la misma base de datos. Un saldo o multiplicador vale en todos los modos.

Configuración modular

Los recursos se empaquetan en modules/<módulo>/ y al instalar se separan en carpetas por módulo dentro de plugins/ProtectTheCore/.

Migraciones no destructivas

Los datos de carpetas heredadas y los formatos antiguos se copian o migran sin sobrescribir archivos existentes. Nunca borres una carpeta antigua hasta confirmar la migración.

Free y Premium: diferencias reales

La base jugable es la misma. Premium añade presentación y cosméticos, y usa lotes de procesamiento mayores por defecto.

FunciónFreePremium
PTC Games, clanes, PCW y ParkourSíSí
TAB, belowname, scoreboard y anuncios por contextoSíSí
Tienda, kits, encantamientos, mesas y granjasSíSí
Copias .ptcmap v3 y reparaciónSíSí
Cosméticos del lobby (10 estelas)NoSí
Bienvenida pública y mensajes de conexión/salidaNoSí
Anuncio promocional de FreeSí, configurableNo
Lote de análisis por defecto4096 bloques/tick8192 bloques/tick
Lote de guardado/restauración por defecto4096 / 81928192 / 8192
Misma configuración: ambos JAR leen los mismos YAML y aceptan las mismas claves. Las funciones Premium se activan por edición, no por un permiso; si cambias de edición, conserva la carpeta de datos y haz copia previa.

Estructura modular de datos

Los archivos se separan por módulo. Esta es la distribución real que debes respaldar y editar.

plugins/ProtectTheCore/
├─ config.yml                 configuración global
├─ mensajes_es.yml            mensajes, prefijo, ayuda y anuncios
├─ chat_es.yml                formato del chat
├─ lobby-progress.yml         misiones, recompensas y rachas del lobby
├─ PTC-Games/
│  ├─ arenas.yml              arenas, equipos, núcleos, regiones, mesas
│  ├─ shop.yml                catálogo de la tienda
│  ├─ kits.yml                kits iniciales
│  ├─ enchants.yml            niveles y efectos de encantamiento
│  ├─ special_items.yml       objetos especiales de la tienda
│  ├─ levels.yml              progresión de nivel
│  ├─ tab_es.yml              lista TAB y belowname
│  └─ scoreboard_es.yml       sidebar por contexto
├─ PTC-Clanes/
│  ├─ config.yml
│  └─ mensajes_es.yml
├─ PCW-Core/
│  ├─ config.yml
│  └─ mensajes_es.yml
├─ Parkour-Core/
│  ├─ config.yml
│  └─ mensajes_es.yml
├─ Shared/
│  └─ ptc_database.db         base SQLite cuando storage.type = SQLITE
└─ Mapas/
   └─ <arena>.ptcmap         copia base de cada arena

Archivos de raíz

config.yml, mensajes_es.yml y chat_es.yml viven en la raíz. No los muevas: el plugin los busca ahí en cada arranque y recarga.

Archivos de PTC-Games

Arenas, tienda, kits, encantamientos, objetos especiales, niveles, TAB y scoreboard están bajo PTC-Games/. Las rutas antiguas en la raíz se migran si el archivo de destino no existe.

Mundos dedicados

PTC puede preparar un mundo ptc_<arena> para aislar la copia. La copia .ptcmap contiene solo el cubo seleccionado, nunca la carpeta completa del mundo.

Base de datos

Con SQLite, el archivo vive en Shared/ptc_database.db. Con MySQL/MariaDB, los datos están en el servidor externo configurado en storage.*.

Idioma y compatibilidad: la interfaz está fijada en español. Los antiguos messages.yml, chat.yml, tab.yml y scoreboard.yml se conservan y se migran como personalizaciones cuando el archivo español de destino aún no existía.

Configuración general comentada

Valores iniciales de config.yml. Edita el archivo generado en tu servidor y aplica los cambios con /ptc reload cuando la función lo permita.

Red y valores por defecto

ClaveInicialDescripción
network.enabledfalseActiva el modo multiserver con BungeeCord. En un servidor único déjalo en false.
network.rolestandalonestandalone, game o lobby. Define el papel de esta instancia en la red.
network.server-idlocal-ptcIdentificador único de la instancia; no lo repitas entre servidores.
network.proxy-channelBungeeCordCanal de mensajería del proxy.
network.lobby-serverLobbyServidor al que se envía al jugador al terminar o salir en modo red.
defaults.min-players / max-players16 / 32Valores de referencia para nuevas arenas; /ptc create calcula mínimos y máximos según los equipos.
defaults.max-per-team8Jugadores recomendados por equipo; el máximo global de la arena se puede ampliar en /ptc arena config.
defaults.core-health10Vidas iniciales del núcleo de diamante.
defaults.resource-regeneration-seconds900Regeneración de minerales y madera: 15 minutos. Se puede ajustar por arena con /ptc setregen.
defaults.countdown-seconds60Cuenta atrás inicial de la arena.
defaults.allow-late-join / allow-spectatorsfalse / trueEntrada tardía y espectadores; la entrada tardía también requiere el permiso ptc.perk.late-join.

Almacenamiento y economía

ClaveInicialDescripción
storage.typeSQLITESQLITE, MYSQL o MARIADB. MariaDB usa el protocolo de MySQL.
storage.host / port / database127.0.0.1 / 3306 / ptcConexión MySQL/MariaDB. No publiques estos datos ni la contraseña.
storage.username / passwordptc_user / CHANGE_MECrea un usuario exclusivo con permisos solo sobre la base de PTC.
storage.save-interval-seconds30Autoguardado periódico de Coins, niveles y estadísticas.
economy.currency-name / currency-symbolCoins / ⛃Nombre y símbolo visibles en menús y mensajes.
economy.kill-reward / core-hit-reward / core-final-bonus1 / 1 / 10Recompensas base por baja, golpe efectivo y destrucción final.
economy.win-reward / mvp-reward10 / 3Victoria PTC y MVP.
economy.solo-survivor-win-reward3Victoria reducida si queda un solo jugador activo.
economy.kill-streak-reward-every / kill-streak-reward5 / 5Cada 5 asesinatos seguidos se pagan 5 Coins adicionales.
economy.max-multiplier250.0Tope del multiplicador temporal de /ptc multicoins.
drops.arena-pvp-cleanup-seconds180Tiempo antes de eliminar objetos caídos por muertes PvP dentro de una arena.

Arena, análisis y restauración

ClaveInicialDescripción
arena-map.blocks-per-tick4096Lote del analizador en Free.
arena-map.premium-blocks-per-tick8192Lote del analizador en Premium; se acota a 8192.
arena-map.max-millis-per-tick8Presupuesto por tick para guardar y reconstruir (1-50 ms).
arena-map.analysis-max-millis-per-tick8Presupuesto del análisis; las secciones vacías se omiten.
arena-map.selection-full-heightfalseSi es true, la arena usa toda la altura del mundo.
arena-map.selection-vertical-padding24Bloques arriba y abajo añadidos a los límites de la selección.
arena-map.core-protection-radius / height8 / 5Zona automática protegida alrededor de cada núcleo.
arena-map.team-spawn-protection-radius / height2 / 2Protección del spawn de equipo contra roturas, colocación y explosiones.
arena-map.regenerable-materials / wood-materialsvacíoMateriales extra regenerables; los minerales y todos los troncos se detectan automáticamente.
arena-restoration.blocks-per-tick8192Límite de restauración/reparación en Free.
arena-restoration.premium-blocks-per-tick8192Límite de restauración/reparación en Premium; acotado a 8192.
arena-restoration.save-blocks-per-tick / premium-save-…4096 / 8192Límite del guardado de copias por tick.
arena-restoration.verify-after-restorefalseSegunda pasada completa opcional; cada bloque e inventario ya se verifica al aplicarse.
arena-restoration.waiting-room-delay-seconds / waiting-room-lobby-delay-seconds3 / 3Traslado a la sala de espera y luego al lobby al terminar.
arena-restoration.start-delay-seconds2Pausa tras evacuar el mapa antes de restaurar por lotes.

Granjas, lobby y anuncios

ClaveInicialDescripción
farms.min-amount / max-amount5 / 10Rango aceptado por /ptc setfarmspawn.
farms.check-interval-seconds5Revisión y reposición solo de los animales que faltan.
farms.summary-message-cooldown-seconds30Evita repetir el aviso de reposición si matan animales seguidos.
farms.adoption-radius-blocks16Radio para adoptar animales ya presentes en la granja.
lobby.worldvacíoMundo del lobby central; sin él no se emiten estelas ni se entregan objetos de lobby.
lobby.items.*ver archivoSelector, cosméticos, recompensas, clanes y accesos de modo: material, ranura y activación.
lobby.cosmetics.enabledtrueDesactiva todo el módulo de cosméticos sin borrar desbloqueos.
lobby.cosmetics.interval-ticks / particles4 / 6Ritmo y cantidad de partículas de la estela.
lobby.rewards.daily-login-coins5Coins de la recompensa diaria.
lobby.missions.*3/5, 1/8, 1/10Objetivo y premio de misiones de bajas, núcleos y victorias.
announcements.enabledtrueActiva la rotación de anuncios.
announcements.interval-seconds300Ritmo global de respaldo.
announcements.intervals.<contexto>300Ritmo propio de general, lobby, waiting, ptc, pcw y parkour; mínimo 60 y máximo 86400.
announcements.use-prefixfalseSi es true, añade el prefijo PTC al anuncio.
announcements.include-general-with-contextfalseEvita duplicar el anuncio general cuando el contexto tiene el suyo.

Tebex

ClaveInicialDescripción
tebex.max-coins-per-delivery10000Máximo por entrega; protección anti-fraude.
tebex.min-coins-per-delivery1Mínimo válido por entrega.
tebex.rate-limit-count / rate-limit-window-hours5 / 1Máximo de entregas por jugador dentro de la ventana indicada.
# Ejemplo de entrega Tebex por RCON / Online Commands:
/ptcdeliver {player} {transaction} coins_{amount} {amount}

# El comando requiere ptc.admin y usa la ventana anti-fraude de config.yml.
# Para jugadores desconectados, activa Offline Commands en Tebex.
No publiques credenciales: configura usuario y contraseña de base de datos fuera del sitio web y restringe los permisos del archivo. CHANGE_ME no es una contraseña de producción. Usa RCON solo en una red de confianza y nunca compartas capturas con la clave.

Lobby, bienvenida y anuncios

El lobby central es el punto de entrada; la sala de espera y los lobbies de Parkour son ubicaciones independientes.

lobby:
  items:
    selector: {enabled: true, material: COMPASS, slot: 0}
    cosmetics: {enabled: true, material: TOTEM_OF_UNDYING, slot: 2}
    rewards: {enabled: true, material: WRITTEN_BOOK, slot: 4}
    clans: {enabled: true, material: FIREWORK_ROCKET, slot: 8}
    mode-ptc: {enabled: true, material: IRON_SWORD, slot: 11}
    mode-pcw: {enabled: true, material: SHIELD, slot: 13}
    mode-parkour: {enabled: true, material: RABBIT_FOOT, slot: 15}
  cosmetics:
    enabled: true
    interval-ticks: 4
    particles: 6
    list:
      heart:
        material: POPPY
        particle: HEART
        effect: aura
        permission: ptc.cosmetic.heart
        price: 6500
      flame:
        material: FIRE_CHARGE
        particle: FLAME
        effect: fountain
        permission: ptc.cosmetic.flame
        price: 7000
      # soul (spiral, 8000), note (wave, 8500), happy_villager (orbit, 7500),
      # enchant (halo, 9000), portal (vortex, 10000), cherry (twirl, 11000),
      # snow (burst, 12000) y totem (nova, 15000): diez precios distintos.

Añade una clave nueva bajo list y el menú del lobby crea la entrada con su permiso, efecto y precio; no hace falta recompilar. Un effect desconocido usa aura. El permiso y la compra son alternativas: con el nodo se equipa gratis; sin él se compra una vez con Coins y queda desbloqueado en la cuenta.

Rangos de tienda externos

PTC expone nodos de permiso; la venta, cobro y duración dependen de LuckPerms y de la tienda que administre el servidor.

Se recomienda crear exactamente seis grupos en tu plugin de permisos, uno por nivel ptc.rank.vip-iron … ptc.rank.vip-amethyst, cada uno con su prefijo. Ejecuta /ptc rangos para ver la guía en el servidor y consulta la página de rangos. Ninguno viene activado como paquete de pago: configura precios, expiración, impuestos y términos por separado. Los nodos de cliente no deben incluir permisos administrativos.

Perfiles staff: ptc.rank.owner incluye ptc.arena.delete; ptc.rank.admin administra pero no elimina; ptc.rank.moderator repara y controla eventos; ptc.rank.helper observa y usa el chat de staff. Consulta Rangos staff.

Archivos, recarga y migraciones

Las funciones principales tienen archivos dedicados; PTC no reescribe tus YAML al cargar ni al recargar.

PTC Games

arenas.yml, shop.yml, kits.yml, enchants.yml, special_items.yml, levels.yml, tab_es.yml y scoreboard_es.yml dentro de PTC-Games/.

Clanes, PCW y Parkour

Sus archivos de configuración y mensajes se guardan en PTC-Clanes/, PCW-Core/ y Parkour-Core/ dentro de la carpeta de datos del plugin.

PCW: límites y arena

PCW-Core/config.yml controla máximos de clanes/jugadores, partidas simultáneas, expiración de salas, fuego amigo, objetos iniciales y recompensa. Configura los spawns por arena con slots numerados de 1 a 15.

Parkour: cursos y recompensas

Parkour-Core/config.yml guarda cursos, mapas, puntos, lobby, premio de completado, cooldown, timeout, distancia de caída y XP por checkpoint. Los récords usan la persistencia compartida.

Datos compartidos

Coins, niveles, estadísticas y clanes se comparten entre modos. Haz una copia de la base de datos antes de migrar o actualizar.

Recarga

/ptc reload recarga configuraciones; también existen recargas específicas de tienda, kits, encantamientos, PCW y Parkour. Los cambios estructurales de una arena requieren guardar la copia.

Origen antiguoDestino actualComportamiento
plugins/Protect The Core/ y plugins/Protect-The-Core/plugins/ProtectTheCore/Copia no destructiva; no sobrescribe archivos existentes.
messages.yml, chat.yml, tab.yml, scoreboard.ymlArchivos _es.ymlSe migran como personalización solo si el destino aún no existía; se conserva una copia.
arenas.yml, shop.yml, kits.yml, enchants.ymlPTC-Games/Se mueven/copian al módulo de juegos en el primer arranque.
Copias .ptcmap v2Formato v3Se siguen leyendo; al volver a guardar se actualizan solas.
language en config.ymlRetiradoSe elimina la clave al cargar; los archivos antiguos no se borran.
Invariante del proyecto: guardar un archivo y ejecutar /ptc reload muestra exactamente lo guardado. Si falta una clave, el valor empaquetado se usa solo en memoria; las migraciones de versión pueden escribir una marca una vez en el arranque, nunca en cada recarga.

Recomendaciones de despliegue

Medidas concretas para evitar pérdida de datos y problemas de rendimiento.

Backups recuperables

Antes de cada actualización o edición de mapa, copia plugins/ProtectTheCore/, Mapas/, los mundos ptc_<arena> y la base de datos. Verifica que la copia se pueda restaurar, no solo que exista.

Pruebas en staging

Usa la misma versión de Paper y los mismos plugins. Prueba una partida completa, restauración, permisos, economías y TAB con clientes reales antes de producción.

Una edición y un JAR

Reemplaza el JAR anterior; no dejes copias con otro nombre en plugins/. Los artefactos intermedios de Maven no se instalan.

Ajuste de rendimiento

Si hay picos al analizar o restaurar, reduce arena-map.analysis-max-millis-per-tick, arena-map.max-millis-per-tick o los lotes. Más bloques por tick acelera, pero aumenta la carga.

Base de datos

SQLite para un servidor único; MySQL/MariaDB para una red. Usa un usuario exclusivo, contraseña fuerte, backups programados y nunca publiques credenciales.

Permisos mínimos

No entregues nodos administrativos a rangos de pago. Revisa que los grupos VIP solo hereden beneficios de juego y que ptc.arena.delete quede en el Dueño.

Mapas y copias

Guarda la copia base después de cada cambio estructural. repair solo repara desde una copia válida; no sustituye una copia ausente ni un mapa dañado.

Multiverse opcional

No instales Multiverse solo por PTC. Si ya lo usas, deja que cargue los mundos antes; PTC no delega la copia ni la restauración de bloques en él.

Actualización segura

Las carpetas con datos persistentes deben respaldarse antes de reemplazar el plugin.

  1. Detén el servidor de forma limpia y copia plugins/ProtectTheCore/, los mapas y la base de datos.
  2. Verifica que no haya dos ediciones del plugin en plugins/; instala solo Free o Premium.
  3. Inicia en staging y revisa logs de carga, migración, YAML, TAB y conexión. Conserva la configuración personalizada.
  4. Prueba saldo y multiplicadores por separado: abona y retira Coins, y luego verifica el factor y expiración de multicoins.
  5. Prueba modalidades, arenas, restauración, permisos y economía antes de actualizar el servidor de producción.
  6. Si una arena no está disponible, lee el motivo exacto y ejecuta /ptc validate; no borres archivos para “empezar de cero” sin backup.
Credenciales: no pegues contraseñas ni datos de conexión en un sitio web, capturas públicas o reportes compartidos. El soporte no necesita tu contraseña de MySQL.