1.0.0-BETA
Compatibility
Required content
Changes
[1.0.0] — 2026-04-16
Initial release. Server-side Fabric 1.21.1 quest system for Cobblemon, designed from the official Cobblemon Quest System concept document. Zero party/social/multiplayer features by design — those will arrive alongside the future party system.
Added
Core mechanics
/quests— double-chest GUI showing active daily + weekly + elite weekly quests with rarity-colored names, per-quest progress bars, reward previews, and reset-timer indicator.- Quest definitions are one HOCON file per quest in
config/cobblemonquests/quests/. First boot seeds the folder with 10 sample quests covering all 5 categories (catching, battling, training, exploration, activities) and all 4 rarities (common, rare, epic, legendary). Admins can ship community quest packs as a single directory drop. - Pool-based random assignment: on reset, 3–5 daily quests and 3–5 weekly quests are picked per player, weighted by rarity and spread across categories so no reset ever stacks identical quest types.
- Server-wide fixed reset: configurable timezone + hour; all players' dailies reset at the same moment. Offline players auto-catch up on next join.
- Reroll system:
/quests reroll <slot>or the GUI's reroll button. First reroll per UTC-day is free; subsequent cost configurable (Stars, PokéDollars, or either). Rate-limited to 5 attempts/minute.
Rewards
Atomic multi-reward grant with rollback-aware failure handling. Supported types:
- PokéDollars — via Impactor primary currency
- Stars — mod-managed per-player balance, persisted in player data
- Item — any Minecraft/Cobblemon item id; configurable overflow behavior (drop / enderchest / refuse)
- Crate keys — configurable crate-plugin command template (ExcellentCrates / CMI / etc.)
- Commands — arbitrary console commands with
{player}substitution
Advanced quest types
- Elite weekly — one extra-difficult weekly quest with significantly better rewards, displayed in a dedicated GUI slot with glow.
- Hidden / secret quests — invisible until triggers match (catch count threshold, species catch, dimension enter). Discovery fires a MiniMessage notification and adds the quest to the player's hidden tab. Optionally repeatable.
- Bonus objectives — each quest may declare one optional bonus with its own progress bar and independent reward bundle.
Streaks & milestones
- Daily streak — completing all assigned dailies before reset increments streak; missing a day resets it. Configurable rewards at day 3, 7, 14, 30 (and any other day you define).
- Milestones — total quests completed unlocks one-time rewards at configurable thresholds (default: 50, 100, 250, 500, 1000).
Admin tools
/quests adminGUI with quest library browser, pool composition view, reroll price display, and one-click reload./quests admin reload— hot-reload config + quest definitions. Players keep in-flight quest progress: each active quest snapshots its definition at assignment time, so config edits never retroactively change a payout./quests admin give <player> <quest>— inject a quest for testing./quests admin complete <player> <quest>— force-complete a quest and grant its rewards./quests admin reset <player>/resetweek <player>— bump a player to a fresh assignment without waiting for the scheduler.
Progress tracking
Subscribes to Cobblemon events:
POKEMON_CAPTURED— catches with filters (species, types, shiny, legendary, biome, dimension, level)BATTLE_VICTORY— NPC-only (PvP is excluded from v1.0 — will return with the party-system update)LEVEL_UP_EVENT— level-up objectives +gain_levelscountEVOLUTION_COMPLETEEXPERIENCE_CANDY_USE_POSTTHROWN_POKEBALL_HIT- Fabric server tick — biome / dimension transition tracking at 1 Hz
Security
Lifted the defensive patterns from PokeBuilder:
- Permission re-check on every action — a demotion takes effect immediately even mid-session.
- Rate limiter — per-bucket sliding-window caps on reroll and admin commands.
- Audit log —
logs/cobblemonquests-audit.logrecords every quest assignment, completion, reward grant, reroll, admin action, hidden discovery, and milestone crossing with an 8-char base36 transaction id. - Snapshot at assignment — config edits don't double-pay an in-flight quest.
- Reward command execution runs as console with placeholder substitution only — no user input ever reaches the shell.
- Bypass permissions (
cobblemonquests.bypass.*) are explicit-only viahasExplicit—/opdoes NOT grant them.
Permissions
| Node | Default | Purpose |
|---|---|---|
cobblemonquests.true |
OP 1 | Use /quests |
cobblemonquests.reroll |
OP 1 | Use /quests reroll |
cobblemonquests.bypass.reroll-cost |
false | Free rerolls always |
cobblemonquests.bypass.rate-limit |
false | Skip rate limits |
cobblemonquests.admin |
OP 3 | Open /quests admin |
cobblemonquests.admin.reload |
OP 3 | Reload config |
cobblemonquests.admin.give |
OP 3 | Give a quest |
cobblemonquests.admin.complete |
OP 3 | Force-complete |
cobblemonquests.admin.reset |
OP 3 | Reset state |
Configuration
config/cobblemonquests/config.conf is a HOCON file with knobs for
schedule, pool weights, reroll cost/currency, streak/milestone
rewards, integrations, security, and GUI theming. Each quest is its
own file under config/cobblemonquests/quests/. MiniMessage is
supported everywhere player-facing.
i18n
English bundled. Drop config/cobblemonquests/lang/<locale>.json to
localize without rebuilding. Resolution order: config dir → bundled
resource → bundled en_us fallback.
Requirements
- Minecraft 1.21.1
- Fabric Loader ≥ 0.16.0
- Fabric API
- Cobblemon ≥ 1.7.0 (hard — the mod has no purpose without it)
- Impactor ≥ 5.3.0 (soft — without it, PokéDollar rewards are skipped with a warning; Stars, items, crate keys, commands still grant)
- Java 21
Bundled in the jar: Fabric Permissions API, SpongePowered Configurate HOCON, Typesafe Config.
LuckPerms is optional — falls back cleanly when absent.
Coexists with PokeBuilder and StaffChat on the same server with no class conflicts or shared mutable state.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:4ShL0DGz:vEaiOI2S"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:4ShL0DGz:vEaiOI2S"
}
