EzCountdown
2.0.2Run flash sales, timed events, and launches with stunning countdowns - ActionBar, BossBar, Titles & Placeholders!
2.0.2latestEzCountdown 2.0.2Jul 7, 2026 Added
- Placeholder formatted output regression tests - added unit coverage inEzCountdownPlaceholderExpansionUnitTestto verify%ezcountdown_<name>_formatted%honorsdisplay.time-format.hide-leading-zerosfor both enabled and disabled configurations. - Optional countdown start/end sounds - countdowns can now definesounds.startandsounds.endwith BukkitSoundenum names incountdowns.yml. - GUI sound editors - the in-game editor now includes dedicated actions to configure and validate start/end sounds, includingnoneto disable either sound.Changed
- Runtime start/end flow - when a configured start/end sound is valid, EzCountdown now plays it to online players at countdown start/end alongside existing message, teleport, firework, and command actions.2.0.1EzCountdown 2.0.1May 22, 2026 Fixed
- JitPack build compatibility - correctedjitpack.ymlJava selector toopenjdk21and pinned JitPack install to./mvnw -B -ntp -DskipTests installso builds consistently use Java 21 when compiling againstpaper-api 1.21.11. - GitHub Actions version drift - updated workflow actions to current major versions across CI/release publishing (actions/checkout@v6,actions/setup-java@v5,actions/cache@v5,actions/upload-artifact@v7). - Paper/Folia smoke test resolution for 26.x - CI smoke jobs now resolve builds fromfill.papermc.io/v3and correctly include MC26.1with Java 25 where required.Changed
- Modrinth release step - replaced the legacyKir-Antipov/mc-publishaction invocation in release workflow with a direct Modrinth v2 API upload path for clearer failure diagnostics and up-to-date version resolution.2.0.0EzCountdown 2.0.0May 22, 2026 Added
- Folia support - the plugin now runs on Folia (markedfolia-supported: trueinplugin.yml). Folia'sGlobalRegionScheduleris used automatically when detected at runtime; Paper/Spigot continue to use the Bukkit scheduler. - `compat/` package hierarchy - clean OOP abstraction layer: -compat.platform.PlatformDetector- detects Folia vs. Paper/Spigot at startup viaRegionizedServerclass presence. -compat.scheduler.SchedulerAdapter/TaskHandle- platform-agnostic scheduler interface (runTask,runTaskTimer,runTaskLater,runTaskAsync). -compat.scheduler.BukkitSchedulerAdapter-SchedulerAdapterbacked byBukkitScheduler(Paper/Spigot). -compat.scheduler.FoliaSchedulerAdapter-SchedulerAdapterbacked byGlobalRegionScheduler(Folia); only class-loaded when Folia is detected. -compat.scheduler.SchedulerAdapterFactory- chooses the correct adapter with graceful fallback if Folia classes are missing. -compat.version.ServerVersionUtil- canonical location for runtime Minecraft version detection (replacesutil.ServerVersionUtil). -compat.material.MaterialCompat- canonical location for cross-version material resolution (replacesutil.MaterialCompat). - Startup platform log -PluginBootstrapnow logs the active scheduler adapter class on enable (e.g.Scheduler: BukkitSchedulerAdapter).Changed
-util.ServerVersionUtilandutil.MaterialCompatare now@Deprecateddelegation stubs that forward to their canonicalcompat.*counterparts; they will be removed in a future release. - All internal scheduler usages (CountdownManager,FireworkShowManager,PatternScheduler,ChatInputListener, alllistener.actions.*GUI action classes,SpigotIntegration,SpigotUpdateChecker) now go throughSchedulerAdapterinstead ofBukkit.getScheduler()/BukkitRunnabledirectly. - Scoreboard API modernised -ScoreboardDisplaynow delegates tocompat.scoreboard.ScoreboardCompat. On Paper 1.20.3+ (Criteria.DUMMYavailable) the modernregisterNewObjective(String, Criteria, Component)overload is used; older builds fall back to the legacy string overload. The deprecatedScoreboard.resetScores(String)calls are replaced by objective unregister/re-register viaScoreboardCompat.resetObjective. - Title API modernised -TitleDisplaynow delegates tocompat.title.TitleCompat. On Paper 1.18+ the AdventurePlayer.showTitle(Title)/Player.clearTitle()APIs are preferred over the deprecatedsendTitle(String...)/resetTitle().TitleValidatornow also acceptsshowTitleas a valid title capability. A Spigot/legacy string fallback is retained. - Per-player notification targeting -NotificationBuilder.players(Collection<Player>)restricts a notification to specific players.EzCountdownApi.sendNotification(Notification, Collection<Player>)provides an inline alternative without building aNotificationfirst. - `Countdown.isVisibleTo(Player)` - centralises per-player visibility logic (permission gate + target-player set) in one method; all display handlers now use it instead of duplicated inline checks. - `CountdownBuilder.targetPlayers(Collection<Player>)` - restrict a persistent countdown's display to specific players. - Developer-friendly exception hierarchy - newcom.skyblockexp.ezcountdown.api.exceptionpackage: -EzCountdownException- base unchecked exception; catch this for all EzCountdown API errors. -CountdownNotFoundException- thrown when referencing a countdown name that does not exist; carriesgetCountdownName(). -DuplicateCountdownException- thrown when creating a countdown whose name already exists; carriesgetCountdownName(). -InvalidConfigurationException- thrown byNotificationBuilder.build()and future builder validators when configuration is invalid; replaces the genericIllegalStateException. - `api-version` bumped to `1.18` inplugin.yml; minimum supported Minecraft version is Paper/Spigot 1.18. Dialog display continues to require Paper 1.21.7+. - Broadened Java compatibility - release JARs now target Java 17 bytecode (previously Java 21), so the plugin runs on Paper 1.18 - 1.20.4 (Java 17) as well as Paper 1.20.5+ (Java 21). Thejdk21Maven profile also targets Java 17 bytecode. - `ServerVersionUtil` - new utility class (com.skyblockexp.ezcountdown.util.ServerVersionUtil) for runtime Minecraft version detection; enables future conditional feature gating without hard API dependencies. - Startup guard -onEnablenow logs the detected MC and Java version and disables the plugin with a clear error message if the server is too old (MC < 1.18 or Java < 17).Changed
- All display handlers (ActionBarDisplay,TitleDisplay,ChatDisplay,BossBarDisplay,ScoreboardDisplay,DialogDisplay) usecountdown.isVisibleTo(player)instead of duplicated inline permission checks. - `NotificationBuilder.build()` now throwsInvalidConfigurationException(a subclass ofEzCountdownException) instead of a plainIllegalStateException. - `ScoreboardDisplay` catch blocks now includeNoSuchMethodErrorso the scoreboard falls back to chat if the String-criteriaregisterNewObjectiveoverload is ever removed in a future Paper build. - Project version bumped from1.4.3to2.0.0.Fixed
- DURATION countdown resets to full duration on `/countdown reload` -resumeRunningCountdowns()previously calledhandler.onStart(), which always setstargetInstanttonow + fullDuration, discarding thetarget_epochsaved in storage. It now callshandler.ensureTarget()instead, which is a no-op when a target is already present. The same guard was added to the legacy fallback path for handler-less countdown types. End-commands that fired once before a reload will no longer fire again unexpectedly due to the countdown silently restarting.1.4.2EzCountdown 1.4.2May 15, 2026 Added
- Configurable time format: newdisplay.time-formatsection inconfig.yml. -pattern(default"{days}d {hours}h {minutes}m {seconds}s") - customize the token layout used for the{formatted}placeholder and%ezcountdown_<name>_formatted%PAPI expansion. -hide-leading-zeros(defaulttrue) - when enabled, leading space-delimited segments whose unit value is zero are suppressed. For example,0d 0h 5m 3sis displayed as5m 3s. - Applies to countdown display messages, discord webhook{time_left}, PlaceholderAPI, and the GUI preview action. - Hot-reloads with/countdown reload.1.4.1EzCountdown 1.4.1May 15, 2026 Fixed
- Bossbar color/style ignored -display.bossbar.coloranddisplay.bossbar.styleincountdowns.ymlhad no effect; the boss bar always rendered in the default blue/solid style. All four countdown-type handlers (DurationHandler,FixedDateHandler,RecurringHandler,ManualHandler) now read these fields from config and pass them to theCountdownconstructor.1.4.0EzCountdown 1.4.0May 11, 2026 Added
- Notification API —EzCountdownApi.sendNotification(Notification)fires a one-shot ephemeral timed display from any plugin without creating a persistent countdown or touchingcountdowns.yml. - `Notification` model — lightweight immutable value object with factory methodsNotification.ofSeconds(long),Notification.of(Duration), and a fluentNotificationBuilder(display types, format message, start/end messages). - `NotificationBuilder` — fluent builder forNotification; all fields have sensible defaults (ACTION_BARdisplay,{formatted}message);build()validates duration > 0. - Ephemeral countdown support —Countdown.isEphemeral()/CountdownBuilder.ephemeral(boolean); ephemeral countdowns are removed from memory automatically when they end and are never written to storage.1.3.2EzCountdown 1.3.2May 9, 2026 - Fixed countdown count in bStats - Fixed small memory leak issue causing lag on bigger servers1.3.1EzCountdown 1.3.1May 9, 2026 - Bugfix: Duration countdowns were resetting to their full configured duration after a server restart1.3.0EzCountdown 1.3.0May 7, 2026 - Add DialogDisplay handler with no-flicker logic (only sends packet when formatted message text actually changes per player) - Add DialogDisplayValidator for graceful runtime detection of the experimental Paper dialog API (requires Paper 1.21.7+) - Register DIALOG in DisplayManager.configureHandlers() alongside existing display types - Add --display flag to /countdown create command e.g. /countdown create test duration 10s --display DIALOG - Add commands.error message key to messages.yml (fixes blank chat line when command handler throws an uncaught exception) - Add DIALOG to config.yml display-types comment - Added full documentation on https://ez-plugins.github.io/EzCountdown/ <img width="427" height="461" alt="image" src="https://github.com/user-attachments/assets/2341d7d2-0f1a-…" />1.2.2EzCountdown 1.2.2Apr 21, 2026 - Fixed issue in countdown showing on scoreboard/bossbar when this type was not configured for this countdown.1.2.1EzCountdown 1.2.1Apr 14, 2026 Feature changes - Fix issue in tick scheduling of the countdowns - Added configurable refresh speed for the displays
Code structure changes - Addeddisplay: refresh: # How often the bossbar progress bar and title are refreshed, in ticks (20 ticks = 1 second). # Lower values produce smoother animation. Minimum is 1. bossbar-ticks: 1 # How often the scoreboard sidebar is refreshed, in ticks. Minimum is 1. scoreboard-ticks: 1MessageBatchstructure to keep more clarity in 1 countdown with multiple displays being 1 "batch" - AddedDisplayMessagethat represents 1 message for 1 display1.2.0EzCountdown 1.2.0Mar 26, 2026 - Added configurablecolorforbossbarcountdown display - Added configurablestyleforbossbarcountdown display1.1.0EzCountdown 1.1.0Feb 11, 2026 - Added a new, improved countdown manager GUI   - Fixed/ezcdreloading issue, duplicating countdowns - Added{translate:message.key}placeholders -restart_countdown: <true|false>added for countdowns -countdown_start: <countdown_name>added for countdowns1.0.0EzCountdown 1.0.0Jan 30, 2026 - Refactored the full plugin - AddedCountdownBuilder(fluent API for creating countdowns) - Added feature and unit testing (MockBukkit, JUnit) - Added Maven CI build and publish workflow - Open source release: https://github.com/ez-plugins/EzCountdown0.4.2EzCountdown 0.4.2Jan 19, 2026 - Fixed issue in FIXED countdown starting up after restart whenrunning: truewas enabled for the countdown0.4.0EzCountdown 0.4.0Jan 14, 2026 New features:
Locations system: - Added locations.yml for managing named teleport locations. - New command: /ezcd location <add|delete> <name> to create or remove locations. - Per-countdown teleport: Teleport players to a configured location at countdown start and/or end via the teleport: section in countdowns.yml. - Advanced firework shows: - Per-countdown firework shows can be configured for start and/or end events. - Firework options include: location, color, power, count, interval (ticks between rows), and rows (number of concentric circles). - Fireworks launch in a visually impressive circle around the specified location. Other improvements: - Professional tab-completion for /ezcd location commands. - Configuration file (countdowns.yml) is no longer overwritten by runtime state or reloads - Locations system: - Added locations.yml for managing named teleport locations. - New command: /ezcd location <add|delete> <name> to create or remove locations. - Per-countdown teleport: Teleport players to a configured location at countdown start and/or end via the teleport: section in countdowns.yml. - Advanced firework shows: - Per-countdown firework shows can be configured for start and/or end events. - Firework options include: location, color, power, count, interval (ticks between rows), and rows (number of concentric circles). - Fireworks launch in a visually impressive circle around the specified location. Other improvements: - Professional tab-completion for /ezcd location commands. - Configuration file (countdowns.yml) is no longer overwritten by runtime state or reloads
Similar projects
Plugin →VeinMiner
Mine the whole vein on mining a single ore/block. Make the tedious mining experience to something satisfying and fun! FTB Ultimine alternative
99.3MSueta
Simple Voice Chat
A working voice chat in Minecraft!
76.8MSueta
Chunky
Pre-generates chunks, quickly and efficiently
18.4MSueta
VeinMiner Enchantment
Veinminer Addon - Adds vineminer enchantment to enchanting tables. Only tools with the enchantment can veinmine
18MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta
WorldEdit
A Minecraft Map Editor... that runs in-game! With selections, schematics, copy and paste, brushes, and scripting. Use it in creative, or use it temporarily in survival.
11.6MSueta