ExMobStacker
Premium
ExMobStacker
Advanced Mob Stacking Plugin
/exmobstackerFeatures
- ✔ Smart mob stacking system
- ✔ Per-mob stack limits
- ✔ Baby & adult mob separation
- ✔ Supports multiple mob types simultaneously
- ✔ Highly configurable behavior
- ✔ In-game admin GUI
- ✔ Full command system
- ✔ 18 language support
- ✔ Cross-version compatibility (1.8 → 26.1+)
- ✔ Optimized performance
In-Game UI
Admin Configuration Interface
Full in-game control over stacking behavior and settings
Language System & Localization
Automatic language detection with manual override support
Live Gameplay
Stacking System in Action
Multiple mob types with independent stacking behavior
Accurate stacking with adult and baby separation
Works across multiple entities simultaneously
Commands
CODE
/exmobstacker config
/exmobstacker reload
/exmobstacker scan
/exmobstacker info
/exmobstacker cleanup
/exmobstacker limits
/exmobstacker language
/exmobstacker language ?
/exmobstacker language status
/exmobstacker language <code|auto>
/exmobstacker language default <code>
/exmobstacker language console <code>
/exmobstacker language selection <on|off>Permissions
CODE
exmobstacker.admin
exmobstacker.admin-ui
exmobstacker.language
exmobstacker.update.notifyInstallation
- Download the plugin .jar
- Place it in /plugins/
- Start or restart your server
- Edit config in /plugins/ExMobStacker/
- Use /exmobstacker reload
Language Support
- 18 languages included
- Automatic locale detection
- Manual language override
- GUI-based selection
Version History
v1.1.9
- Fixed remaining watchdog scan hot paths by caching disabled-world configuration values.
- Added per-scan entity and nearby-entity safety limits to prevent full-world scan lockups.
- Added scan-local variant key caching so repeated pair checks do not repeatedly rebuild variant data.
- Switched EntityVariantService reflection caches from ConcurrentHashMap to HashMap because all scan access is on the server thread.
- Fixed ConsoleLogger syntax errors.
- Corrected startup console formatting implementation.
- Updated colored console output to match the clean EndCoder startup format.
- Removed version text from the console prefix while keeping the centered startup banner version.
- Updated server version display to use Bukkit reported version text.
- Fully removed unsupported PlayerLeashEntityEvent references for legacy compatibility.
- Removed every Java reference to unsupported leash event classes.
- Rebuilt leash split handling with PlayerInteractEntityEvent for 1.8+ compatibility.
- Used material-name checks for LEASH/LEAD compatibility instead of direct modern enum references.
- Fixed legacy API compatibility for leash handling.
- Replaced unsupported PlayerLeashEntityEvent usage with cross-version interaction handling.
- Added leash split handling: leashing a stacked mob now separates one mob from the stack.
- Kept leashed mobs excluded from future stacking.
- Reused cached passenger checks for camel participation to avoid reflection in the scan hot path.
- Fixed leashed mobs being allowed to participate in stacking.
- Improved leash-state merge prevention handling.
- Fixed watchdog freezes on Bukkit API `26.1+` / Java 25 caused by repeated reflective passenger and leash method lookups inside the main stack scan loop.
- Cached ride-state and leash compatibility methods once from the Bukkit interfaces instead of resolving methods from CraftBukkit entity classes for every merge check.
- Preserved 1.8+ compatibility by keeping passenger/leash checks reflective while removing the repeated hot-path `Class.getMethod(...)` calls.
- Synced release version to `1.1.1` across `pom.xml`, `plugin.yml`, and `README.md`.
- Added Bukkit API `26.1+` compatibility handling for modern 1.21+ server lines.
- Hardened version detection so unversioned or newly numbered Bukkit/CraftBukkit packages no longer break compatibility helpers.
- Blocked actively leashed mobs from participating in new merges to avoid unsafe 1.21.6+ leash-state merges.
- Added `HAPPY_GHAST` to the default excluded entity list because it is a rideable/controlled mob and should not be stacked by default.
- Added Maven resource filtering so `plugin.yml` resolves `${project.version}` into the final jar filename/version correctly.
- Added missing `exmobstacker.update.notify` permission metadata to `plugin.yml`.
- Synced release version to `1.1` across `pom.xml`, `plugin.yml`, and `README.md`.
- Fixed watchdog crash caused by repeated `setCustomName()` calls during stack scan display refresh.
- Added display-name caching so Bukkit custom names are only updated when the displayed text actually changes.
- Added safe display-name trimming with `custom-name-max-length` defaulting to `96`.
- Reduced repeated custom-name clearing calls for unstacked mobs.
- Synced version to `1.0.86` across `pom.xml`, `plugin.yml`, and `README.md`.
- Fixed a server watchdog crash during stack scans caused by repeated reflective missing-method lookups on newer Spigot entities.
- Added cached variant-method lookups so unsupported entity methods are remembered instead of throwing thousands of `NoSuchMethodException` checks during scans.
- Kept the v1.0.84 natural death drop behavior while making scan/merge variant checks safe for 1.21.11.
- Synced version to `1.0.85` across `pom.xml`, `plugin.yml`, and `README.md`.
- Fixed stacked mob kills so Bukkit completes the real death event and vanilla/plugin-modified drops are no longer lost.
- Respawns the remaining stack after a natural stacked death while preserving key variant state across supported versions.
- Stopped cancelling lethal stacked mob damage, keeping experience, equipment drops, and EntityDeathEvent drop edits intact.
- Synced version to `1.0.84` across `pom.xml`, `plugin.yml`, and `README.md`.
- Maintained the premium release package alignment for the update-checker/resource-id ready build.
- Synced version to `1.0.83` across `pom.xml`, `plugin.yml`, and `README.md`.
- Added a built-in Spigot update checker framework with async startup/interval checks and admin join notifications.
- Kept the updater dormant until the real Spigot resource id is patched into the code for the release replacement build.
- Added an `update-checker` config section for enabling checks, interval timing, and join-notify behavior without exposing the resource id in config.
- Synced version to `1.0.82` across `pom.xml`, `plugin.yml`, and `README.md`.
- Fixed the player language GUI status compass showing raw translation keys instead of the resolved localized text.
- Corrected the status item to use the existing GUI language message paths for the status name and mode lines.
- Synced version to `1.0.81` across `pom.xml`, `plugin.yml`, and `README.md`.
- Finished the remaining localization cleanup outside the GUI by adding admin language commands for default language, console language, and player-selection toggling.
- Cleaned the `config.yml` localization block by adding an explicit `available-languages` list and keeping `en_us` as the guaranteed fallback.
- Normalized configured language settings during startup and reload so invalid language values fall back safely instead of drifting out of sync with the bundled language set.
- Synced version to `1.0.80` across `pom.xml`, `plugin.yml`, and `README.md`.
- Hardened the GUI layer with shared inventory-holder identification so admin and language menus no longer depend on fragile title matching across server versions.
- Tightened GUI click handling to only process clicks from the top menu inventory and safely ignore null, air, and player-inventory interactions.
- Centralized GUI material selection into reusable cross-version helpers to keep admin and language menu rendering consistent from 1.8 through latest.
- Synced version to `1.0.79` across `pom.xml`, `plugin.yml`, and `README.md`.
- Fixed GUI crashes on modern servers caused by direct legacy `Material` enum references in admin and language inventories.
- Added safe cross-version material resolution for GUI filler and menu items.
- Preserved existing GUI behavior while restoring compatibility across supported server versions.
- Fixed GUI click crashes on modern servers caused by removed `Inventory.getTitle()` usage in admin and player language inventory handling.
- Updated GUI inventory detection to use the player inventory view path so admin and language menus could be interacted with again on modern server versions.
- Synced version to `1.0.77` across `pom.xml`, `plugin.yml`, and `README.md`.
- Added `/exmobstacker language status` so players and console can both inspect the active language path without changing settings.
- Added a language status panel to the player language GUI showing stored mode, resolved language, client locale, and fallback language.
- Corrected the missing `v1.0.72` README history entry and kept version history in proper order.
- Synced version to `1.0.76` across `pom.xml`, `plugin.yml`, and `README.md`.
- Expanded the admin config UI into a safer multi-screen layout for toggles, language settings, stack-limit viewing, and reload access.
- Made `/exmobstacker language` sender-aware so players can use the GUI by default while console can view or set the console language with the same command.
- Added persistent console language handling with `en_us` as the default fallback.
- Improved stack merge safety by blocking problematic ride-state and leash-state merges and by respecting per-type stack limits during merge resolution.
- Corrected duplicated README version history alignment and synced the project version across `pom.xml`, `plugin.yml`, and `README.md`.
- Continued localization and admin UI cleanup groundwork for the sender-aware language system and admin configuration flow.
- Changed `/exmobstacker language` into a dual-function player command: it now opens the language selector GUI by default when no second argument is provided.
- Added `/exmobstacker language ?` to print the available language codes so players can choose between GUI selection or manual code entry.
- Kept manual language setting support through `/exmobstacker language <code|auto>` and preserved `/exmobstacker language gui` as a compatibility alias.
- Updated tab completion and localized help text for the revised language flow.
- Synced version to `1.0.73` across `pom.xml`, `plugin.yml`, and `README.md`.
- Cleaned the `config.yml` localization and admin UI sections so the newer language flow and settings areas were grouped more clearly.
- Added a player language selector GUI and tied it into the `/exmobstacker language` workflow as part of the ongoing localization UI expansion.
- Fixed the root command permission structure so player language subcommands could be reached without exposing admin-only actions.
- Synced version to `1.0.72` across `pom.xml`, `plugin.yml`, and `README.md`.
- Added `/exmobstacker limits` to show the default per-mob stack limit plus configured custom overrides from `config.yml`.
- Expanded `/exmobstacker info` to include the default per-mob limit and the number of custom stack-limit entries.
- Added tab completion and localized help/message entries for the new limits output.
- Restored the missing `v1.0.8` README history entry into the correct chronological position.
- Synced version to `1.0.71` across `pom.xml`, `plugin.yml`, and `README.md`.
- Cleaned the duplicated trailing README version-history block left from an older release note insertion.
- Preserved all existing plugin functionality and code paths.
- Synced version to `1.0.70` across `pom.xml`, `plugin.yml`, and `README.md`.
- Added explicit `plugin.yml` permission metadata for `exmobstacker.admin` and `exmobstacker.language`.
- Kept the existing `exmobstacker.admin-ui` permission entry intact.
- Synced version to `1.0.69` across `pom.xml`, `plugin.yml`, and `README.md`.
- Added hard cap enforcement for per-mob stack limits.
- Stacks no longer exceed configured limits.
- Overflow now correctly remains on the source entity instead of being lost.
- Improves consistency and prevents silent stack overflow issues.
- Synced version to `1.0.68` across `pom.xml`, `plugin.yml`, and `README.md`.
- Fixed `plugin.yml` api-version placement required by language server.
- Ensured api-version is correctly defined directly under version.
- Synced version to `1.0.67`.
- Fixed the duplicated `usage` entry in the `plugin.yml` `exmobstacker` command block by rebuilding the command section cleanly.
- Kept `api-version: 1.13` and a single `exmobstacker.admin-ui` permission entry in `plugin.yml`.
- Fixed the remaining `StackService` compile error by removing the unresolved variable from the per-mob stack limit line and restoring a clean max stack size lookup path.
- Synced version to `1.0.66` across `pom.xml`, `plugin.yml`, and `README.md`.
- Fixed `plugin.yml` structure by adding `api-version: 1.13` and removing the duplicate `exmobstacker.admin-ui` permission key.
- Fixed the remaining `StackService` compile error by resolving the per-mob stack limit lookup against the in-scope living entity variable.
- Synced version to `1.0.65` across `pom.xml`, `plugin.yml`, and `README.md`.
- Fixed compile error in `StackService` caused by an unresolved variable in the per-mob stack limit lookup.
- Corrected the stack limit resolution to use the in-scope entity for that merge path.
- Synced version to `1.0.64` across `pom.xml`, `plugin.yml`, and `README.md`.
- Added per-mob stack limits with a new `stack-limits` config section.
- Stack merging now respects entity-specific limits with a default fallback when no mob-specific value is defined.
- Synced version to `1.0.63` across `pom.xml`, `plugin.yml`, and `README.md`.
- Added tab completion for `/exmobstacker` subcommands and `/exmobstacker language <code|auto>`.
- Locale tab suggestions are now driven directly from the supported language list so future language additions stay in sync automatically.
- Added `exmobstacker.admin-ui` permission metadata for the in-game config UI.
- Synced version to `1.0.62` across `pom.xml`, `plugin.yml`, and `README.md`.
- Added a full localization framework for both player-facing messages and console output.
- Bundled language packs for `en_us`, `bg_bg`, `da_dk`, `de_de`, `es_cu`, `es_es`, `es_mx`, `es_us`, `es_ve`, `fil_ph`, `fr_ca`, `fr_fr`, `ga_ie`, `gd_gb`, `it_it`, `nl_nl`, `pl_pl`, and `ru_ru`.
- Added automatic player locale detection using the client locale when available, plus `/exmobstacker language <code|auto>` and `/exmobstacker languages`.
- Added an in-game admin config UI at `/exmobstacker config` with toggle controls for core boolean settings.
- Cleaned the main config layout and added `localization` and `admin-ui` sections while preserving existing stacking behavior defaults.
- Synced version to `1.0.61` across `pom.xml`, `plugin.yml`, and `README.md`.
- Removed the duplicate `isCamelEntity(LivingEntity)` helper from `StackService`.
- Fixes the duplicate method compile error while keeping camel stacking participation logic intact.
- Synced version to `1.0.60` across `pom.xml`, `plugin.yml`, and `README.md`.
- Fixed camel participation by routing camels through a dedicated participation path before the generic tamed-mob filter runs.
- Camels now use horse-like stacking rules: baby state still matters, saddle state remains in the internal camel key, and occupied camels are excluded from stacking.
- Excluded camels from the generic `isTamed` path so they are no longer blocked when `ignore-tamed-mobs` is enabled.
- Synced version to `1.0.59` across `pom.xml`, `plugin.yml`, and `README.md`.
- Set default `target-chat-enabled` to false.
- Set default `target-sidebar-enabled` to false.
- Synced version to `1.0.58`.
- Reworked camel participation so camels now enter the normal stacking pipeline instead of being filtered out before matching.
- Camel handling now behaves more like horses: adult and baby state still matter, saddle state is included in the internal camel variant key, but transient sit and dash pose differences are ignored.
- Prevented occupied camels from stacking by excluding camels that currently have riders or are riding another entity.
- Synced version to `1.0.57` across `pom.xml`, `plugin.yml`, and `README.md`.
- Fixed camel stacking with a dedicated fallback matcher for camels on modern versions.
- Camel target selection now allows same-type, same-age-state camels to merge even if an unseen runtime state causes the normal variant key comparison to miss.
- Kept the fallback scoped only to camels so other mob families still rely on the normal exact variant key path.
- Synced version to `1.0.56` across `pom.xml`, `plugin.yml`, and `README.md`.
- Fixed camel stacking by normalizing camel-specific state handling so adult camels no longer fail to merge because of transient sitting or dashing differences.
- Excluded camels from the generic tamed-mob ignore path so camel stacking remains active even when `ignore-tamed-mobs` is enabled for other mob families.
- Kept the camel change scoped so existing tamed handling for wolves, cats, horses, and other tameables is unchanged.
- Synced version to `1.0.55` across `pom.xml`, `plugin.yml`, and `README.md`.
- Fixed the corrupted `StackService` class header that was causing duplicate modifier, premature field reference, and missing block compile errors.
- Removed the malformed injected visibility snippet from the class declaration area and restored a valid `public final class StackService {` header.
- Synced version to `1.0.54` across `pom.xml`, `plugin.yml`, and `README.md`.
- Fixed StackService syntax error caused by malformed class injection.
- Restored proper class structure and removed invalid visibility method block.
- Resolves compilation errors on lines 25 and 30.
- Synced version to `1.0.53`.
- Added configurable name visibility distance for stacked mobs.
- Prevents name rendering at long distances to reduce clutter and improve performance.
- Default distance set to 32 blocks configurable.
- Synced version to `1.0.51`.
- Added per-mob display color overrides in `config.yml`.
- Mob type colors now check explicit entity overrides first, then fall back to friendly, hostile, neutral, boss, or fallback category colors.
- Included default override examples for Creeper, Spider, and Enderman without changing the base category system.
- Synced version to `1.0.50` across `pom.xml`, `plugin.yml`, and `README.md`.
- Added configurable display colors for stack amount, multiplier, and mob type categories.
- Moved mob type coloring into config-driven resolution so friendly, hostile, neutral, boss, and fallback colors can be changed without code edits.
- Cleaned the display layer so mob names remain plain text internally and colors are applied only when building target messages, HUD lines, and floating names.
- Updated default display formats to use `%amount-color%`, `%multiplier-color%`, and `%type-color%` tokens.
- Synced version to `1.0.49` across `pom.xml`, `plugin.yml`, and `README.md`.
- Added boss mob coloring purple for Wither and Ender Dragon.
- Kept detection version-safe using entity type names with no API break risk.
- Preserved hostile, friendly, and neutral classification system.
- Synced version to `1.0.48`.
- Added neutral mob classification yellow for ambient and water mobs.
- Refined friendly green and hostile red detection using Bukkit entity classes.
- Fallback color set to white for unknown entity types.
- Synced version to `1.0.47`.
- Adjusted stack format spacing so `x` is directly attached to the number, e.g. `12x Cow`.
- Format now: `&d%amount%&fx %type%`.
- Synced version to `1.0.46`.
- Fixed floating mob name coloring so the `%type%` portion now applies dynamic friendly or hostile colors instead of staying white.
- Hostile mob names now render red and friendly mob names now render green while keeping the amount magenta and the `x` white.
- Kept color handling in the display layer only so stack identity and variant matching remain internal.
- Synced version to `1.0.45` across `pom.xml`, `plugin.yml`, and `README.md`.
- Updated stack display colors.
- Amount = magenta.
- `x` = white.
- Mob name reserved for friendly/hostile coloring layer.
- Updated default format to `&d%amount%&f x %type%`.
- Synced version to `1.0.44`.
- Simplified floating stack names to display clean mob names only instead of variant-heavy labels.
- Changed the default stack name format to `%amount%x %type%` so floating names read like `12x Cat`.
- Kept all variant tracking internal to the stack identity system so display text is no longer overloaded.
- Synced version to `1.0.43` across `pom.xml`, `plugin.yml`, and `README.md`.
- Fixed active variant matching so cat types are now included in the stack key instead of collapsing together.
- Expanded panda matching beyond the main gene to include hidden gene and state flags like sneezing, eating, scared, rolling, and on-back.
- Added matching display support for fox, cat, and panda variants so modern mob names reflect the separated variants better.
- Synced version to `1.0.42` across `pom.xml`, `plugin.yml`, and `README.md`.
- Synced release metadata to `1.0.41` across `pom.xml`, `plugin.yml`, and `README.md`.
- Restored missing revision history entries for releases after `1.0.33`.
- Kept the current cat, panda, and fox variant separation work intact.
- Fixed variant key separation for modern mobs by namespacing fox, panda, and cat values.
- Corrected modern variant stacking so cat types do not collapse into one stack.
- Corrected panda variant stacking so gene values are separated in the stack key.
- Synced version to `1.0.40` across `pom.xml`, `plugin.yml`, and `README.md`.
- Integrated fox, panda, and cat variant parts into the live stacking comparison key.
- Kept the integration additive and reflection-safe for older server versions.
- Preserved existing stacking logic while activating the new modern variant checks.
- Synced version to `1.0.39` across `pom.xml`, `plugin.yml`, and `README.md`.
- Rebuilt from the clean `1.0.33` baseline to remove the corrupted `EntityVariantService` edits.
- Restored a stable compile state with the new helper methods added only once at class scope.
- Preserved the working stacking baseline while preparing safe modern variant expansion.
- Synced version to `1.0.38` across `pom.xml`, `plugin.yml`, and `README.md`.
- Added reflection-safe helper methods for fox type, panda gene, and cat type handling.
- Kept the modern helper methods compatible with legacy versions by returning empty values when unsupported.
- Preserved the existing stacking baseline without rewriting core systems.
- Synced version to `1.0.37` across `pom.xml`, `plugin.yml`, and `README.md`.
- Corrected the broken `EntityVariantService` update that placed helper methods in the wrong scope.
- Fixed the resulting syntax errors, duplicate local variable errors, and undefined helper method calls.
- Restored a clean compile path while keeping the intended fox, panda, and cat support work moving forward.
- Synced version to `1.0.36` across `pom.xml`, `plugin.yml`, and `README.md`.
- Added grouped Minecraft version range detection for `1.8.x`, `1.9–1.12`, `1.13–1.16`, `1.17–1.20`, and `1.21+`.
- Introduced the `VersionUtil` foundation for cleaner cross-version branching in future updates.
- Kept the change additive so no working stacking systems were altered.
- Synced version to `1.0.35` across `pom.xml`, `plugin.yml`, and `README.md`.
- Expanded modern mob variant planning to cover fox, panda, and cat handling.
- Established the next safe compatibility target beyond sheep, rabbits, horses, parrots, llamas, and villagers.
- Kept all existing stacking, logging, and metrics behavior unchanged.
- Synced version to `1.0.34` across `pom.xml`, `plugin.yml`, and `README.md`.
- Fixed the `EntityVariantService` compile errors by fully rewriting the class with the llama and villager helper methods properly defined.
- Preserved llama color/strength-aware matching.
- Preserved villager profession-aware matching.
- Synced version to `1.0.33` across `pom.xml`, `plugin.yml`, and `README.md`.
- Fixed the broken imports by restoring your working bundled metrics path instead of the unresolved `org.bstats` import.
- Kept your uploaded `ExMobStackerPlugin`, `ConsoleLogger`, and bundled metrics flow intact.
- Rewrote `EntityVariantService` cleanly so llama and villager helper methods are actually defined and callable.
- Preserved the next-step additions for llama color/strength and villager profession-aware matching.
- Synced version to `1.0.32` across `pom.xml`, `plugin.yml`, and `README.md`.
- Advanced the cross-version entity variant path by adding llama-aware matching and display handling.
- Added villager profession-aware matching and display handling to better cover version changes beyond 1.12.
- Kept your uploaded console formatting and metrics flow intact as the ongoing baseline.
- Synced version to `1.0.31` across `pom.xml`, `plugin.yml`, and `README.md`.
- Applied your updated `ExMobStackerPlugin`, `ConsoleLogger`, and `Metrics` formatting baseline.
- Kept your console system intact, including the visual metrics loading confirmations.
- Fixed bundled `Metrics` to support `new Metrics(this, 30864);`.
- Added `data.put("id", pluginId);` to bundled metrics plugin data so the plugin id is represented during submission.
- Kept the bundled metrics approach and `json-simple` dependency path.
- Synced version to `1.0.30` across `pom.xml`, `plugin.yml`, and `README.md`.
- Corrected bStats to use the official Bukkit integration with the real plugin id `30864`.
- Removed the bundled old-style Metrics class so tracking now follows the plugin-id based path.
- Added the official `org.bstats:bstats-bukkit:3.2.1` dependency back into `pom.xml`.
- Added Maven shade relocation for `org.bstats` to `net.endcoder.exmobstacker.libs.bstats`.
- Wired `new Metrics(this, 30864);` directly into `onEnable()`.
- Synced version to `1.0.29` across `pom.xml`, `plugin.yml`, and `README.md`.
- Replaced the previous bStats setup with the same bundled Metrics-style implementation pattern you shared from SlimeChunk.
- Removed the official `bstats-bukkit` dependency and shade setup in favor of the bundled metrics class approach.
- Added the required `json-simple` dependency for the bundled metrics class.
- Synced version to `1.0.28` across `pom.xml`, `plugin.yml`, and `README.md`.
- Replaced the homemade metrics class with the official `org.bstats:bstats-bukkit:3.2.1` implementation.
- Added the official Maven shade relocation for bStats using `net.endcoder.exmobstacker.libs.bstats`.
- Wired the official bStats bootstrap directly in `onEnable()` with plugin id `30864`.
- Removed the temporary custom `Metrics` class and the config-based plugin id block.
- Synced version to `1.0.27` across `pom.xml`, `plugin.yml`, and `README.md`.
- Fixed the `EntityVariantService` compile error by rewriting the class cleanly with the parrot helper method properly defined.
- Kept parrot variant-aware matching and display support intact.
- Synced version to `1.0.26` across `pom.xml`, `plugin.yml`, and `README.md`.
- Added parrot variant-aware matching so different parrot colors/variants do not merge together.
- Improved parrot target/custom-name display so the parrot variant is shown clearly.
- Synced version to `1.0.25` across `pom.xml`, `plugin.yml`, and `README.md`.
- Refactored mob subtype and display logic into a dedicated `EntityVariantService`.
- `StackService` now uses the variant service instead of keeping all entity-variant rules inline.
- Added sheep color-aware variant matching as part of the new service structure.
- bStats now uses `bstats.plugin-id` from `config.yml` and only runs when the plugin id is set above `0`.
- Synced version to `1.0.23` across `pom.xml`, `plugin.yml`, and `README.md`.
- Switched fully to `ConsoleCommandSender` for console output.
- Removed logger usage for all colored console messages.
- Cleaned up formatting for a simpler, cleaner look.
- Synced version to `1.0.21` across all files.
- Reworked console output so it no longer prints the duplicated `[ExMobStacker] [ExMobStacker vX]` style prefix.
- Switched banner output away from ANSI logger formatting to direct console messages for a cleaner look closer to your example.
- Kept console colors configurable in `config.yml`.
- Synced version to `1.0.20` across `pom.xml`, `plugin.yml`, and `README.md`.
- Added configurable colored console output with an enable banner similar to your example.
- Added `console-colors` config options for primary, accent, warn, error, and text colors.
- Wired plugin enable and disable logging through the new console logger.
- Synced version to `1.0.19` across `pom.xml`, `plugin.yml`, and `README.md`.
- Added rabbit variant-aware matching so different rabbit types do not merge together.
- Improved rabbit target/custom-name display so the rabbit type is shown more clearly.
- Synced version to `1.0.18` across `pom.xml`, `plugin.yml`, and `README.md`.
- Added variant-aware matching for horses so different horse variants, colors, and styles do not merge together.
- Added size-aware matching for slimes and magma cubes so different sizes stay in separate stacks.
- Improved target/custom-name display so horse and slime variants are easier to identify.
- Synced version to `1.0.17` across `pom.xml`, `plugin.yml`, and `README.md`.
- Fixed compile error in `PlayerTargetListener` by switching the target check to `canParticipate(...)`.
- Made stack persistence optional and disabled by default, since `stacks.yml` can contribute to bad restores while stacking logic is still being stabilized.
- When persistence is disabled, the plugin now clears `stacks.yml` on shutdown instead of reusing stale stack data.
- Synced version to `1.0.16` across `pom.xml`, `plugin.yml`, and `README.md`.
- Fixed a major stacking bug where plugin-added custom names were causing stacked anchors to stop participating in future merges.
- Stopped scan cleanup from stripping tracked stacks just because they had the plugin display name above them.
- Made config defaults auto-merge into existing `config.yml`, so new keys like `target-sidebar-enabled` and `target-chat-enabled` will now appear on existing installs.
- Lowered the default scan interval again to `5` ticks so stacking happens much sooner.
- Improved display refresh so stacked names stay applied more reliably.
- Synced version to `1.0.15` across `pom.xml`, `plugin.yml`, and `README.md`.
- Fixed pair-merge math so an already stacked mob is always counted by its full stack size when merging.
- Changed scan processing to continue merging until no more valid nearby pair merges remain.
- Reduced the default scan interval to `20` ticks so stacking happens sooner.
- Kept chunk-unload stack preservation and target HUD behavior.
- Synced version to `1.0.14` across `pom.xml`, `plugin.yml`, and `README.md`.
- Improved baby detection so more mob types respect baby vs adult separation instead of only a few special cases.
- Fixed a major stack-loss path by moving tracked unloaded stacks into pending restore storage on chunk unload.
- Changed merge logic back to pair-based math so stack totals stay consistent while scanning nearby entities.
- Added a right-side target HUD panel for mob info while looking at a mob.
- Left chat target messages optional and disabled by default.
- Synced version to `1.0.13` across `pom.xml`, `plugin.yml`, and `README.md`.
- Fixed stack merge math by consolidating all nearby matching entities into a chosen anchor before applying counts.
- Corrected cases where a stack of 2 merging with a stack of 1 would not reliably total to 3.
- Kept variant-aware matching for zombie, baby zombie, and zombie villager separation.
- Synced version to `1.0.12` across `pom.xml`, `plugin.yml`, and `README.md`.
- Removed duplicate `<finalName>` entry from `pom.xml`.
- Kept only `${project.artifactId}-${project.version}` for proper versioned jar output.
- Fixed and synced version to `1.0.11` across `pom.xml`, `plugin.yml`, and `README.md`.
- Fixed `pom.xml` so the project version is again wrapped in proper XML tags.
- Corrected the project version to `1.0.10` in `pom.xml`, `plugin.yml`, and `README.md`.
- Preserved Maven final jar naming with `${project.artifactId}-${project.version}`.
- Fixed the broken `pom.xml` version line caused by the previous replacement.
- Synced the project version to `1.0.9` in `pom.xml`, `plugin.yml`, and `README.md`.
- Preserved the Maven final jar naming pattern using `${project.artifactId}-${project.version}`.
- Fixed stack matching so different mob variants do not merge into the same stack.
- Zombies now differentiate between normal zombie, baby zombie, and zombie villager variants.
- Variant-aware display names now show the correct mob form in target messages and custom names.
- Synced the project version across `pom.xml`, `plugin.yml`, and `README.md`.
- Bumped the project version to `1.0.8`.
- Added `stacks.yml` persistence for tracked stack sizes across disable and enable.
- Restores saved stack sizes for loaded entities on startup and on chunk load.
- Added pending restore visibility to `/exmobstacker info`.
- Kept all persistence logic 1.8-safe by restoring stacks through loaded-entity UUID matching.
- Bumped `plugin.yml` version to `1.0.7`.
- Fixed 1.8 API compile errors in `PlayerTargetUtil`.
- Removed use of `Entity#getHeight()` and `Entity#getWidth()`, which are not available on the legacy API line.
- Replaced target sizing logic with a 1.8-safe `LivingEntity#getEyeHeight()`-based center estimate and fixed target radius values.
- Bumped `plugin.yml` version to `1.0.6`.
- Updated README version tracking policy into the project.
- Bumped `plugin.yml` version to `1.0.5`.
- Added command metadata and admin permission node to `plugin.yml`.
- Added version output to the main command and info command.
- Replaced target lookup with a stricter line-of-sight target utility to keep the behavior 1.8-safe.
- Improved target display accuracy while avoiding newer API-only calls.
- Added entity death cleanup.
- Added chunk load scan and chunk unload cleanup.
- Improved stack target selection.
- Tightened merge handling and stack cleanup.
- Added `/exmobstacker cleanup`.
- Stabilized legacy-safe entity lookup by UUID scanning through loaded world entities.
- Improved stack tracking cleanup.
- Continued building directly from the user's working project base.
- Added mob stacking within a 5 block radius.
- Implemented stack merging on spawn and on scheduled scans.
- Added target display for stack size and mob type.
- Established the working shell base and project structure.
- Preserved the user's working Maven setup and compatibility exclusions.
Supports Minecraft 1.8 – 26.1+
Developed by Endcoder Creative