1.2.0latestLightPlus 1.2.0Aug 31, 2026 [1.2.0] - 2026-08-31
Added
- Sound effects for light-block level switching, and all four LightPlus sounds (place, break, level change, level off) are now fully configurable under a newsoundssection inconfig.yml— each with its ownsoundkey,volumeandpitch, plus a mastersounds.enabledtoggle and per-sound muting via an emptysound. The level-change sound still slides its pitch up with brightness, now anchored to the configured pitch at level 15. - Land protection support. Placing, removing and adjusting light blocks now respects land/region protection plugins. Block break/place already flowed through standard Bukkit events; the interaction-driven paths (right-click level rotation, shift-right-click adjacent placement, left-click removal) now dispatch a simulated block break/place event and abort if a protection plugin cancels it. Works with WorldGuard, GriefPrevention, GriefDefender, Residence, Towny, Lands, PlotSquared, BentoBox (and its skyblock forks), and any other plugin that cancelsBlockBreakEvent/BlockPlaceEvent. Toggle it under the newland_protection.enabledoption (defaulttrue). Added the corresponding plugins tosoftdepend. -/lightplus give <player> [level] [amount](permissionlightplus.give, default op) to hand a player leveled light items — level 0-15 (default 15), amount 1-64 (default 1) — with tab completion for the sub-command, player names and common values. - Per-player and per-world light-level caps. The highestlightplus.maxlevel.<0-15>permission node a player holds is the brightest level they may set (right-click adjust, shift-place, and placing a stored-level item all clamp to it); players with no node fall back tolimits.default_max_level.limits.world_max_levels.<world>caps a level per world, and the effective limit is the lower of the two.lightplus.maxlevel.bypass(default op) removes all caps./lightplus giveis not clamped. -actionssection inconfig.ymlto individually disable the extra interactions:adjust_level(right-click level cycle),place_adjacent(shift-right-click place),left_click_break(left-click removal), andpick_block. A disabled action falls back to vanilla behaviour. - Pick-block support: middle-clicking a placed light block in Creative gives a light item at that block's exact level (vanilla would give the default level).actions.pick_block, on by default. - Sneak + scroll to step a placed light block's level up/down one at a time (looking at it, holding a light item). Unlike right-click it clamps at 0 and the player's max instead of wrapping.actions.scroll_level, on by default. - Configurablemessages.prefix— a MiniMessage snippet (aLightPlus »gradient tag by default) prepended automatically to every chat message. Use the%prefix%token to place it manually or add it to an action-bar line. - Per-language messages. Withmessages.follow_client_locale(on by default), each player gets the string frommessages.locales.<their client language>when one exists (keyed by full locale likezh_twor just the languagezh), otherwise the English default. Console always gets the default. Ships example Traditional Chinese (zh_tw) entries. -/lightplus help(also shown with no arguments) — a formatted, gradient-headed command panel with click-to-type and hover text, listing only the sub-commands the sender can use. -/lightplus version— a panel showing plugin version, author, server/Minecraft version, Folia support, detected land-protection plugins, and metrics backends. -MessageService.sendLinesfor multi-line MiniMessage output that keeps click/hover interactivity (sendsComponents instead of legacy strings). - Named light items. Theitemconfig section gives crafted / dropped / given light items a MiniMessage display name (%level%token) and lore;item.custom_name: falserestores the plain vanilla item. Different-level items already didn't stack; the name just makes the level readable. - Modrinth update check. On startup LightPlus asks the Modrinth API (off-thread, never blocking startup) for the latest release and compares it three ways: up to date, an update is available (logged +lightplus.updatejoin notice), or the running build is ahead of the latest release (/lightplus versionshows "dev build"). Configured underupdate_check(enabled,notify_on_join); the project id is hard-coded. Message keymessages.update_available(%current%/%latest%/%url%). - Optional light-block decay (decayconfig section, off by default). When on, a player-placed light block is removeddecay.after_secondslater; a repeating sweep clears expired blocks on their region thread. Pending lights are persisted todecay-data.yml(decay.persist, default on) — saved on shutdown and every ~60s, reloaded shortly after start — so they still decay across a restart.lightplus.decay.exempt(default op) places permanent lights; breaking a light by hand cancels its pending decay. - PlaceholderAPI expansion (identifierlightplus, registered only when PlaceholderAPI is installed):%lightplus_version%,%lightplus_lights_placed%,%lightplus_lights_mined%,%lightplus_update_available%,%lightplus_latest_version%,%lightplus_pending_decay%, and the player placeholders%lightplus_max_level%,%lightplus_holding_light%,%lightplus_held_level%. - WorldGuardlightplus-useregion flag (StateFlag, default allow). Setting it todenyin a region blocks every LightPlus light-block action there — adjust, place, shift-place and both break paths — regardless of build permission, and independently of theland_protection.enabledtoggle. Registered inonLoad; requires the flag registry, so it needs a server restart to take effect (not/reload). The WorldGuard API is aprovideddependency (EngineHub repo) and is not shaded.Changed
- Added aREADME.md(build / test / run-server docs) and a JUnit 5 test suite —mvn test, also run bymvn package— covering the update-check version comparison and light-level clamping. - Metrics initialisation (bStats + FastStats) is wrapped so a metrics failure logs a warning instead of aborting plugin enable. - Rewroteconfig.ymlcomments to explain the reasoning behind every option (how the land-protection check works, whatvolumeabove 1.0 does, pitch ranges, recipe shape rules, level-cap resolution, message tokens). - Sound settings, land protection, action toggles and level limits are read live, so/lightplus reloadapplies them without a restart. - Expandedplugin.ymlcommand and permission descriptions. - The/lightpluscommand no longer carries a blanketlightplus.reloadrequirement; each sub-command checks its own permission, solightplus.givecan be granted independently.Fixed
- MiniMessage messages containing a<gradient:#hex:#hex>(such as the new prefix) rendered as literal<gradient::>text — the legacy&#RRGGBBconverter was rewriting the hex colours inside the tag. It now only rewrites hex when prefixed with&. -registerCraftLightRecipecould throw and abort plugin enable when an upgradedconfig.ymlpredated thecrafting_recipesection (the shape resolved from jar defaults whileitemsdid not, producing an unmapped-symbol recipe). Recipe building is now validated up front — row count/length, single-character keys, valid materials, and every shape symbol having anitemsentry — and wrapped so any failure logs a warning and skips the recipe instead of disabling the plugin.1.1.3LightPlus 1.1.3Jul 7, 2026 [1.1.3] - 2026-07-07
Added
- Folia support: light particle preview and recipe discovery now run through the global region and per-player entity schedulers instead of the Bukkit scheduler. - faststats metrics integration, shaded and relocated alongside bStats. - Configurable shaped crafting recipe for a light block, defined inconfig.ymlvia a genericcrafting_recipe.items(key → material) map andcrafting_recipe.recipeshape list, withenabledandresult_leveloptions. Reapplied on/lightplus reload. Defaults to glass border / glowstone center, matching the previous hardcoded recipe. -/lpalias for/lightplus. - The configurable crafting recipe is now auto-discovered for players on join and on/lightplus reload, alongside the stonecutter recipes. -lights_placedandlights_minedcustom faststats metrics, tracking every light block placed (crafting table and right-click adjustment) and mined (block break and left-click removal).Removed
- Dedicated Spigot build/compatibility path; the plugin now targets Paper (and Folia) only.Fixed
- Removed the explicitnet.kyoriAdventure/MiniMessage dependencies (previously pinned to 4.17.0 and shaded unrelocated), lettingpaper-apisupply its own matching Adventure version transitively — the pinned version was overriding Paper's and causing classpath conflicts (cannot access ...PlayerHeadObjectContentsand similar errors).1.1.2LightPlus 1.1.2Mar 31, 2026 [1.1.2] - 2026-03-31
Changed
- Bundled Adventure and MiniMessage into the shaded plugin jar so formatted messages also work on Spigot. - Updated message rendering to support both legacy&formatting and MiniMessage tags in the same config strings. - Unified Paper and Spigot message delivery so MiniMessage content is converted to Minecraft color formatting for non-Adventure paths. - Improved cross-server action bar handling with additional runtime fallbacks for Spigot compatibility. - Added and expandedspigotServer/run.shto auto-build the latest shaded jar, copy it into the local test server, and validate the required Java runtime. - ReplacedLocation#toCenterLocation()usage with explicit centered coordinates for broader server API compatibility. - Removed the duplicate manual placement sound from the normal light block placement path.1.1.1LightPlus 1.1.1Feb 16, 2026 [1.1.1] - 2026-02-16
Added
- bStats dependency (org.bstats:bstats-bukkit:3.1.0) to the build.Changed
- Added the Shadow plugin (com.gradleup.shadow). - ConfiguredshadowJarto include only bStats from runtime dependencies. - Relocatedorg.bstatsclasses into the plugin group package to avoid cross-plugin conflicts. - Build now produces a shaded plugin artifact via./gradlew shadowJar.1.1.0LightPlus 1.1.0Feb 16, 2026 [1.1.0] - 2026-02-16
Added
- MiniMessage support for plugin messages. - PlaceholderAPI support for player-facing messages when PlaceholderAPI is installed. - New configurable command messages: -messages.command_usage-messages.command_no_permission-messages.command_reloadedChanged
- Action bar level message now uses MiniMessage formatting. - Message handling was centralized via a dedicatedMessageService. - Addedsoftdepend: [PlaceholderAPI]toplugin.yml. - Updated build configuration with PlaceholderAPI repository/dependency.1.0.0LightPlus 1.0.0Feb 16, 2026 First Version
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