
WorldGuard ExtraFlags Plus
Adds 30+ extra WorldGuard flags - Folia, Disable Mace & more, Permit entry by XP or PAPI, and more.
Changelog - Release 4.3.13
4.3.13
disable-throwregion flagSetFlaglistingEGG,SNOWBALL,ENDER_PEARL,EXPERIENCE_BOTTLEonly (validated byThrowableItemFlag);ProjectileLaunchEventcancellation +disable-throw-blockedmessage (messages-wgefp.yml). Trident / wind charge remain ondisable-completely. Toggle viaconfig-wgefp.ymlall-flags-control.disable-throw.
Build / runtime targets (Maven)
- Minecraft / Paper
26.1.2: compile againstio.papermc.paper:paper-apipinned to26.1.2.build.60-stable(matches Paper repomaven-metadata.xmlreleaseat time of update); bump this property when Paper ships newer26.1.2.build.*builds.org.spigotmc:spigot-apiremoved — Paper supplies the Bukkit API (Paper project setup). javac--release 25per Paper’s26.1.xtoolchain recommendation (same doc).plugin.yml:api-version: '1.21'so Paper / forks (e.g. Canvas) 1.21.x accept the jar at load time; declaring26.1.2causesUnsupported API versionon those servers (Paper 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-reporemains last in<repositories>to avoid probing EngineHub coords against Paper first.
Join location (Paper / Folia)
- When
join-locationis enabled and the server provides Paper'sAsyncPlayerSpawnLocationEvent, registerAsyncJoinLocationListenerinstead of deprecated SpigotPlayerSpawnLocationEvent, avoiding startup deprecation noise (aligned with PR #12). - Plain Spigot (no async API): unchanged
JoinLocationListenerand 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); usesLocalPlayerfor the query likeJoinLocationListener.
WorldEdit flag + FastAsyncWorldEdit (FAWE)
WorldEditFlagHandlernow intercepts FAWE batch extent APIs (setBlocks,replaceBlocks, coordinatesetBlock,setBiome) in addition to per-blocksetBlock, soworldeditDENY is much harder to bypass under FAWE (addresses Issue #7–style gaps).- Compile against
FastAsyncWorldEdit-Coreprovided(Modrinth Maven); WorldGuard’s transitive WorldEdit jars are excluded on the Spigot module so the patchedAbstractDelegateExtentAPI matches runtime FAWE/WorldEdit. - Optional permissions:
worldguardextraflagsplus.worldedit.bypass,worldguardextraflagsplus.worldedit.silent-deny. - New message key
worldedit-deniedinmessages-wgefp.yml/PluginMessages(reload to customize).
Disabled flags in
config-wgefp.yml(handler null-safety)- When
all-flags-controlturns offflyorgive-effects, WorldGuard does not register those session handlers —Session#getHandlerreturns null.PlayerListener,EntityPotionEffectEventListener, andRemoveEffectPacketListenernow checkConfig.isFlagEnabledand null handlers before use (fixes Issue #9 NPE on e.g.PlayerChangedWorldEvent).
flyafter PLUGIN teleports (portals)- After
PlayerTeleportEvent(monitor), re-queryflyat the destination and callFlyFlagHandler#refreshFlyFromApplicableSet, so flight matches regions when session move hooks do not run (e.g. Issue #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 onlyonCrossBoundaryfired, so login/spawn inside the region did nothing).console-command-on-entryalso alignsisEmptychecks withcommand-on-entry.- Command strings: strip a leading
/only when present — YAML pasted without/no longer turnssay hiintoay hi.command-on-exit/console-command-on-exituse 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 theSPEARshorthand (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-completelyregisters 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.
- Block spear items: tier materials (
Disable Collision Flag - Major Refactor
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
- 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
- Fixed
New Features
- Added inventory-craft flag - Block inventory crafting (2x2 grid) in regions
- Added Discord support link - Join our community: https://discord.gg/TCJAwsdqum
Breaking Changes
- 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.
Improvements
- 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
Documentation
- Updated all documentation with new flags
- Added Discord community link
- Updated version compatibility tables
Note:
Existing permit-completely flags in region files will be automatically migrated to disable-completely on plugin load.
WorldGuard ExtraFlags Plus v4.3.7
🔨 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 clearFeatures:
- 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.yml - New message:
permit-workbenches-blockedwith{workbench}placeholder
🚫 New Flags:
deny-item-drops&deny-item-pickupDeny 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,breadFeatures:
- 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-dropanditem-pickupflags
🔧 Improvements
- Messages file renamed:
messages.yml→messages-wgefp.yml(avoids conflicts) - Fixed logic: explicit workbench types now take precedence over
ALLkeyword
📊 Stats
- Total Flags: 37 (was 34)
- Minecraft: 1.20 – 1.21.10
- WorldGuard: 7.0.13+
- Folia: ✅ Fully supported
🔄 Migration
- Rename
plugins/WorldGuard/messages.ymltomessages-wgefp.ymlif you have custom messages - New
config-wgefp.ymlwill be auto-created
Bug Fixes 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
🎉 Version 4.3.5 Release 🔄 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
Details: github
Initial project upload.
- 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
