Palworld-style base management for Cobblemon — assign jobs, watch Pokemon work, build the ultimate base.
✨ Overview
Cobblebase transforms the Pasture Block into a living, breathing Pokemon base. Every Pokemon species has hand-crafted job skills and proficiency levels — not based on type, but on identity. A Charizard fills lava cauldrons and guards your base. An Alakazam mentors your entire team. A Mew recruits legendaries.
Species tab — edit any species' skill set, search the full registry, sort by Pokedex number / A-Z / Z-A, filtered to mons your server actually has loaded
Jobs tab — per-job cooldown, search radius, and enable/disable. Compact category sidebar with hover tooltips for every job
Loot tab — edit any bundled loot table live. Per-job sidebar with rarity tabs (Common / Uncommon / Rare / Ultra Rare), item icon preview, autocomplete suggestions for item ids and item tags, bulk add via #namespace:tag (e.g. #c:ores, #minecraft:logs), on/off toggle for default items, save / reset
Wiki tab — quick links to docs, the species database, the datapack generator, and the Discord
All edits persist in the world save and broadcast live to other players — no restart needed.
🎵 Immersion
🚶 Idle wandering (15 block radius)
🌙 Working mons sleep at night and wake up at sunrise to resume their job
🔇 Mute button + cry cooldown (60s per Pokemon)
🔄 Stuck detection + escape from solid blocks (clipping recovery)
🍃 Leaves escape — Pokemon drop to ground from tree canopies
🎨 Supported Fakemon Packs
Built-in skill assignments for 6 Fakemon packs (371 species):
🐾 Lively Mons (59)
🔥 Alatias AFP (87)
⚡ Laser's Pack (53)
🎭 Wilbayan's Fakemons (37)
👶 Baby Legends (22) — baby forms of legendaries, inherit their evolution target's skills with prof -1
👽 Extra Paradox Mons (27) — paradox alternates with ultra-rare-tier curated skills
Not using one of these? Use /cobblebase admin to assign skills manually — or build a datapack with the generator.
## Cobblebase 2.0.1 – Cobblemon 1.8 Compatibility Hotfix
### 🐛 Fixed
- Server crash on startup with **Cobblemon 1.8.0** (`NoSuchMethodError: SpawnDetail.getBucket()`). Cobblemon 1.8 changed its spawn bucket API, which broke Cobblebase's spawn data loading.
### 🔧 Changed
- Cobblebase now requires **Cobblemon 1.8.0 or newer**.
### ⚠️ Still on Cobblemon 1.7.x?
Keep using **Cobblebase 2.0.0**. This update only works with Cobblemon 1.8+.
### ❤️ Thanks
Big thanks to **Yuri-Almir-Pinto** for contributing the fix!
---
**Requirements:** Minecraft 1.21.1 · Cobblemon 1.8.0+ · Cloth Config · Fabric Language Kotlin (Fabric) / Kotlin for Forge (NeoForge)
## Cobblebase 2.0.1 – Cobblemon 1.8 Compatibility Hotfix
### 🐛 Fixed
- Server crash on startup with **Cobblemon 1.8.0** (`NoSuchMethodError: SpawnDetail.getBucket()`). Cobblemon 1.8 changed its spawn bucket API, which broke Cobblebase's spawn data loading.
### 🔧 Changed
- Cobblebase now requires **Cobblemon 1.8.0 or newer**.
### ⚠️ Still on Cobblemon 1.7.x?
Keep using **Cobblebase 2.0.0**. This update only works with Cobblemon 1.8+.
### ❤️ Thanks
Big thanks to **Yuri-Almir-Pinto** for contributing the fix!
---
**Requirements:** Minecraft 1.21.1 · Cobblemon 1.8.0+ · Cloth Config · Fabric Language Kotlin (Fabric) / Kotlin for Forge (NeoForge)
# Cobblebase v2.0
A full UI overhaul, the long-awaited per-pasture settings, and an end-to-end
NeoForge port. Everything since 1.5 has been consolidated into one release
to mark the shift from "growing helper mod" to "feature-complete platform."
---
## Per-Pasture Settings & Base Settings Modal
The biggest single addition. Each pasture owner now controls their own
working radius and downward-scan reach inside admin-defined caps, plus a
new access mode that gates who else can interact with their pasture's UI.
- **Base Settings button** — bottom-right of every Cobblebase screen. Opens
a modal popup with two sliders (Pasture Range, Below-Pasture Reach) plus
an access pill that cycles through 🔒 Private / 👁 View-Only / 🔓 Public.
- **Per-pasture state** persisted in `<world>/cobblebase_pasture_settings.json`.
Re-clamped automatically when the admin tightens the caps.
- **Owner gate** — only the pasture's recorded Cobblemon `ownerId` (or an
OP) can mutate settings. Server-side `BaseManager.canEditPasture` revalidates
every C2S packet, so a tampered client can't write.
- **Admin caps split** — the single "Pasture Range" / "Below-Pasture Reach"
sliders are now MIN + MAX pairs. Owners pick any value in `[min, max]`;
legacy single-value behaviour preserved by defaulting overrides to MAX.
- Every active block-scanning job (Harvester, Gatherer, Builder, Supplier,
Cauldron-Fill, Extinguisher, FurnaceFuel, Fishing, Irrigator, Healer,
Guard, Mining, EggHatcher, GenericLoot, Craftsman) reads the per-pasture
value, not just the admin max. Auras / passive buffs stay on their own
per-skill JSON radius (balance-tuned).
## Show-Radius Wireframe — Now Server-Broadcast
`RadiusVisible` is the new server-side set of pastures whose wireframe is
currently shown. Toggling the Show-Radius button sends a C2S packet; the
server validates ownership and broadcasts the new set to every connected
player. Result: when a pasture owner enables their radius box, every
nearby player sees it simultaneously instead of just themselves. In-memory
only — cleared on server restart, since wireframes are diagnostic, not
world state.
## Harvester Downward Reach
- Previously the harvest scan only checked Y at the pasture level and
above (`for (y in 0..radius)`), which hid apricorns and berries on
cliff-edge or stair-garden trees that grow a few blocks below the
pasture block.
- The Y loop is now asymmetric: full `radius` upward (tall berry bushes,
hanging apricorns), but only `belowPastureReach` downward — admin- and
owner-configurable, default 6. Enough for stairs and small cliffs;
nowhere near deep enough to drag mons into caves under the base.
- Same buffer applies to every block-scanning executor's Y loop.
## Pasture Range = Real Cap For Every Active Job
The admin's Pasture Range slider is now the hard cap for everything an
active job does — scan range AND idle wander AND safety-teleport floor.
Auras / passive buffs are intentionally exempt so balance-tuned effects
keep their JSON-defined reach. The Show-Radius wireframe is now the
literal truth of where work happens, not an approximation.
## Pasture-Tab Redesign
The Pokemon → Pasture sub-tab was rebuilt around three goals: see more
rows without scrolling, kill the "ragged silhouette" from
variable-width chips, and bring the active-skill stand-out front and centre.
- **Hero active chip** — the assigned skill renders larger and tinted by
its job category; available chips render muted so the eye knows where
to look.
- **Uniform chip height** between active and available (no more
bulging-row silhouette). Differentiation by colour, not size.
- **Row 18 px** so 10+ rows fit on screen without scrolling.
- **Sprites slightly bigger, names slightly smaller**; row layout brings
every column on the same vertical centre line.
- **New Relax column** between Pokemon and Skills (icon-only zZz button).
- **Auto-Assign Best button** — Pasture sub-tab only, single click
assigns the highest-prof skill per Pokemon.
## Skill Chips Polish
Every chip in the Skills view got rebuilt:
- **Alphabetical sort** (sortedBy name.lowercase) — the previous prof-DESC
order was confusing for users with mixed teams.
- **Watermark-large job icon** at the chip's left edge, vertically centred.
- **2-second hover tooltip** with the skill's description.
- **Long-name auto-shrink** — chips with > 11-char names scale the text
down so it never marquees.
- **Drop-shadow on prof stars** so they remain readable against any chip
background colour.
- **Uniform width** (60 px) — no more dynamic 42–64 px range that made
the right edge of the row look ragged.
- **Job icons revamped** for semantic match — Healer → Totem of Undying,
Pharmacist → Potion, Friend Recruiter → Name Tag, Speed Boost → Feather,
Haste Boost → Golden Pickaxe, Jump Boost → Slime Block, Aura Boost → Beacon.
## Bottom Bar + Close Button + Footer
- **Top-right X close button** on every Cobblebase + Admin screen.
- **Persistent bottom bar** (Discord, Mute, Radius, Admin, Base Settings)
across every tab — no more re-clicking through tabs to reach the radius
toggle.
- **`BOTTOM_BAR_H = 14`** (was 20). Sub-panels' 18-px dead zone above the
bottom bar is gone.
- **Bottom bar uniform height** across all tabs.
- **Radius toggle no longer closes the GUI** on click — flip ON/OFF
without the PC GUI snapping shut every time.
## NeoForge Parity Port
Cobblebase 2.0 ships in full feature parity on NeoForge. Every Fabric
panel, packet codec, mixin equivalent, and renderer has a NeoForge
counterpart wired through the same common code path. NeoForge users get
the same Pasture redesign, Base Settings modal, per-pasture overrides,
admin GUI, and Workshop / Hatchery panels.
## Admin GUI
- **Server Settings tab** — real slider with default-value tick + ↻ reset
for every numeric setting. Min/max sliders for Pasture Range and
Below-Pasture Reach. Working-cap slider (max simultaneously working
Pokemon per pasture; 0 = unlimited).
- **Job-disabled hides its tab** — admin disables a job, the corresponding
player tab disappears from the user GUI entirely.
- **Admin → Jobs → Craftsman → Recipes** tab — enable/disable individual
vanilla + mod recipes per Craftsman.
## Hatchery + Workshop
- **HatcheryPanel** now uses UiTokens for every padding and font scale (3
scales instead of 6).
- **Idle-state message** — when no eggs are in the box, the Active Hatchers
row says "X is ready, drop egg" instead of the misleading
"assign the egg hatcher" hint.
- **Egg-orphan periodic sweep** every cleanup interval — floating egg
`ItemDisplay` entities surviving across restarts are now purged
whenever the world re-loads, matching by display custom-name **or** by
held ItemStack type. No more pile-up of un-pickupable eggs in the
overworld.
- **Egg ItemDisplay hold position** — eggs render in front of the
hatcher's body, not floating in its head.
- **WorkshopPanel** also tokenised; Workshop sub-tabs renamed and laid
out to match the rest of the GUI.
## Logs Tab
- **Match by pastureId** instead of geometric-nearest pasture — fixes the
cross-pasture log-leak where two pastures showed identical entries.
- **Per-job colour palette** (`JobColors` is the single source of truth).
Each job's chip BG, Buffs name colour, and Logs row tint share the
same hue.
- **Full-size Pokemon sprite** (`renderIconByName` 16 px) in 14-px rows —
Pokemon are recognisable at a glance instead of a tiny 11-px badge.
- **Drop zebra striping** — uniform base + per-action tint stacked on
top so two consecutive same-action rows render identical (no zebra
+ tint combinatorial confusion).
## Buffs Tab
- **Passive dedupe** — only the highest-prof mon per buff actually
applies its effect (no stack-on-stack waste).
- **Per-buff name colour** matches the effect it applies — Speed reads
as sky-blue, Strength as fire-red, Aura as gold.
- **Meaningful effect descriptions** for every job. Diving, Builder, and
Craftsman previously fell through to "Working" — now show
"Diving for underwater treasure", "Building structures from chest
materials", "Crafting items from chest materials" etc.
## Pasture Mob Movement
- **Idle wander = admin Pasture Range** — mons no longer cluster near
the centre when the pasture is large.
- **Safety-teleport** has an admin-radius floor so mons can be pulled
back from anywhere the wander could reach them.
- **Tether resize REMOVED** — the previous attempt to shrink Cobblemon's
64-block tether to the admin radius caused mons to despawn into the
PC the moment they were outside the new (smaller) box. Cobblemon's
default 64-block tether is honoured.
## UiTokens Design System
New `UiTokens.kt` centralises sizes that used to be scattered across
every panel. Three text scales replace the previous six; row heights,
button heights, cell paddings, and bottom-bar geometry all flow from
one file.
## Bug Fixes Worth Calling Out
- **Loot jobs broken since 1.5.5-beta.1** — 60s stale-sweep wiped active
cooldowns of 12 executors because the sweep used the cooldown timer
itself as the "last seen" heartbeat. Executors now use a dedicated
`lastScanTime` heartbeat updated every tick.
- **Flying mons stuck in trees / fences** — `escapeLeaves` now clears
brain memory every tick (not only on the 1s sweep), has a wider
scan radius, and re-registers leaf blocks dynamically when modded
packs add new ones.
- **Cross-pasture log mix-up** — Logs tab now keys by pasture ID, not
by geometric distance.
- **Cobblebase main button collides with other mods' buttons** — fixed
by making it position-configurable (four corners of the PC GUI) and
by enforcing click priority via a new mixin.
- **Sleeping mons still moving** — added a state lock from
`PokemonEntity.tick` head so we don't fight Cobblemon's sleep state.
- **Admin sliders snapped to wrong default on reset** — every slider's
↻ now snaps to the documented default value with a yellow tick on
the track marking it.
- **Egg Hatcher effect description showed "Working"** — now displays the
prof-keyed speed multiplier ("Incubating Cobbreeding eggs · 3× speed").
## Quieter Logs By Default
`Cobblebase.LOGGER.info` calls have been removed or downgraded to debug.
Server consoles at default log level no longer get the per-scan
Harvester radius readouts or the orphan-egg-purge tally. Errors and
warnings stay informational.
# Cobblebase v2.0
A full UI overhaul, the long-awaited per-pasture settings, and an end-to-end
NeoForge port. Everything since 1.5 has been consolidated into one release
to mark the shift from "growing helper mod" to "feature-complete platform."
---
## Per-Pasture Settings & Base Settings Modal
The biggest single addition. Each pasture owner now controls their own
working radius and downward-scan reach inside admin-defined caps, plus a
new access mode that gates who else can interact with their pasture's UI.
- **Base Settings button** — bottom-right of every Cobblebase screen. Opens
a modal popup with two sliders (Pasture Range, Below-Pasture Reach) plus
an access pill that cycles through 🔒 Private / 👁 View-Only / 🔓 Public.
- **Per-pasture state** persisted in `<world>/cobblebase_pasture_settings.json`.
Re-clamped automatically when the admin tightens the caps.
- **Owner gate** — only the pasture's recorded Cobblemon `ownerId` (or an
OP) can mutate settings. Server-side `BaseManager.canEditPasture` revalidates
every C2S packet, so a tampered client can't write.
- **Admin caps split** — the single "Pasture Range" / "Below-Pasture Reach"
sliders are now MIN + MAX pairs. Owners pick any value in `[min, max]`;
legacy single-value behaviour preserved by defaulting overrides to MAX.
- Every active block-scanning job (Harvester, Gatherer, Builder, Supplier,
Cauldron-Fill, Extinguisher, FurnaceFuel, Fishing, Irrigator, Healer,
Guard, Mining, EggHatcher, GenericLoot, Craftsman) reads the per-pasture
value, not just the admin max. Auras / passive buffs stay on their own
per-skill JSON radius (balance-tuned).
## Show-Radius Wireframe — Now Server-Broadcast
`RadiusVisible` is the new server-side set of pastures whose wireframe is
currently shown. Toggling the Show-Radius button sends a C2S packet; the
server validates ownership and broadcasts the new set to every connected
player. Result: when a pasture owner enables their radius box, every
nearby player sees it simultaneously instead of just themselves. In-memory
only — cleared on server restart, since wireframes are diagnostic, not
world state.
## Harvester Downward Reach
- Previously the harvest scan only checked Y at the pasture level and
above (`for (y in 0..radius)`), which hid apricorns and berries on
cliff-edge or stair-garden trees that grow a few blocks below the
pasture block.
- The Y loop is now asymmetric: full `radius` upward (tall berry bushes,
hanging apricorns), but only `belowPastureReach` downward — admin- and
owner-configurable, default 6. Enough for stairs and small cliffs;
nowhere near deep enough to drag mons into caves under the base.
- Same buffer applies to every block-scanning executor's Y loop.
## Pasture Range = Real Cap For Every Active Job
The admin's Pasture Range slider is now the hard cap for everything an
active job does — scan range AND idle wander AND safety-teleport floor.
Auras / passive buffs are intentionally exempt so balance-tuned effects
keep their JSON-defined reach. The Show-Radius wireframe is now the
literal truth of where work happens, not an approximation.
## Pasture-Tab Redesign
The Pokemon → Pasture sub-tab was rebuilt around three goals: see more
rows without scrolling, kill the "ragged silhouette" from
variable-width chips, and bring the active-skill stand-out front and centre.
- **Hero active chip** — the assigned skill renders larger and tinted by
its job category; available chips render muted so the eye knows where
to look.
- **Uniform chip height** between active and available (no more
bulging-row silhouette). Differentiation by colour, not size.
- **Row 18 px** so 10+ rows fit on screen without scrolling.
- **Sprites slightly bigger, names slightly smaller**; row layout brings
every column on the same vertical centre line.
- **New Relax column** between Pokemon and Skills (icon-only zZz button).
- **Auto-Assign Best button** — Pasture sub-tab only, single click
assigns the highest-prof skill per Pokemon.
## Skill Chips Polish
Every chip in the Skills view got rebuilt:
- **Alphabetical sort** (sortedBy name.lowercase) — the previous prof-DESC
order was confusing for users with mixed teams.
- **Watermark-large job icon** at the chip's left edge, vertically centred.
- **2-second hover tooltip** with the skill's description.
- **Long-name auto-shrink** — chips with > 11-char names scale the text
down so it never marquees.
- **Drop-shadow on prof stars** so they remain readable against any chip
background colour.
- **Uniform width** (60 px) — no more dynamic 42–64 px range that made
the right edge of the row look ragged.
- **Job icons revamped** for semantic match — Healer → Totem of Undying,
Pharmacist → Potion, Friend Recruiter → Name Tag, Speed Boost → Feather,
Haste Boost → Golden Pickaxe, Jump Boost → Slime Block, Aura Boost → Beacon.
## Bottom Bar + Close Button + Footer
- **Top-right X close button** on every Cobblebase + Admin screen.
- **Persistent bottom bar** (Discord, Mute, Radius, Admin, Base Settings)
across every tab — no more re-clicking through tabs to reach the radius
toggle.
- **`BOTTOM_BAR_H = 14`** (was 20). Sub-panels' 18-px dead zone above the
bottom bar is gone.
- **Bottom bar uniform height** across all tabs.
- **Radius toggle no longer closes the GUI** on click — flip ON/OFF
without the PC GUI snapping shut every time.
## NeoForge Parity Port
Cobblebase 2.0 ships in full feature parity on NeoForge. Every Fabric
panel, packet codec, mixin equivalent, and renderer has a NeoForge
counterpart wired through the same common code path. NeoForge users get
the same Pasture redesign, Base Settings modal, per-pasture overrides,
admin GUI, and Workshop / Hatchery panels.
## Admin GUI
- **Server Settings tab** — real slider with default-value tick + ↻ reset
for every numeric setting. Min/max sliders for Pasture Range and
Below-Pasture Reach. Working-cap slider (max simultaneously working
Pokemon per pasture; 0 = unlimited).
- **Job-disabled hides its tab** — admin disables a job, the corresponding
player tab disappears from the user GUI entirely.
- **Admin → Jobs → Craftsman → Recipes** tab — enable/disable individual
vanilla + mod recipes per Craftsman.
## Hatchery + Workshop
- **HatcheryPanel** now uses UiTokens for every padding and font scale (3
scales instead of 6).
- **Idle-state message** — when no eggs are in the box, the Active Hatchers
row says "X is ready, drop egg" instead of the misleading
"assign the egg hatcher" hint.
- **Egg-orphan periodic sweep** every cleanup interval — floating egg
`ItemDisplay` entities surviving across restarts are now purged
whenever the world re-loads, matching by display custom-name **or** by
held ItemStack type. No more pile-up of un-pickupable eggs in the
overworld.
- **Egg ItemDisplay hold position** — eggs render in front of the
hatcher's body, not floating in its head.
- **WorkshopPanel** also tokenised; Workshop sub-tabs renamed and laid
out to match the rest of the GUI.
## Logs Tab
- **Match by pastureId** instead of geometric-nearest pasture — fixes the
cross-pasture log-leak where two pastures showed identical entries.
- **Per-job colour palette** (`JobColors` is the single source of truth).
Each job's chip BG, Buffs name colour, and Logs row tint share the
same hue.
- **Full-size Pokemon sprite** (`renderIconByName` 16 px) in 14-px rows —
Pokemon are recognisable at a glance instead of a tiny 11-px badge.
- **Drop zebra striping** — uniform base + per-action tint stacked on
top so two consecutive same-action rows render identical (no zebra
+ tint combinatorial confusion).
## Buffs Tab
- **Passive dedupe** — only the highest-prof mon per buff actually
applies its effect (no stack-on-stack waste).
- **Per-buff name colour** matches the effect it applies — Speed reads
as sky-blue, Strength as fire-red, Aura as gold.
- **Meaningful effect descriptions** for every job. Diving, Builder, and
Craftsman previously fell through to "Working" — now show
"Diving for underwater treasure", "Building structures from chest
materials", "Crafting items from chest materials" etc.
## Pasture Mob Movement
- **Idle wander = admin Pasture Range** — mons no longer cluster near
the centre when the pasture is large.
- **Safety-teleport** has an admin-radius floor so mons can be pulled
back from anywhere the wander could reach them.
- **Tether resize REMOVED** — the previous attempt to shrink Cobblemon's
64-block tether to the admin radius caused mons to despawn into the
PC the moment they were outside the new (smaller) box. Cobblemon's
default 64-block tether is honoured.
## UiTokens Design System
New `UiTokens.kt` centralises sizes that used to be scattered across
every panel. Three text scales replace the previous six; row heights,
button heights, cell paddings, and bottom-bar geometry all flow from
one file.
## Bug Fixes Worth Calling Out
- **Loot jobs broken since 1.5.5-beta.1** — 60s stale-sweep wiped active
cooldowns of 12 executors because the sweep used the cooldown timer
itself as the "last seen" heartbeat. Executors now use a dedicated
`lastScanTime` heartbeat updated every tick.
- **Flying mons stuck in trees / fences** — `escapeLeaves` now clears
brain memory every tick (not only on the 1s sweep), has a wider
scan radius, and re-registers leaf blocks dynamically when modded
packs add new ones.
- **Cross-pasture log mix-up** — Logs tab now keys by pasture ID, not
by geometric distance.
- **Cobblebase main button collides with other mods' buttons** — fixed
by making it position-configurable (four corners of the PC GUI) and
by enforcing click priority via a new mixin.
- **Sleeping mons still moving** — added a state lock from
`PokemonEntity.tick` head so we don't fight Cobblemon's sleep state.
- **Admin sliders snapped to wrong default on reset** — every slider's
↻ now snaps to the documented default value with a yellow tick on
the track marking it.
- **Egg Hatcher effect description showed "Working"** — now displays the
prof-keyed speed multiplier ("Incubating Cobbreeding eggs · 3× speed").
## Quieter Logs By Default
`Cobblebase.LOGGER.info` calls have been removed or downgraded to debug.
Server consoles at default log level no longer get the per-scan
Harvester radius readouts or the orphan-egg-purge tally. Errors and
warnings stay informational.
## Cobblebase v1.5.4
### New Features
#### Producer Job — Admin GUI Configuration
- **New Producer section in Species Tab** — Configure what any Pokemon produces directly in the admin GUI. Appears for every species at the top of the skill editor.
- **Item ID with autocomplete** — Type an item ID and get suggestions from Minecraft's item registry. Dropdown auto-closes when a valid item is entered.
- **Item icon preview** — Shows a live preview of the configured item next to the input field.
- **Per-species cooldown** — Set a custom cooldown per species (30s–3600s in 30s steps). No longer tied to the global Producer cooldown in the Jobs tab.
- **Enable/Disable toggle** — Pause production without losing the item configuration. Toggle back on anytime.
- **Auto-assign Producer skill** — When you configure an item and save, the Producer skill is automatically assigned if it wasn't already.
- **Buffs tab shows produced item** — Instead of "Producing species-specific items", the Buffs tab now shows the actual item name and count (e.g. "Producing White Wool x1 · every 300s").
#### Diving Job
- **25 non-diving Pokemon removed** — Water/Flying types (Pelipper, Wingull, etc.), surface dwellers (Surskit, Araquanid), and land-based water types (Suicune, Slowpoke, etc.) no longer have Diving. 168 species remain.
- **Full loot table documentation** — New diving detail page on the wiki with all 18 items, drop chances, and proficiency scaling.
### Changes
#### Friend Recruiter
- **Prof 5 no longer summons legendaries** — Prof 5 now works like all other proficiency levels: recruits same-type Pokemon with better rarity odds. Higher proficiency = more Rare/Ultra Rare spawns, fewer Common.
- **Cooldown scales normally** — Prof 5 cooldown now scales with proficiency like every other level, instead of the old fixed 30-minute cooldown.
### Compatibility
- **Chiselmon PC mod** — Cobblebase is now fully compatible with Chiselmon. The Cobblebase button in the Pasture GUI no longer causes crashes when Chiselmon is installed.
### Bug Fixes
- **Producer instant drop exploit** — Producer now waits the full cooldown before the first drop. Switching jobs to skip cooldown no longer works.
- **GenericLootExecutor search radius** — Diving, Archeology, and Pickup jobs now use the admin-configured search radius instead of a hardcoded value of 15.
- **Producer item namespace** — Items like "lead" in the hardcoded map now display correctly as "minecraft:lead" in the admin GUI instead of showing "Unknown item ID".
- **Producer cooldown mismatch** — Buffs tab now uses the per-species cooldown instead of always using the global default, fixing the mismatch between Species tab and Buffs tab values.
- **Water-type Pokemon tethering** — Water-type Pokemon are no longer teleported out of water by the pasture tether system. They now swim freely and are placed directly in nearby water when on land.
- **Deploy target** — Build system now deploys to the correct modpack folder (Cobbleverse 1.7.31).
### Wiki / Species Database
- Diving skill added to 168 species in the online Species Database.
- FAQ updated: Diving reintroduced in v1.8 (no longer marked as "removed").
- Full diving loot table page added to wiki with all items, weights, and proficiency scaling.
- Diving added to sidebar navigation on all job detail pages.
## Cobblebase v1.5.4
### New Features
#### Producer Job — Admin GUI Configuration
- **New Producer section in Species Tab** — Configure what any Pokemon produces directly in the admin GUI. Appears for every species at the top of the skill editor.
- **Item ID with autocomplete** — Type an item ID and get suggestions from Minecraft's item registry. Dropdown auto-closes when a valid item is entered.
- **Item icon preview** — Shows a live preview of the configured item next to the input field.
- **Per-species cooldown** — Set a custom cooldown per species (30s–3600s in 30s steps). No longer tied to the global Producer cooldown in the Jobs tab.
- **Enable/Disable toggle** — Pause production without losing the item configuration. Toggle back on anytime.
- **Auto-assign Producer skill** — When you configure an item and save, the Producer skill is automatically assigned if it wasn't already.
- **Buffs tab shows produced item** — Instead of "Producing species-specific items", the Buffs tab now shows the actual item name and count (e.g. "Producing White Wool x1 · every 300s").
#### Diving Job
- **25 non-diving Pokemon removed** — Water/Flying types (Pelipper, Wingull, etc.), surface dwellers (Surskit, Araquanid), and land-based water types (Suicune, Slowpoke, etc.) no longer have Diving. 168 species remain.
- **Full loot table documentation** — New diving detail page on the wiki with all 18 items, drop chances, and proficiency scaling.
### Changes
#### Friend Recruiter
- **Prof 5 no longer summons legendaries** — Prof 5 now works like all other proficiency levels: recruits same-type Pokemon with better rarity odds. Higher proficiency = more Rare/Ultra Rare spawns, fewer Common.
- **Cooldown scales normally** — Prof 5 cooldown now scales with proficiency like every other level, instead of the old fixed 30-minute cooldown.
### Compatibility
- **Chiselmon PC mod** — Cobblebase is now fully compatible with Chiselmon. The Cobblebase button in the Pasture GUI no longer causes crashes when Chiselmon is installed.
### Bug Fixes
- **Producer instant drop exploit** — Producer now waits the full cooldown before the first drop. Switching jobs to skip cooldown no longer works.
- **GenericLootExecutor search radius** — Diving, Archeology, and Pickup jobs now use the admin-configured search radius instead of a hardcoded value of 15.
- **Producer item namespace** — Items like "lead" in the hardcoded map now display correctly as "minecraft:lead" in the admin GUI instead of showing "Unknown item ID".
- **Producer cooldown mismatch** — Buffs tab now uses the per-species cooldown instead of always using the global default, fixing the mismatch between Species tab and Buffs tab values.
- **Water-type Pokemon tethering** — Water-type Pokemon are no longer teleported out of water by the pasture tether system. They now swim freely and are placed directly in nearby water when on land.
- **Deploy target** — Build system now deploys to the correct modpack folder (Cobbleverse 1.7.31).
### Wiki / Species Database
- Diving skill added to 168 species in the online Species Database.
- FAQ updated: Diving reintroduced in v1.8 (no longer marked as "removed").
- Full diving loot table page added to wiki with all items, weights, and proficiency scaling.
- Diving added to sidebar navigation on all job detail pages.
# Cobblebase v1.5.3
Bug fixes, Legendary Recruiter rework, and species skill rebalancing.
---
## Legendary Recruiter Rework
### Prof 5 Recruiter now summons Legendaries
Pokemon with Proficiency 5 Friend Recruiter will now summon random Legendary, Mythical, or Ultra Beast Pokemon instead of regular type-matched species. The legendary summon ignores the recruiter's type — any legendary can appear.
**Cooldown:** 30 minutes (fixed, not reduced by proficiency). This is intentionally high to prevent legendary spam.
**Notification:** Players see a special "summoned a Legendary" message with a level-up sound effect.
### Species rebalancing
- **Prof 5 Recruiter restricted to 6 species only:** Mew, Celebi, Jirachi, Azelf, Mesprit, Uxie
- **18 pseudo-legendaries downgraded** from Prof 5 to Prof 4: Dragonite, Garchomp, Tyranitar, Metagross, Salamence, Hydreigon, Goodra, Kommo-o, Dragapult, Baxcalibur, and others
- **Arceus:** Friend Recruiter removed entirely
- **Celebi, Azelf, Mesprit, Uxie:** Friend Recruiter added at Prof 5 (new)
---
## Bug Fixes
### LeafMixin console spam
The `[LeafMixin] Pokemon vs leaf at ... isPastureLeaf=...` message was still logging at INFO level despite the 1.5.2 debug log cleanup. This was in a Java mixin file that was missed during the Kotlin-only sweep. Now correctly uses `LOGGER.debug()`.
### Gatherer deposits into modded Crafting Tables (Visual Workbench)
The container detection filter introduced in 1.5.2 (`LockableContainerBlockEntity`) correctly blocked vanilla non-storage blocks, but modded crafting tables that expose Fabric Transfer API or NeoForge IItemHandler capabilities still passed the secondary check. Added a minimum slot count requirement (>= 9 slots) for modded containers detected via platform APIs. Crafting tables typically have fewer slots and are now excluded.
### Traveler's Backpack infinite item duplication
The Gatherer had no item type filtering — it would pick up any dropped item, including container items (backpacks, shulker boxes) from mods like Traveler's Backpack. When the Gatherer removed the container item entity and the source mod respawned it, an infinite pickup-deposit loop created millions of duplicated items.
**Fix:** The Gatherer now skips container-type items during pickup. Items are classified as containers if they are Shulker Boxes or contain inventory NBT data (`BlockEntityTag`, `Inventory`, or `Items` components). This prevents the dupe loop while still allowing all normal item pickups.
### Remaining runtime LOGGER.info calls
Five additional `LOGGER.info()` calls that fired during gameplay (NavigationHelper unstick, GathererExecutor recovery, RecruiterExecutor type map, BaseManager load, PastureLeavesTracker) were demoted to `LOGGER.debug()`. The production console is now completely clean.
---
## Summary
| Change | Type | Impact |
|---|---|---|
| Legendary Recruiter (Prof 5) | Feature | 6 cute legendaries can summon any legendary with 30min cooldown |
| Species rebalancing | Balance | Prof 5 recruiter restricted, Arceus recruiter removed |
| LeafMixin spam | Fix | Zero console spam from leaf collision checks |
| Visual Workbench deposits | Fix | Gatherer ignores small modded inventories (< 9 slots) |
| Traveler's Backpack dupe | Fix | Gatherer skips container-type items |
| Debug log cleanup | Fix | All runtime logs demoted to DEBUG level |
# Cobblebase v1.5.3
Bug fixes, Legendary Recruiter rework, and species skill rebalancing.
---
## Legendary Recruiter Rework
### Prof 5 Recruiter now summons Legendaries
Pokemon with Proficiency 5 Friend Recruiter will now summon random Legendary, Mythical, or Ultra Beast Pokemon instead of regular type-matched species. The legendary summon ignores the recruiter's type — any legendary can appear.
**Cooldown:** 30 minutes (fixed, not reduced by proficiency). This is intentionally high to prevent legendary spam.
**Notification:** Players see a special "summoned a Legendary" message with a level-up sound effect.
### Species rebalancing
- **Prof 5 Recruiter restricted to 6 species only:** Mew, Celebi, Jirachi, Azelf, Mesprit, Uxie
- **18 pseudo-legendaries downgraded** from Prof 5 to Prof 4: Dragonite, Garchomp, Tyranitar, Metagross, Salamence, Hydreigon, Goodra, Kommo-o, Dragapult, Baxcalibur, and others
- **Arceus:** Friend Recruiter removed entirely
- **Celebi, Azelf, Mesprit, Uxie:** Friend Recruiter added at Prof 5 (new)
---
## Bug Fixes
### LeafMixin console spam
The `[LeafMixin] Pokemon vs leaf at ... isPastureLeaf=...` message was still logging at INFO level despite the 1.5.2 debug log cleanup. This was in a Java mixin file that was missed during the Kotlin-only sweep. Now correctly uses `LOGGER.debug()`.
### Gatherer deposits into modded Crafting Tables (Visual Workbench)
The container detection filter introduced in 1.5.2 (`LockableContainerBlockEntity`) correctly blocked vanilla non-storage blocks, but modded crafting tables that expose Fabric Transfer API or NeoForge IItemHandler capabilities still passed the secondary check. Added a minimum slot count requirement (>= 9 slots) for modded containers detected via platform APIs. Crafting tables typically have fewer slots and are now excluded.
### Traveler's Backpack infinite item duplication
The Gatherer had no item type filtering — it would pick up any dropped item, including container items (backpacks, shulker boxes) from mods like Traveler's Backpack. When the Gatherer removed the container item entity and the source mod respawned it, an infinite pickup-deposit loop created millions of duplicated items.
**Fix:** The Gatherer now skips container-type items during pickup. Items are classified as containers if they are Shulker Boxes or contain inventory NBT data (`BlockEntityTag`, `Inventory`, or `Items` components). This prevents the dupe loop while still allowing all normal item pickups.
### Remaining runtime LOGGER.info calls
Five additional `LOGGER.info()` calls that fired during gameplay (NavigationHelper unstick, GathererExecutor recovery, RecruiterExecutor type map, BaseManager load, PastureLeavesTracker) were demoted to `LOGGER.debug()`. The production console is now completely clean.
---
## Summary
| Change | Type | Impact |
|---|---|---|
| Legendary Recruiter (Prof 5) | Feature | 6 cute legendaries can summon any legendary with 30min cooldown |
| Species rebalancing | Balance | Prof 5 recruiter restricted, Arceus recruiter removed |
| LeafMixin spam | Fix | Zero console spam from leaf collision checks |
| Visual Workbench deposits | Fix | Gatherer ignores small modded inventories (< 9 slots) |
| Traveler's Backpack dupe | Fix | Gatherer skips container-type items |
| Debug log cleanup | Fix | All runtime logs demoted to DEBUG level |
# Cobblebase v1.5.2
Bugfix release addressing three community-reported issues: item stacking when picked up by players, Gatherer depositing into non-storage blocks, and console log spam.
---
## 🐛 Bug Fixes
### Produced items don't stack with regular items when picked up by players
Items dropped by Producer, Miner, Harvester and other jobs were tagged with a `cobblebase_origin` marker inside the ItemStack's `CUSTOM_DATA` component. This tag is used by the Gatherer to identify which Pasture Block produced the item. While the tag was correctly stripped when items went through the Gatherer → chest path, **players who picked items up directly from the ground** kept the tag on the ItemStack — making them unable to stack with vanilla-obtained items of the same type (e.g. produced diamonds wouldn't stack with mined diamonds).
**Fix:** Origin tracking now lives on the **ItemEntity** (via command tags) instead of the **ItemStack**. The actual item data stays completely clean regardless of how it's picked up. The Gatherer checks the entity tag before pickup, and items that enter a player's inventory are always tag-free and stack normally.
### Gatherer deposits items into Waystones, modded Crafting Tables and other non-storage blocks
The Gatherer's container detection used a broad `blockEntity is Inventory` check, which matched any block entity that implements the Inventory interface — including Waystones, modded crafting tables, and other blocks that have an inventory for functional reasons but aren't actual storage containers.
**Fix:** Container detection now checks for `LockableContainerBlockEntity` (vanilla storage: chests, barrels, hoppers, dispensers, shulker boxes, furnaces) plus platform-specific storage APIs (Fabric Transfer API / NeoForge IItemHandler) for modded containers. Blocks that incidentally implement Inventory but aren't real storage are no longer targeted. No blacklist configuration needed.
### Console log spam in production
Runtime debug logs (`[Ambient]`, `[Gatherer]`, `[Harvester]`, etc.) were gated behind a config toggle (`enableConsoleLogging`) but logged at INFO level when enabled — flooding server consoles and Discord log channels. Some server owners had the toggle enabled from debugging sessions and couldn't easily find it.
**Fix:** All runtime debug logs now use `LOGGER.debug()` instead of `LOGGER.info()`. They are suppressed by Minecraft's default log4j configuration and only visible when explicitly enabling DEBUG level logging. The `enableConsoleLogging` config option is now obsolete.
---
## 📋 Summary
| Change | Type | Impact |
|---|---|---|
| Item origin tracking moved to ItemEntity | Fix | Produced items always stack with vanilla items |
| Smart container detection | Fix | Gatherer only deposits into real storage blocks |
| Debug logs demoted to DEBUG level | Fix | Zero console spam in production |
# Cobblebase v1.5.2
Bugfix release addressing three community-reported issues: item stacking when picked up by players, Gatherer depositing into non-storage blocks, and console log spam.
---
## 🐛 Bug Fixes
### Produced items don't stack with regular items when picked up by players
Items dropped by Producer, Miner, Harvester and other jobs were tagged with a `cobblebase_origin` marker inside the ItemStack's `CUSTOM_DATA` component. This tag is used by the Gatherer to identify which Pasture Block produced the item. While the tag was correctly stripped when items went through the Gatherer → chest path, **players who picked items up directly from the ground** kept the tag on the ItemStack — making them unable to stack with vanilla-obtained items of the same type (e.g. produced diamonds wouldn't stack with mined diamonds).
**Fix:** Origin tracking now lives on the **ItemEntity** (via command tags) instead of the **ItemStack**. The actual item data stays completely clean regardless of how it's picked up. The Gatherer checks the entity tag before pickup, and items that enter a player's inventory are always tag-free and stack normally.
### Gatherer deposits items into Waystones, modded Crafting Tables and other non-storage blocks
The Gatherer's container detection used a broad `blockEntity is Inventory` check, which matched any block entity that implements the Inventory interface — including Waystones, modded crafting tables, and other blocks that have an inventory for functional reasons but aren't actual storage containers.
**Fix:** Container detection now checks for `LockableContainerBlockEntity` (vanilla storage: chests, barrels, hoppers, dispensers, shulker boxes, furnaces) plus platform-specific storage APIs (Fabric Transfer API / NeoForge IItemHandler) for modded containers. Blocks that incidentally implement Inventory but aren't real storage are no longer targeted. No blacklist configuration needed.
### Console log spam in production
Runtime debug logs (`[Ambient]`, `[Gatherer]`, `[Harvester]`, etc.) were gated behind a config toggle (`enableConsoleLogging`) but logged at INFO level when enabled — flooding server consoles and Discord log channels. Some server owners had the toggle enabled from debugging sessions and couldn't easily find it.
**Fix:** All runtime debug logs now use `LOGGER.debug()` instead of `LOGGER.info()`. They are suppressed by Minecraft's default log4j configuration and only visible when explicitly enabling DEBUG level logging. The `enableConsoleLogging` config option is now obsolete.
---
## 📋 Summary
| Change | Type | Impact |
|---|---|---|
| Item origin tracking moved to ItemEntity | Fix | Produced items always stack with vanilla items |
| Smart container detection | Fix | Gatherer only deposits into real storage blocks |
| Debug logs demoted to DEBUG level | Fix | Zero console spam in production |