Sistema de quests modular y escalable para servidores de Minecraft Java Edition (Paper / Purpur 1.20.5+), diseñado desde cero para networks multi-servidor y administración profesional.
- Arquitectura desacoplada: motor basado en triggers genéricos. Los listeners de Bukkit y de plugins externos solo traducen eventos; el core no conoce a Bukkit directamente.
- Storage dual: soporte nativo para MySQL/MariaDB (con HikariCP) y SQLite. Switch en una línea de config.
- Sync cross-server opcional vía Redis pub/sub para networks multi-instancia.
- Editor in-game completo: crea y modifica quests desde una GUI sin tocar YAMLs. Stages, objetivos, recompensas y condiciones — todo editable visualmente.
- HUD lateral en tiempo real: cada jugador ve sus quests activas y el progreso de cada objetivo.
- Notificación de completado: título grande en pantalla + sonido. Editable por quest desde la GUI admin.
- Integraciones oficiales:
- MythicMobs 5.x: kill, damage, spawn, interact, loot — todos los eventos cubiertos.
- Citizens 2.x: objetivos por click en NPC, búsqueda por ID o nombre.
- Vault: recompensas de dinero.
- PlaceholderAPI y WorldGuard: preparado para integraciones futuras.
- 15 tipos de objetivos y 8 tipos de recompensas disponibles de fábrica, todos extensibles.
- Categorías, stages, chains, daily, weekly, repeatable, cooldowns: el modelo de quests cubre prácticamente cualquier caso.
- GUI para jugadores con navegación completa: categorías, daily/weekly, quests activas, paginación, indicadores de progreso.
- API pública estable para que otros plugins reporten triggers custom.
v1.2.0 — Editor in-game completo, integración Citizens, HUD lateral, notificación de completado, mejoras de navegación.
Consulta CHANGELOG.md para el historial completo.
| Componente | Versión |
|---|---|
| Servidor | PaperMC 1.20.5+ o Purpur 1.20.5+ |
| Java | 21 LTS |
| Base de datos | MySQL 5.7+ / MariaDB 10.3+ / SQLite (incluido) |
| Redis (opcional) | 6.0+ |
| MythicMobs (opcional) | 5.x |
| Citizens (opcional) | 2.x |
| Vault (opcional) | cualquier versión moderna |
- Descarga el
.jardesde la sección Releases o compílalo con Gradle. - Copia
QuestCore-X.X.X-all.jara la carpetaplugins/del servidor. - Inicia el servidor para que genere la configuración.
- Configura el storage en
plugins/QuestCore/config.yml. Por defecto usa SQLite (sin requisitos adicionales). - Reinicia el servidor.
- Verifica con
/pluginsque QuestCore aparezca en verde.
git clone https://github.com/TU_USUARIO/QuestCore.git
cd QuestCore
./gradlew shadowJarEl .jar final aparece en build/libs/QuestCore-X.X.X-all.jar.
| Comando | Función | Permiso |
|---|---|---|
/quests |
Abre la GUI principal de quests | questcore.use |
/quests start <id> |
Inicia una quest específica | questcore.use |
/quests abandon <id> |
Abandona una quest activa | questcore.use |
/quests hud |
Activa/desactiva el HUD lateral | questcore.use |
/quests reload |
Recarga config y quests | questcore.admin |
/qcadmin |
Abre el editor in-game de quests | questcore.admin |
src/main/java/com/questcore/
├── api/ Interfaces públicas para integraciones externas
├── core/ Plugin main, registry, trigger bus, service
├── storage/ MySQL + SQLite + HikariCP
├── cache/ Cache Caffeine de progreso por jugador
├── sync/ Redis pub/sub para cross-server
├── network/ Identificación de nodo
├── listeners/ Bridges Bukkit → TriggerBus
├── quests/ Modelos Quest, Stage, Category, loader, daily mgr
├── objectives/ Interface + 15 implementaciones
├── rewards/ Interface + 8 implementaciones
├── conditions/ Interface + implementaciones (world, permission)
├── gui/ GUI de jugador (categorías, daily, activas)
├── editor/ Editor in-game admin (drafts + GUIs anidadas)
├── hud/ Scoreboard sidebar con quests activas
├── events/ Eventos custom Bukkit
├── integrations/ MythicMobs + Citizens hooks
├── commands/ /quests + /qcadmin
└── util/ Adventure helpers, ItemBuilder, ResourceUpdater, CompletionNotifier
quests:
boss_lich:
display: "El Lich Resurge"
lore:
- "<gray>Detén su despertar antes que sea tarde."
category: bosses
type: WEEKLY
auto-claim: true
completion-title: "<rainbow><b>VICTORIA ÉPICA!</b>"
completion-subtitle: "<gold>Derrotaste al Lich"
stages:
main:
display: "Mata al Lich"
objectives:
kill:
type: mythic_kill
mob_id: LichBoss
min_level: 50
required: 1
worlds: [dungeon_world]
rewards:
- type: mythic_item
item_id: ExcaliburMythic
amount: 1
- type: money
amount: 5000
conditions:
- type: permission
permission: vip.dungeonimport com.questcore.api.NetworkQuestsAPI;
import com.questcore.api.QuestService;
QuestService quests = NetworkQuestsAPI.getService();
quests.pushCustomTrigger(player.getUniqueId(), "dungeon_completed",
Map.of("dungeon_id", "lich_castle", "difficulty", "hard"));Eso dispara cualquier quest cuyo objetivo sea type: custom, key: "dungeon_completed".
Este proyecto está bajo licencia MIT. Consulta LICENSE para los detalles.
Pull requests bienvenidos. Para cambios mayores, abre primero un issue describiendo qué quieres cambiar.