COWMODSКаталог модов

LightPlus

A Simple Plugin that Adds Functions to Light Blocks in Survival

Автор: HippoDev3492обновлён 31 авг. 2026 г.
ДекорМеханики игрыУтилиты

Описание

Light Plus


A Simple Plugin that Adds Functions to Light Blocks in Survival

Functions

Light blocks in survival

  • Place, break and pick up light blocks in survival/adventure, not just creative.
  • The light level (0-15) is stored on the dropped/held item and restored when placed.
  • Optional custom item name + lore showing the level (item: in config.yml, MiniMessage, %level% token).

Adjusting placed lights (hold a light item)

  • Right-click a light block: raise its level by 1 (wraps back to 0 past the max).
  • Sneak + scroll while looking at a light block: step the level up/down one at a time (stops at 0 and the max, no wrap).
  • Shift-right-click a light block: place another light block next to it at the same level.
  • Left-click a light block you're looking at: break it reliably, even while invisible.
  • Middle-click (pick block) a light in Creative: get a light item at that block's exact level.
  • Each of these actions can be turned off individually in config.yml (actions:), falling back to vanilla.

Level limits

  • Cap the brightest level a player can set with lightplus.maxlevel.<0-15> permission nodes (highest held wins), or a server-wide limits.default_max_level for players without a node.
  • limits.world_max_levels.<world> caps per world; the effective limit is the lower of the two.
  • lightplus.maxlevel.bypass ignores all caps.

Optional decay

  • decay.enabled makes player-placed light blocks disappear after decay.after_seconds — temporary exploration lighting with no cleanup.
  • Pending lights persist to decay-data.yml (decay.persist), so they still decay after a restart.
  • lightplus.decay.exempt places permanent lights.

Admin

  • /lightplus give <player> [level] [amount] hands out leveled light items (tab-completed).

Feedback

  • Action-bar message when a level is set or changed (Set to %level% level, configurable).
  • Configurable gradient chat prefix (messages.prefix, MiniMessage) auto-added to every message; %prefix% token for manual placement.
  • Per-language messages: with messages.follow_client_locale, players see strings from messages.locales.<their client language> (ships a zh_tw example), falling back to the English defaults.
  • Marker particles around nearby light blocks while holding a light item.
  • Configurable sound effects for placing, breaking and re-leveling — sound key, volume, pitch, per-sound mute and a master toggle. The level-up sound rises in pitch with brightness.

Recipes

  • Stonecutter recipes for all 16 light levels; the output always matches the selected level.
  • Configurable shaped crafting recipe for a light block (custom shape, ingredients and result level in config.yml).
  • Crafting a light item on its own resets it to level 15.
  • Recipes are auto-unlocked for players on join and on /lightplus reload (configurable), with lightplus.recipe permission enforced.

Integrations

  • Land protection: placing, removing and adjusting light blocks is blocked in claims/regions the player can't build in — WorldGuard, GriefPrevention, GriefDefender, Residence, Towny, Lands, PlotSquared, BentoBox (toggle with land_protection.enabled).
  • Folia support: particle previews and recipe unlocks run on the correct region/entity schedulers.
  • faststats metrics, including lights_placed and lights_mined.
  • Modrinth update check on startup — logs to console and notifies lightplus.update holders on join (update_check: in config.yml, off by one toggle).

Placeholders (requires PlaceholderAPI)

  • %lightplus_version%, %lightplus_lights_placed%, %lightplus_lights_mined%
  • %lightplus_update_available%, %lightplus_latest_version%
  • %lightplus_max_level%, %lightplus_holding_light%, %lightplus_held_level% (player)

Control

  • Every feature is permission-gated.

Land Protection

LightPlus honors land/region protection plugins for every light-block action. Block place and break already go through standard Bukkit events, and the interaction paths (level rotation, shift-place, left-click removal) are checked against a simulated build/break event, so any plugin that cancels block break/place events is supported:

PluginChecked permission
WorldGuardbuild flag / region membership
GriefPreventionclaim build trust
GriefDefenderblock-place / block-break flags
Residencebuild / destroy / place flags
Townybuild / destroy permission for the plot
LandsBLOCK_PLACE / BLOCK_BREAK roles
PlotSquaredplot build permission
BentoBox (BSkyBlock, AcidIsland, OneBlock, …)island PLACE_BLOCKS / BREAK_BLOCKS
Any other plugin cancelling BlockBreakEvent / BlockPlaceEventits own rules

Set land_protection.enabled: false to disable these checks.

WorldGuard region flag — LightPlus also registers a lightplus-use StateFlag (default allow). /rg flag <region> lightplus-use deny blocks every light-block action in that region regardless of build permission, and independently of the toggle above. Requires a server restart to register (not /reload).

Sounds

Every LightPlus sound is defined in the sounds section of config.yml as a { sound, volume, pitch } block:

EntryWhen it plays
placeplacing a light block next to another (shift-right-click)
breakbreaking / removing a light block
level_changeraising the level with right-click (pitch rises with brightness)
level_offthe level wrapping past 15 back to 0

sound accepts a lower-case dotted key (block.lever.click), a namespaced key, or a custom resource-pack sound. sounds.enabled: false mutes everything; an empty sound: "" mutes just that one. Settings apply on /lightplus reload.

Placeholders

With PlaceholderAPI installed, LightPlus registers the lightplus expansion:

PlaceholderValue
%lightplus_version%running plugin version
%lightplus_lights_placed%lights placed since last start (server-wide)
%lightplus_lights_mined%lights mined since last start (server-wide)
%lightplus_update_available%true / false
%lightplus_latest_version%latest version on Modrinth (blank until checked)
%lightplus_pending_decay%light blocks currently waiting to decay
%lightplus_max_level%the player's max settable level in their world
%lightplus_holding_light%true / false
%lightplus_held_level%level of the held light item, blank if none

Config

grant_recipes_on_login: true

update_check:
  enabled: true
  notify_on_join: true

item:
  custom_name: true
  name: "<gold>Light Block <dark_gray>(<yellow>Level %level%<dark_gray>)"
  lore:
    - "<gray>Right-click a placed light to raise its level."

actions:
  adjust_level: true      # right-click to cycle level
  place_adjacent: true    # shift-right-click to place a light next to one
  left_click_break: true  # left-click a looked-at light to break it
  pick_block: true         # middle-click a light in Creative for a matching item
  scroll_level: true       # sneak + scroll on a light to step its level

limits:
  default_max_level: 15   # cap for players without a lightplus.maxlevel.<n> node
  world_max_levels: {}    # e.g. { world_nether: 7 }

decay:
  enabled: false          # remove player-placed lights after a while
  after_seconds: 120
  persist: true           # survive restarts via decay-data.yml

land_protection:
  enabled: true

sounds:
  enabled: true
  place:        { sound: block.stone.place, volume: 1.0, pitch: 0.8 }
  break:        { sound: block.stone.break, volume: 1.0, pitch: 0.8 }
  level_change: { sound: block.lever.click, volume: 0.8, pitch: 1.8 }
  level_off:    { sound: block.lever.click, volume: 0.8, pitch: 0.6 }

crafting_recipe:
  enabled: true
  result_level: 15
  items:
    A: GLASS
    B: GLOWSTONE
  recipe:
    - 'AAA'
    - 'ABA'
    - 'AAA'

messages:
  prefix: "<gradient:#FDC830:#F37335><bold>LightPlus</bold></gradient> <dark_gray>»</dark_gray> "
  action_bar_level_set: "<green>Set to <yellow>%level%</yellow> level"
  command_usage: "<red>Usage: /lightplus reload  |  /lightplus give (player) [level] [amount]"
  command_no_permission: "<red>You do not have permission to use this command."
  command_reloaded: "<green>LightPlus config reloaded."
  give_success: "<green>Gave <yellow>%amount%</yellow>x light (level <yellow>%level%</yellow>) to <yellow>%player%</yellow>."
  give_received: "<green>You received <yellow>%amount%</yellow>x light (level <yellow>%level%</yellow>)."
  player_not_found: "<red>Player '%player%' not found."
  invalid_number: "<red>'%value%' is not a valid number."

The generated config.yml includes detailed comments explaining every option.

Commands

CommandDescriptionUsagePermission
/lightplus helpInteractive command list (also shown with no arguments)./lightplus help—
/lightplus versionVersion, server, Folia and detected land-protection plugins./lightplus version—
/lightplus reloadReload config.yml./lightplus reloadlightplus.reload
/lightplus giveGive a player leveled light items./lightplus give <player> [level 0-15] [amount 1-64]lightplus.give

Alias: /lp. help and version are always available; each only lists the sub-commands you have permission for.

Permissions

PermissionDescriptionDefault
lightplus.useBase permission for all LightPlus features.true
lightplus.placePlace stored-level light blocks and shift-right-click adjacent placement.op
lightplus.breakBreak light blocks in survival/adventure (incl. left-click removal) and get items back.true
lightplus.adjustRight-click to cycle a placed light block's level.true
lightplus.recipeUse and be auto-granted the LightPlus recipes.op
lightplus.reloadRun /lightplus reload.op
lightplus.giveRun /lightplus give.op
lightplus.updateGet the "new version available" notice on join.op
lightplus.decay.exemptLight blocks this player places never decay.op
lightplus.maxlevel.<0-15>Highest level the player may set; the highest node held wins.—
lightplus.maxlevel.bypassIgnore every light-level cap.op

Servers & Players

Галерея

Survival Light BlockReset CraftingStonecutter RecipeRight Click Adjust Level

Последние версии

Все версии →
release

LightPlus 1.2.0

1.2.0
31 авг. 2026 г.164Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2, 26.3folia, paper, purpur
Скачать
Что нового
## [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 new `sounds` section in `config.yml` — each with its own `sound` key, `volume` and `pitch`, plus a master `sounds.enabled` toggle and per-sound muting via an empty `sound`. 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 cancels `BlockBreakEvent` / `BlockPlaceEvent`. Toggle it under the new `land_protection.enabled` option (default `true`). Added the corresponding plugins to `softdepend`. - `/lightplus give <player> [level] [amount]` (permission `lightplus.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 highest `lightplus.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 to `limits.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 give` is not clamped. - `actions` section in `config.yml` to individually disable the extra interactions: `adjust_level` (right-click level cycle), `place_adjacent` (shift-right-click place), `left_click_break` (left-click removal), and `pick_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. - Configurable `messages.prefix` — a MiniMessage snippet (a `LightPlus »` 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. With `messages.follow_client_locale` (on by default), each player gets the string from `messages.locales.<their client language>` when one exists (keyed by full locale like `zh_tw` or just the language `zh`), 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.sendLines` for multi-line MiniMessage output that keeps click/hover interactivity (sends `Component`s instead of legacy strings). - Named light items. The `item` config section gives crafted / dropped / given light items a MiniMessage display name (`%level%` token) and lore; `item.custom_name: false` restores 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.update` join notice), or the running build is *ahead* of the latest release (`/lightplus version` shows "dev build"). Configured under `update_check` (`enabled`, `notify_on_join`); the project id is hard-coded. Message key `messages.update_available` (`%current%` / `%latest%` / `%url%`). - Optional light-block decay (`decay` config section, off by default). When on, a player-placed light block is removed `decay.after_seconds` later; a repeating sweep clears expired blocks on their region thread. Pending lights are persisted to `decay-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 (identifier `lightplus`, 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%`. - WorldGuard `lightplus-use` region flag (StateFlag, default allow). Setting it to `deny` in a region blocks every LightPlus light-block action there — adjust, place, shift-place and both break paths — regardless of build permission, and independently of the `land_protection.enabled` toggle. Registered in `onLoad`; requires the flag registry, so it needs a server restart to take effect (not `/reload`). The WorldGuard API is a `provided` dependency (EngineHub repo) and is not shaded. ### Changed - Added a `README.md` (build / test / run-server docs) and a JUnit 5 test suite — `mvn test`, also run by `mvn 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. - Rewrote `config.yml` comments to explain the reasoning behind every option (how the land-protection check works, what `volume` above 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 reload` applies them without a restart. - Expanded `plugin.yml` command and permission descriptions. - The `/lightplus` command no longer carries a blanket `lightplus.reload` requirement; each sub-command checks its own permission, so `lightplus.give` can be granted independently. ### Fixed - MiniMessage messages containing a `<gradient:#hex:#hex>` (such as the new prefix) rendered as literal `<gradient::>` text — the legacy `&#RRGGBB` converter was rewriting the hex colours inside the tag. It now only rewrites hex when prefixed with `&`. - `registerCraftLightRecipe` could throw and abort plugin enable when an upgraded `config.yml` predated the `crafting_recipe` section (the shape resolved from jar defaults while `items` did 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 an `items` entry — and wrapped so any failure logs a warning and skips the recipe instead of disabling the plugin.
release

LightPlus 1.1.3

1.1.3
7 июл. 2026 г.66Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2folia, paper, purpur
Скачать
Что нового
## [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 in `config.yml` via a generic `crafting_recipe.items` (key → material) map and `crafting_recipe.recipe` shape list, with `enabled` and `result_level` options. Reapplied on `/lightplus reload`. Defaults to glass border / glowstone center, matching the previous hardcoded recipe. - `/lp` alias for `/lightplus`. - The configurable crafting recipe is now auto-discovered for players on join and on `/lightplus reload`, alongside the stonecutter recipes. - `lights_placed` and `lights_mined` custom 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 explicit `net.kyori` Adventure/MiniMessage dependencies (previously pinned to 4.17.0 and shaded unrelocated), letting `paper-api` supply its own matching Adventure version transitively — the pinned version was overriding Paper's and causing classpath conflicts (`cannot access ...PlayerHeadObjectContents` and similar errors).
release

LightPlus 1.1.2

1.1.2
31 мар. 2026 г.42Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1paper, purpur
Скачать
Что нового
## [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 expanded `spigotServer/run.sh` to auto-build the latest shaded jar, copy it into the local test server, and validate the required Java runtime. - Replaced `Location#toCenterLocation()` usage with explicit centered coordinates for broader server API compatibility. - Removed the duplicate manual placement sound from the normal light block placement path.
release

LightPlus 1.1.1

1.1.1
16 февр. 2026 г.36Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11paper, purpur
Скачать
Что нового
## [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`). - Configured `shadowJar` to include only bStats from runtime dependencies. - Relocated `org.bstats` classes into the plugin group package to avoid cross-plugin conflicts. - Build now produces a shaded plugin artifact via `./gradlew shadowJar`.
release

LightPlus 1.1.0

1.1.0
16 февр. 2026 г.21Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11paper, purpur
Скачать
Что нового
## [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_reloaded` ### Changed - Action bar level message now uses MiniMessage formatting. - Message handling was centralized via a dedicated `MessageService`. - Added `softdepend: [PlaceholderAPI]` to `plugin.yml`. - Updated build configuration with PlaceholderAPI repository/dependency.
release

LightPlus 1.0.0

1.0.0
16 февр. 2026 г.19Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11paper, purpur
Скачать
Что нового
First Version