WorldGuard ExtraFlags Plus (WGEFP)
Release 4.4.6
An advanced WorldGuard extension that adds 45+ extra region flags for full control of player behavior, teleportation, and region rules — featuring Folia support, item blocking (Mace, Firework, Wind Charge, Totem, Goat Horn, Spears), throwable-only blocking (disable-throw for egg, snowball, pearl, XP bottle), optional PacketEvents/ProtocolLib packet hooks for full disable-completely coverage, and fully customizable messages.
⚠️ Warning DO NOT USE BOTH PLUGINS TOGETHER!
If you're upgrading from
WorldGuardExtraFlagstoWorldGuardExtraFlagsPlus, make sure to:
- Remove the old
WorldGuardExtraFlags.jarplugin file- Only keep
WorldGuardExtraFlagsPlus.jaron your server- Both plugins cannot coexist - they will conflict with each other
📖 Full Flag Usage Guide
For comprehensive usage examples and detailed flag documentation, see the Complete Flag Usage Guide on the tinsware Wiki.
Why WorldGuard Extra Flags Plus?
- 🪓 Item & Throwable Control —
disable-completely(Mace, Firework, Wind Charge, Totem, Trident, Goat Horn, Spears),disable-throw(egg / snowball / pearl / XP bottle),deny-item-drops/deny-item-pickup - 🚪 Entry Control — XP or PlaceholderAPI level gates (
entry-min-level/entry-max-level), permission gates (entry-permission/entry-deny-permission),player-count-limit - ⚙️ Region Automation —
command-on-entry/exit,console-command-on-entry/exit, repeating console commands (console-command-repeat,console-command-timer), chat prefix / suffix with PlaceholderAPI; command flags support%uuid% - 🧱 Block & World Interaction — block place/break control (incl. buckets & waterlogged blocks),
enderchest-access,permit-workbenches,inventory-craft,villager-trade,disable-collision,chunk-unload,nether-portals,worldedit,lightning-damage,frostwalker,play-sounds - 🧟 Mob & Spawn Control —
deny-mobspawnby category or entity type - 🛡️ Player Protection & Effects —
godmode,keep-inventory(incl. DeluxeCombat),keep-exp,item-durability,fly/glide/ speed flags,blocked-effects/give-effects - ✨ Extras — Folia support, Paper 1.21 – 26.2+, customizable messages + cooldown, update checker,
hide-players&chambered-enderpearl(experimental)
Flag List (45+)
All managed with standard WorldGuard flag commands.
[teleport-on-entry / teleport-on-exit] [command-on-entry / command-on-exit]
[console-command-on-entry / console-command-on-exit] [console-command-repeat / console-command-timer]
[walk-speed / fly-speed] [fly] [glide](elytra-blocker) [frostwalker]
[keep-inventory / keep-exp] [godmode] [item-durability]
[chat-prefix / chat-suffix] [blocked-effects] [give-effects] [play-sounds]
[respawn-location] [join-location](not-on-folia) [worldedit]
[nether-portals] [chunk-unload] [villager-trade] [inventory-craft]
[allow-block-place / deny-block-place] [allow-block-break / deny-block-break]
[deny-item-drops / deny-item-pickup] [permit-workbenches] [enderchest-access]
[disable-completely] [disable-throw] [lightning-damage] [disable-collision]
[entry-min-level / entry-max-level] [entry-permission / entry-deny-permission]
[deny-mobspawn] [player-count-limit] [hide-players](experimental) [chambered-enderpearl](experimental)
Version Compatibility
| Minecraft | WorldGuard | ExtraFlagsPlus | Support |
|---|---|---|---|
| 1.21 – 26.2+ | 7.0.15+ | 4.4.6+ | ✅ Active |
| 1.7 – 1.19 | Older | ❌ No support |
The jar declares api-version: 1.21 in plugin.yml so Paper 1.21.x servers (and forks such as Canvas) load it.
Message Customization
All plugin messages live in plugins/WorldGuard/messages-wgefp.yml.
- Edit freely to match your style; color codes supported (
&c,&7, etc.); disable messages with"" - Placeholders:
{permission},{required},{current},{item},{workbench}(e.g.disable-throw-blockeduses{item}) - Message cooldown (default 2 seconds) prevents spam; reload instantly with
/wgefp reloador/wg reload
Authors
- Active Author & Developer of WGEFP: tinsware
- Original author: isokissa3 — https://joniaromaa.fi
Support & Community
- 📜 Release notes: GitHub Releases (latest: 4.4.6)
- 💬 Discord: Join our Discord server
⭐ If you like this project, give it a star on GitHub
All Versions
+ Add Version- Folia/Canvas + FAWE event threading
- fly flag cross-world teleport
- PlaceholderAPI optional dependency
https://github.com/tinsware/WorldGuardExtraFlagsPlus/releases/tag/v4.4.6
EntityPotionEffectEventon Paper 26.1 / MC 1.21.11** | FixedNoSuchMethodErrorforEntityPotionEffectEvent.getEntity()when running on Paper 26.1 — the listener now resolves the entity viaEntityEvent.getEntity()for binary compatibility across 26.1 and 26.2.- Bucket water/lava pickup and placement** |
allow-block-break/deny-block-breakandallow-block-place/deny-block-placenow apply correctly to bucket fill and empty actions (including waterlogged blocks). New configallow-block-break-settings.waterlogged-material-check(both|host|liquid, defaultboth) controls whether the host block, liquid, or both are checked for waterlogged blocks. fixLineWrappingapostrophe doubling on reload** |messages-wgefp.ymlno longer grows on every/wgefp reloadwhen messages contain apostrophes (e.g.can't), which was the root cause of corrupt YAML reports (files ballooning to several MB). The post-ConfigLib line-unwrapping pass now skips files with only single-line values, writes only when content actually changes, uses YAML-aware quote detection (socan''tis not mistaken for a closing quote), and outputs double-quoted strings for apostrophe text instead of re-escaping with single quotes.
### Changed
- Minimum Minecraft version** | Minimum supported Minecraft version is now **1.21** (dropped 1.20.x support).
plugin.ymlapi-version: 1.21unchanged. - Build dependencies** | Bumped compile-time dependencies for 4.4.5: WorldGuard
7.0.18, WorldEdit7.3.19, Paper API26.1.2.build.67-stable(compile target reverted from 26.2 for binary compatibility on 26.1), FAWE-Core2.15.3, ConfigLib4.8.1, PacketEvents API2.13.0, ProtocolLib5.4.0, FoliaLib0.5.1, EssentialsX2.21.2, PlaceholderAPI2.12.3, bStats3.2.1, Lombok1.18.46. WorldGuard moved from7.0.15-SNAPSHOTto stable7.0.18. - WGEFP YAML defensive loading** |
config-wgefp.ymlandmessages-wgefp.ymlnow quarantine oversize files (>300 KB) to<name>.corrupt.<timestamp>and regenerate defaults automatically (plugin keeps loading). At most 3 corrupt backups are kept per file type. YAML parse failures attempt one auto-recovery before disabling the plugin. Direct WGEFP YAML writes use atomic temp-file replacement to reduce crash corruption. - README and listing docs** | Refreshed for 4.4.5: new flags (
enderchest-access,console-command-timer), bucket/waterlogged fixes,%uuid%placeholder, dependency versions, and compatibility table (Paper 1.21 – 26.2+, WorldGuard 7.0.18+).
### Added
enderchest-access** | Controls whether players can open ender chests in a region (like WorldGuardchest-access, but ender chests only). Default flag value is allow — setdenyon a region to block access. Enabled by default (all-flags-control.enderchest-access: true). Usage:/rg flag <region> enderchest-access denyconsole-command-timer** | Repeats a console command at a fixed interval (1-300 seconds) while a player stays in the region. Timer resets on region exit — no cooldown persistence (hold-to-earn / KOTH semantics). Disabled by default — enable viaall-flags-control.console-command-timer: true. Usage:/rg flag <region> console-command-timer "60 give %player% diamond 1"%uuid%placeholder for command flags** | Parity with upstream [WorldGuardExtraFlags](https://github.com/aromaa/WorldGuardExtraFlags) by [@aromaa](https://github.com/aromaa) (commit [10dd871](https://github.com/aromaa/WorldGuardExtraFlags/commit/10dd871), Jul 2026). Command flags (command-on-entry,command-on-exit,console-command-on-entry,console-command-on-exit,console-command-repeat,console-command-timer) now support%uuid%and{uuid}in addition to existing%player%/%username%placeholders.
- PlaceholderAPI expansion** | New placeholder
%wgefp_players_in_region_<regionId>%returns the number of online players currently inside a region, summed across all worlds (case-insensitive region id, refreshed once per second, Folia-safe). Requires PlaceholderAPI; toggle viaall-flags-control.papi-placeholders(default:false— opt-in, enable to register the placeholder). all-flags-control.check-order** | New config option controlling the evaluation order of the block allow/deny flags (allow-block-place/deny-block-place,allow-block-break/deny-block-break).allow-first(default) keeps the current behavior — a material in the allow list is allowed even if also denied.deny-firstgives deny priority — a material in the deny list is denied even if also in the allow list. Global setting inconfig-wgefp.yml; existing servers are unaffected by the default.
### New flags
deny-mobspawn** | Blocks spawning of mobs in the listed categories inside a region:ALL_HOSTILE(everyEnemymob, bosses included),ALL_NEUTRAL(provoked-only mobs),ALL_PEACEFUL(all other living mobs),ALL(all three), or specificEntityTypenames (e.g.ZOMBIE,CREEPER). Hostile set is derived from theEnemyinterface so new hostile mobs are auto-covered. See.media/deny-mobspawn-categories.mdfor the exact per-category mob lists.entry-permission** | Sets the permission required to enter the region (e.g./rg flag <region> entry-permission myPlugin.myPermission.1). Takes priority overentry-deny-permissionwhen both are set.entry-deny-permission** | Denies entry to players holding the given permission (e.g./rg flag <region> entry-deny-permission myPlugin.myPermission.1). If both flags are set,entry-permissiontakes priority.
### Changed
- Default messages** | Unified all default message wording to a consistent WorldGuard-style phrasing (
&c&lHey! &r&7Sorry, but ...). Idea based on [PR #24](https://github.com/tinsware/WorldGuardExtraFlagsPlus/pull/24) by [@jruk8](https://github.com/jruk8). - Message cooldown** | Lowered the default
sendMessageCooldownfrom 3 to 2 seconds (only affects fresh installs — existing servers keep their configured value). disable-completely** |GOAT_HORNis now a blockable item, so goat horn usage can be disabled in regions (e.g./rg flag <region> disable-completely GOAT_HORN).
### Fixed
teleport-on-exit** | No longer triggers when the player teleports away (/wild,/spawn,/warp, ender pearls, portals) or respawns — it now only fires on real movement out of a region (walking, riding, knockback), so players can't be yanked back to the region's exit location by teleports. Restore the legacy behavior by settingall-flags-control.teleport-on-exit-ignore-teleportstofalse(default istrue).
### New flags
lightning-damage** | Lightning strikes appear visually but don't damage players when set to deny in a region. Useful for PvP arenas. ([PR #21](https://github.com/tinsware/WorldGuardExtraFlagsPlus/pull/21) by [@1wairesd](https://github.com/1wairesd))console-command-repeat** | Repeats a console command at a fixed interval (1-60 seconds) while a player stays in the region. Disabled by default — enable viaall-flags-control.console-command-repeat: true. Usage:/rg flag <region> console-command-repeat "20 give %player% diamond 1"
### Fixes
disable-completely** | Fixed hotbar-swap bypass: a player could sendHELD_ITEM_CHANGEimmediately beforeSTABin the same tick, bypassing the region flag. Packet hooks now intercept the slot switch before NMS applies it — if the target slot holds a blocked item, the switch is cancelled outright. (Issue identified by [@1wairesd](https://github.com/1wairesd))console-command-repeat** | FixedIllegalStateException: Dispatching command asyncon Folia servers by routing the command dispatch throughrunNextTick. Fixed flag value parsing: the underlying element flag no longer auto-prepends/to entries, so values like6 say hiare stored and parsed correctly.console-command-repeat** | Fixed reward farming by adding persistent cooldown tracking. The handler now records the last execution time for each flag entry. When a player exits and re-enters the region, the remaining interval is calculated from the last payout — preventing instant rewards on re-entry. On first entry, the command waits the full interval before any payout.console-command-repeat** | Fixed FoliaLib warning about 0-tick delay when the cooldown expired while the player was away. The catch-up command is now dispatched viarunNextTickinstead of passing0Lto the entity timer.
- blocked-effects, give-effects, and play-sounds skip tick work when the flag is inactive and there’s nothing to restore
- blocked-effects avoids calling hasBypass() every tick when no flag value applies (less LuckPerms/cache overhead)
- blocked-effects uses one runAtEntity task per tick instead of N+1 separate schedules
- Version 4.4.0** — feature and stability release after Folia/performance audit.
- Java 21** bytecode (
--release 21) for broader Paper **1.21.x** / **26.1–26.3** server compatibility. - Paper API** compile target: **
26.1.2.build.67-stable**; **plugin.yml** remains **api-version: '1.21'**. - FoliaLib shading** hardened: explicit shade includes + post-package check that **
WrappedBukkitTask** and **SpigotImplementation** exist in the jar (fixes **NoClassDefFoundError** breaking command-on-entry and all schedulers on Paper 26.x).
### Command flags
- Shared **
CommandFlagHandlerSupport** for entry/exit player and console command flags. - Entry commands dispatch only from **entered** regions with correct last-set tracking; exit commands run for **all** removed command sets.
- Player commands use **
runAtEntity**; console commands use **runNextTick**. - Scheduler self-test on enable logs **SEVERE** if FoliaLib is broken.
### Config & startup ([#14](https://github.com/tinsware/WorldGuardExtraFlagsPlus/issues/14), [#13](https://github.com/tinsware/WorldGuardExtraFlagsPlus/issues/13))
logging.verbose-startup-logs** (default **false**) — quiet console on large servers.Config.initialize()** in **onLoad()** before flag registration — disabled flags (e.g. **glide**) are not registered; reduces “plugin not installed” unknown-flag warnings.- Chunk-unload tickets: one summary line per world; collision init only when flag enabled.
### Give-effects ([#15](https://github.com/tinsware/WorldGuardExtraFlagsPlus/issues/15))
PotionEffectFlag** accepts **night_vision**, **minecraft:night_vision**, legacy names, and normalized spacing.
### Keep-inventory & combat log
keep-inventory-settings.combat-log-restore** (default **true**) — DeluxeCombat soft integration: snapshot inventory on combat-log quit inside keep-inventory regions, restore on next join.- Death handler priority **
HIGHEST** so other plugins are less likely to clear drops after keep-inventory applies.
### Block flags
allow-block-place-settings.require-membership** / **allow-block-break-settings.require-membership** — allow lists apply only to region **members/owners** (e.g. member-only sign placement).
### New flag: hide-players (experimental)
- Opt-in via **
all-flags-control.hide-players: true**, then **/rg flag <region> hide-players true**. - Hides players from others while inside the region (hub/lobby optimization via Bukkit **
hidePlayer**).
### Join-location
- Improved Paper/Folia/Canvas detection — prefers **
AsyncPlayerSpawnLocationEvent** over deprecated **PlayerSpawnLocationEvent** on modern servers.
### Folia / performance audit fixes
- Collision apply on join/world-change via **
runAtEntity** (not global **runNextTick**). - Chambered ender pearl** listener rewrite (thread-safety, scheduler).
- Player count limit** uses world-scoped player scan.
- Chunk-unload** batched async chunk tickets.
- Join-location** fallback uses **
teleportAsync**. - Fly/godmode** quit cache cleanup; **entry-level** placeholder cache eviction; **
onDisable** task cancel.
### Config documentation
- Inline comments for give-effects syntax, worldedit **
__global__** usage, glide disable behavior, hide-players setup.
## 4.3.13
###
disable-throw region flagSetFlag** listing **EGG**, **SNOWBALL**, **ENDER_PEARL**, **EXPERIENCE_BOTTLE** only (validated by **ThrowableItemFlag**); **ProjectileLaunchEvent** cancellation + **disable-throw-blocked** message ( **messages-wgefp.yml** ). Trident / wind charge remain on **disable-completely**. Toggle via **config-wgefp.yml** **all-flags-control.disable-throw**.
### Build / runtime targets (Maven)
- Minecraft / Paper
26.1.2**: compile against **io.papermc.paper:paper-api** pinned to **26.1.2.build.60-stable** (matches Paper repo [maven-metadata.xml](https://repo.papermc.io/repository/maven-public/io/papermc/paper/paper-api/maven-metadata.xml) **release** at time of update); bump this property when Paper ships newer **26.1.2.build.*** builds. **org.spigotmc:spigot-api** removed — Paper supplies the Bukkit API ([Paper project setup](https://docs.papermc.io/paper/dev/project-setup/)). javac--release 25** per Paper’s **26.1.x** toolchain recommendation (same doc).plugin.yml**: **api-version: '1.21'** so Paper / forks (e.g. Canvas) **1.21.x** accept the jar at load time; declaring **26.1.2** causesUnsupported API versionon those servers ([Paper plugin.yml](https://docs.papermc.io/paper/dev/plugin-yml/)).- Still bundled vs provided: **WorldEdit
7.3.18**, **WorldGuard7.0.15-SNAPSHOT**, **FAWE-Core2.12.0**, **bstats3.1.0**, **ConfigLib4.8.0**, **Lombok1.18.46**, **shade3.6.2**. **paper-repo** remains **last** in<repositories>to avoid probing EngineHub coords against Paper first.
### Join location (Paper / Folia)
- When
join-locationis enabled and the server provides Paper's [AsyncPlayerSpawnLocationEvent](https://jd.papermc.io/paper/io/papermc/paper/event/player/AsyncPlayerSpawnLocationEvent.html), register **AsyncJoinLocationListener** instead of deprecated SpigotPlayerSpawnLocationEvent, avoiding startup deprecation noise (aligned with [PR #12](https://github.com/tinsware/WorldGuardExtraFlagsPlus/pull/12)). - Plain Spigot (no async API): unchanged **
JoinLocationListener** and existing deprecation console hint. JoinLocationPlayerJoinListener** (PlayerJoinEvent, monitor): ifjoin-locationresolves at the player's spawn position and differs by block, teleport on the entity scheduler. Covers **Folia** (and similar cases) where async spawn handlers cannot reliably apply region queries before login ([Issue #1](https://github.com/tinsware/WorldGuardExtraFlagsPlus/issues/1)); uses **LocalPlayer** for the query like **JoinLocationListener**.
### WorldEdit flag + FastAsyncWorldEdit (FAWE)
WorldEditFlagHandler** now intercepts FAWE batch extent APIs (setBlocks,replaceBlocks, coordinatesetBlock,setBiome) in addition to per-blocksetBlock, so **worldeditDENY** is much harder to bypass under FAWE (addresses [Issue #7](https://github.com/tinsware/WorldGuardExtraFlagsPlus/issues/7)–style gaps).- Compile against **
FastAsyncWorldEdit-Core**provided(Modrinth Maven); WorldGuard’s transitive WorldEdit jars are excluded on the Spigot module so the patched **AbstractDelegateExtent** API matches runtime FAWE/WorldEdit. - Optional permissions: **
worldguardextraflagsplus.worldedit.bypass**, **worldguardextraflagsplus.worldedit.silent-deny**. - New message key **
worldedit-denied** inmessages-wgefp.yml/PluginMessages(reload to customize).
### Disabled flags in
config-wgefp.yml (handler null-safety)- When **
all-flags-control** turns off **fly** or **give-effects**, WorldGuard does not register those session handlers — **Session#getHandlerreturns null**. **PlayerListener**, **EntityPotionEffectEventListener**, and **RemoveEffectPacketListener** now check **Config.isFlagEnabled** and null handlers before use (fixes [Issue #9](https://github.com/tinsware/WorldGuardExtraFlagsPlus/issues/9) NPE on e.g.PlayerChangedWorldEvent).
###
fly after PLUGIN teleports (portals)- After **
PlayerTeleportEvent** (monitor), re-query **fly** at the destination and call **FlyFlagHandler#refreshFlyFromApplicableSet**, so flight matches regions when session move hooks do not run (e.g. [Issue #8](https://github.com/tinsware/WorldGuardExtraFlagsPlus/issues/8) portal plugins).
###
command-on-entry / console-command-on-entryinitialize(LocalPlayer, …)** added so commands run when the session starts **already inside** a region with the flag (previously only **onCrossBoundary** fired, so login/spawn inside the region did nothing). **console-command-on-entry** also aligns **isEmpty** checks with **command-on-entry**.- Command strings: strip a leading **
/** only when present — YAML pasted without **/** no longer turns **say hi** into **ay hi**. **command-on-exit** / **console-command-on-exit** use the same helper; skip blank lines after processing.
disable-completely — Vanilla spears (1.21.11+)- Block **spear** items: tier materials (
WOODEN_SPEAR,STONE_SPEAR,COPPER_SPEAR,IRON_SPEAR,GOLDEN_SPEAR,DIAMOND_SPEAR,NETHERITE_SPEAR) and the **SPEAR** shorthand (all tiers). - Riptide** interaction blocking extended to **spears** as well as **tridents** when the item is disabled in the region.
- Spear **Lunge** (packet **STAB**, including **Lunge** enchant use) is only reliably blocked when **PacketEvents** or **ProtocolLib** is installed; without either, Lunge may bypass Bukkit-only checks.
#### Packet-level blocking (optional plugins)
disable-completely** registers **PacketEvents** listeners when the PacketEvents plugin is present (primary): cancels relevant **serverbound** packets including spear **Lunge** via digging action **STAB**, plus use/interact/placement paths as implemented.- ProtocolLib** is supported as a **fallback** when PacketEvents is not used or hook registration fails.
#### Safe startup without PacketEvents / ProtocolLib
- Main plugin class avoids hard references to PacketEvents and ProtocolLib APIs; registration uses **reflection** so the jar loads cleanly when optional dependencies are absent (
provided/softdepend). - PacketEvents API entry uses **
com.github.retrooper.packetevents.PacketEvents** (correct package); avoids bogusio.github.retrooper...lookups that broke hook registration at runtime. ProtocolLibHelper** (give-effects) registers its listener via reflection only so the helper class does not require ProtocolLib on the classpath at load time.
#### New flag:
chambered-enderpearl *(experimental)*- Experimental.** State flag to mitigate **chambered ender pearl** style bypasses: tracks pearls thrown outside flagged regions and removes them when the shooter enters a region where the flag **denies** the behavior (handler + session integration; configurable via
config-wgefp.ymlflag toggle like other flags). Behavior and defaults may change in future releases.
#### Implementation Changes
- Minecraft teams**: Now uses Minecraft's native scoreboard team system (the only reliable method for entity-to-entity collision)
- Hybrid team-based approach**:
- If a player is the only member of their team, the plugin temporarily modifies that team's collision rule
- If a player is in a team with multiple members, creates a per-player team (
WGC_<hash>) to avoid affecting others - If a player has no team, adds them to a per-player team with collision disabled
#### TAB Plugin Integration
- Full API integration**: Added TAB plugin support with API integration
- Priority handling**: TAB integration takes priority over direct team manipulation when TAB is installed
- Conflict prevention**: Uses TAB's API to set collision rules, preventing TAB from overwriting collision settings
- Automatic fallback**: If TAB is not available, automatically falls back to direct team manipulation
#### Without TAB (Normal Usage)
- Direct team manipulation**: Uses Bukkit's Scoreboard API to directly modify team collision rules
- Team restoration**: Properly restores original team collision rules when players leave regions
- Per-player teams**: Creates temporary per-player teams when needed to avoid conflicts with shared teams
- Cleanup on disable**: Properly cleans up all teams and restores original settings when plugin disables
#### Warnings and Compatibility
- Load-time warning**: Displays a warning on plugin load about potential conflicts with team-using plugins
- Known plugin detection**: Warns about potential conflicts with couple known plugin names
- TAB support indication**: Shows supported plugins
#### Documentation Updates
- Updated documentation**: Comprehensive documentation file updated with TAB integration details
- Troubleshooting guide**: Added troubleshooting information for team conflicts
- Fixed
command-on-entryandcommand-on-exitflags causing thread check errors on Folia servers by using entity scheduler instead of global scheduler for player command dispatch - Fixed
disable-collisionflag causing player disconnections on Paper servers by properly handlingIllegalStateExceptionwhen removing players from teams - Fixed
disable-collisionflag on Folia servers - feature is now automatically disabled if team creation is not supported (prevents errors and warnings)
### Added
- Added support for
%player%and{player}placeholders incommand-on-entry,command-on-exit,console-command-on-entry, andconsole-command-on-exitflags (in addition to existing%username%and{username}placeholders) - Added EssentialsX godmode integration - the
godmodeflag now also disables EssentialsX godmode when entering regions with godmode disabled (EssentialsX is now a soft dependency)
### Changed
- Migrated configuration management to ConfigLib library for improved maintainability, automatic comment preservation, and better error handling
- Updated API version to 1.21 - plugin now officially supports Paper 1.21.10+, Spigot 1.21.x, and Folia 1.21.x
- Added inventory-craft flag - Block inventory crafting (2x2 grid) in regions
- Added Discord support link - Join our community: https://discord.gg/TCJAwsdqum
- Removed permit-completely flag - Use disable-completely instead (automatic migration included)
- Changed permit-workbenches CRAFT behavior - Now only blocks crafting table (3x3), not inventory crafting. Use deny-inventory-craft for inventory blocking.
- Automatic message migration: permit-completely-blocked → disable-completely-blocked
- Automatic message key addition for new flags
- File-based region migration runs automatically on plugin load
- Updated all documentation with new flags
- Added Discord community link
- Updated version compatibility tables
Existing permit-completely flags in region files will be automatically migrated to disable-completely on plugin load.
### 🔨 New Flag:
permit-workbenchesBlock workbench usage and crafting in regions! Supports: ALL, clear, anvil, cartography, craft, ender, grindstone, loom, smithing, stonecutter.
- Usage:**
/rg flag spawn permit-workbenches ALL
/rg flag spawn permit-workbenches ALL,ender
/rg flag spawn permit-workbenches craft,anvil
/rg flag spawn permit-workbenches clear
`
- Features:**
- Blocks right-click on workbenches
- Blocks crafting table GUI and 2x2 inventory crafting
- Optional block placement blocking via config
- New config file:
plugins/WorldGuard/config-wgefp.ymlNew message: permit-workbenches-blocked with {workbench} placeholder
### 🚫 New Flags: deny-item-drops & deny-item-pickup
Deny specific item drops and pickups in regions (works when WorldGuard's default flags are set to allow).
- Usage:**
`
/rg flag spawn deny-item-drops diamond,emerald
/rg flag spawn deny-item-pickup apple,bread
`
- Features:**
- Denies specific items from being dropped even if WorldGuard allows drops
- Denies specific items from being picked up even if WorldGuard allows pickups
- Works alongside WorldGuard's
item-drop and item-pickup flags
## 🔧 Improvements
- Messages file renamed:**
messages.yml → messages-wgefp.yml (avoids conflicts)Fixed logic: explicit workbench types now take precedence over ALL keyword
## 📊 Stats
- Total Flags:** 37 (was 34)
- Minecraft:** 1.20 – 1.21.10
- WorldGuard:** 7.0.13+
- Folia:** ✅ Fully supported
## 🔄 Migration
- Rename
plugins/WorldGuard/messages.yml to messages-wgefp.yml if you have custom messagesNew config-wgefp.yml` will be auto-created Fixed Riptide Enchantment Blocking
Fixed: permit-completely flag now fully blocks Riptide enchantment on tridents
Prevents Riptide boost, spinning animation, and all movement effects
Blocks right-click interactions before Riptide can activate
Rotation locking prevents spinning animation if event somehow fires
No longer requires enchantment removal (safer approach)
✨ New Features
Block Placement & Breaking Control
Added 4 new flags for fine-grained block control:
allow-block-place - Whitelist specific blocks that can be placed
deny-block-place - Blacklist specific blocks from being placed
allow-block-break - Whitelist specific blocks that can be broken
deny-block-break - Blacklist specific blocks from being broken
Usage Examples:
/rg flag spawn allow-block-place STONE,COBBLESTONE,GRASS_BLOCK
/rg flag spawn deny-block-place TNT,LAVA_BUCKET
/rg flag spawn allow-block-break STONE,COBBLESTONE
/rg flag spawn deny-block-break BEDROCK,SPAWNER
🔄 Update Checker
Automatically checks for updates from Spigot, GitHub, and Modrinth
Uses semantic version comparison for accurate update detection
Shows formatted update notifications in console
Runs automatically after server startup
🏪 Villager Trade Flag
New villager-trade flag to control villager trading in regions
Set to deny to prevent players from trading with villagers
Fully Folia-compatible
🚫 Disable Collision Flag
New disable-collision flag to disable player collision in regions
Players can pass through each other when enabled
Uses scoreboard teams for reliable collision control
Fully Folia-compatible
📝 PlaceholderAPI Chat Integration
Chat prefix and suffix now support PlaceholderAPI placeholders
Automatically processes placeholders if PlaceholderAPI is installed
Works seamlessly without PlaceholderAPI (graceful fallback)
Example: /rg flag spawn chat-prefix "&7[%vault_rank%] "
🪓 Trident Support
Added TRIDENT to permit-completely flag
Now supports: MACE, FIREWORK_ROCKET, WIND_CHARGE, TOTEM_OF_UNDYING, TRIDENT
Blocks all trident usage (throwing, melee, interactions)
📋 Technical Details
All new features are fully Folia-compatible
Update checker uses semantic version comparison
PlaceholderAPI integration uses reflection (soft dependency)
Collision system uses Bukkit scoreboard teams API
- Fork of WorldGuardExtraFlags with support of Folia, extra flags, customizable messages etc. (for now)
Detailed (4.3.0 - 4.3.2 - 4.3.3) logs under here: https://github.com/tins-dev/WorldGuardExtraFlagsPlus/releases