Перейти к содержимому
Mineforgian

WorldEditDisplay

A server-side plugin for Minecraft that adds visual selection rendering for WorldEdit.

Загрузки
1K
Подписчики
20
Обновлён
22 июня 2026 г.
Лицензия
Apache-2.0

Опубликован 5 января 2026 г.

WorldEditDisplay

Minecraft Version Java Version License

A server-side WorldEdit selection visualization plugin


About

WorldEditDisplay is a server-side plugin for Minecraft that adds visual selection rendering for WorldEdit. It intercepts WorldEdit's CUI (Client User Interface) protocol packets and renders selections using Display Entities on the server side. This means players can see their WorldEdit selections without installing any client-side mods.

Features

Selection Types

  • Cuboid - Box selections with edge lines and grid display
  • Polygon - 2D polygon boundaries with vertical columns
  • Ellipsoid - Smooth elliptical selections
  • Cylinder - Circular selections with adjustable height
  • Polyhedron - Complex 3D polyhedral structures

Visual Rendering

  • Uses Minecraft's Display Entity (TextDisplay) system
  • Customizable hex colors (#RRGGBBAA) for all visual elements
  • Adjustable line thickness and grid density
  • Translucent face filling for Cuboid, Polygon, and Polyhedron regions
  • Grid overlay for easier size calculation

Multi-language Support

The interface is available in multiple languages with automatic client language detection:

  • Traditional Chinese (zh_tw)
  • English (en_us)

Player Settings

Players can customize their own rendering preferences:

  • Choose preferred hex colors for elements
  • Enable or disable face filling
  • Adjust line thickness within server limits
  • Control grid spacing and density
  • Changes apply immediately

Selection Sharing

  • Share your WorldEdit selection with other players in real-time
  • Invite, accept, revoke, and unwatch shares via /wedisplay share
  • Each shared selection is displayed in a unique auto-generated color
  • Share relationships persist across server restarts

View All Mode (op-only by default)

  • Toggle monitoring of all online players' selections via /wedisplay view
  • Hide specific players from your view, toggle name labels, and list monitored players

Configuration System

  • Server-wide defaults in config.yml
  • Per-player overrides in player_config/*.yml
  • Hot reload without server restart

Requirements

  • Minecraft 1.20 ~ 1.21.x (Paper / Folia / Spigot)
  • Java 21 or higher
  • Required plugins:

Installation

  1. Make sure WorldEdit and PacketEvents are installed on your server
  2. Download WorldEditDisplay.jar
  3. Place it in your server's plugins folder
  4. Restart the server
  5. Edit plugins/WorldEditDisplay/config.yml if needed
  6. Use /wedisplayreload to reload the configuration

Commands

Admin Commands

/wedisplayreload - Reload plugin configuration

  • Permission: worldeditdisplay.reload (default: op)

Player Commands

/wedisplay set <renderer> <setting> <value> - Configure personal rendering settings

  • Example: /wedisplay set cuboid edge_color #FFD700FF
  • Permission: worldeditdisplay.use.settings

/wedisplay reset <renderer> [setting] - Reset to server defaults

  • Example: /wedisplay reset cuboid (reset all settings)
  • Example: /wedisplay reset cuboid edge_color (reset specific setting)

/wedisplay show [renderer] - Show current settings

  • Example: /wedisplay show (show all)
  • Example: /wedisplay show cuboid (show specific renderer)

/wedisplay toggle - Toggle rendering on/off

  • Quick command to enable or disable selection visualization
  • Works independently for each player

/wedisplay reloadplayer - Reload your personal configuration file

/wedisplay lang <language> - Set interface language

  • Example: /wedisplay lang en_us
  • Supported: zh_tw, en_us

/wedisplay share invite <player> - Invite a player to view your selection

  • Permission: worldeditdisplay.use.share.invite

/wedisplay share accept <player> - Accept a pending share invitation

  • Permission: worldeditdisplay.use.share.accept

/wedisplay share revoke <player> - Revoke a share you previously granted

  • Permission: worldeditdisplay.use.share.revoke

/wedisplay share unwatch <player> - Stop watching another player's selection

  • Permission: worldeditdisplay.use.share.unwatch

/wedisplay share list [page] - List current share relationships

  • Permission: worldeditdisplay.use.share.list

View All Sub-commands (op-only by default)

/wedisplay view - Toggle view-all mode (see all online players' selections)

  • Permission: worldeditdisplay.use.view

/wedisplay view hide <player> - Exclude a player from your view-all mode

  • Permission: worldeditdisplay.use.view.hide

/wedisplay view hideall - Exclude all online players from view-all mode

  • Permission: worldeditdisplay.use.view.hide

/wedisplay view unhide <player> - Remove exclusion for a player

  • Permission: worldeditdisplay.use.view.hide

/wedisplay view label - Toggle name label display for watched selections

  • Permission: worldeditdisplay.use.view.label

/wedisplay view list [page] - Show view-all monitoring status

  • Permission: worldeditdisplay.use.view.list

Configuration

The main configuration file is config.yml:

language:
  default: "en-us"              # Default language
  auto_detect: true             # Auto-detect player's client language
  allow_player_change: true     # Allow players to change language manually

renderer:
  cuboid:
    edge_color: "#FFD700FF"     # Color for edges in #RRGGBBAA
    edge_thickness: 0.05        # Line thickness
    grid_spacing: 8             # Grid spacing
    fill_enabled: true          # Enable face filling
    fill_color: "#FF000040"     # Face fill color
    # ... more settings

player_limits:
  thickness:
    min: 0.01                   # Minimum thickness
    max: 0.5                    # Maximum thickness players can set
  # ... more limits

Each renderer type has its own configuration section:

  • cuboid
image - **polygon** image - **ellipsoid** image - **cylinder** image - **polyhedron** image

How It Works

Core Components

  • Packet listener intercepts WorldEdit CUI protocol messages
  • Render engine creates Display Entities to visualize selections
  • Configuration manager handles server-wide and per-player settings
  • Language manager provides multi-language support

Rendering Technology

The plugin uses Minecraft's Display Entity system:

  • Display entities render the visual elements
  • More efficient than particle effects
  • Works with vanilla clients (no mods required)

Performance

  • Only updates when selections change
  • Server admins can limit grid density and segment counts
  • Each player's settings are independent

Permissions

worldeditdisplay.use:                    # Use visualization features (default: true)
worldeditdisplay.use.settings:           # Manage personal rendering settings (default: true)
worldeditdisplay.use.share:              # General share feature toggle (default: true)
worldeditdisplay.use.share.invite:       # Send share invitations (default: true)
worldeditdisplay.use.share.accept:       # Accept share invitations (default: true)
worldeditdisplay.use.share.revoke:       # Revoke granted shares (default: true)
worldeditdisplay.use.share.unwatch:      # Stop watching a shared selection (default: true)
worldeditdisplay.use.share.list:         # List share relationships (default: true)
worldeditdisplay.use.view:               # Toggle view-all mode (default: op)
worldeditdisplay.use.view.defaultenable: # Auto-enable view-all on join (default: op)
worldeditdisplay.use.view.hide:          # Hide players from view-all (default: op)
worldeditdisplay.use.view.list:          # List view-all monitoring status (default: true)
worldeditdisplay.use.view.label:         # Toggle name label display (default: true)
worldeditdisplay.use.view.label.defaultenable: # Auto-enable labels on join (default: true)
worldeditdisplay.reload:                 # Reload configuration (default: op)
worldeditdisplay.render.auto-enable:     # Automatically enable rendering on join (default: true)

About Auto-Enable Permission

The worldeditdisplay.render.auto-enable permission controls whether rendering is automatically enabled when a player joins the server:

  • With permission: Rendering is enabled by default when logging in
  • Without permission: Players must manually use /wedisplay toggle to enable rendering

This allows server admins to control which player groups have rendering enabled by default.

Usage

Basic Usage

  1. Use WorldEdit's //wand command to get the selection tool
  2. Left/right click blocks to define your selection
  3. The selection is automatically visualized (no extra steps needed)
  4. Use /wedisplay commands to customize the appearance

Customization Examples

# Change cuboid edges to solid diamond blue
/wedisplay set cuboid edge_color #55FF55FF

# Make lines thicker
/wedisplay set cuboid edge_thickness 0.08

# Change grid spacing
/wedisplay set cuboid height_grid_division 2

# Enable face filling with half-transparent red
/wedisplay set cuboid fill_enabled true
/wedisplay set cuboid fill_color #FF000080

# Toggle rendering on/off
/wedisplay toggle

# Reset all settings
/wedisplay reset cuboid

Building

To build the plugin from source:

mvn clean package

The compiled jar will be in target/WorldEditDisplay-version-platform.jar

Project Structure

src/main/java/dev/twme/worldeditdisplay/
├── event/          # CUI event system
├── display/        # Render engine
│   └── renderer/   # Renderer implementations
├── config/         # Configuration management
├── lang/           # Language system
├── command/        # Command handlers
├── listener/       # Packet listeners
└── player/         # Player data management

Contributing

Issues and pull requests are welcome.

License

See LICENSE file for details.

Credits

  • TWME-TW - Developer

Related Projects


Made with ❤️ by TWME-TW

Ченджлог

2.3.1Релиз26.1.1, 26.1.2, 26.2 · 22 июня 2026 г.

What's Changed

Full Changelog: https://github.com/TWME-TW/WorldEditDisplay/compare/2.3.0...2.3.1

2.3.0Релиз26.1, 26.1.1, 26.1.2 · 31 мая 2026 г.

WorldEditDisplay 2.3.0 - Particle Fallback Renderer, Floodgate Support & Cross-Version Compatibility

Summary

This release introduces a Particle Fallback Renderer that allows clients below Minecraft 1.19.4 (which lack TextDisplay entity support) to visualize WorldEdit selections via particle effects, Floodgate integration to detect Bedrock players and suppress incompatible CUI messages, bStats metrics collection with display method distribution tracking, automatic re-rendering on world change, and several compatibility fixes.

New Features

Particle Fallback Renderer

  • Added a full particle-based rendering system for clients without TextDisplay support (Minecraft < 1.19.4)
  • ViaVersion API integration to automatically detect client protocol version and select the appropriate renderer
  • Dedicated particle renderers for all region types: ParticleCuboidRenderer, ParticleCylinderRenderer, ParticleEllipsoidRenderer, ParticlePolygonRenderer, ParticlePolyhedronRenderer
  • Point cache optimization: region geometry is only re-computed when the selection changes; repeated ticks only send pre-computed particle packets
  • Players can manually switch between render modes via /wedisplay render [auto|text|particle|toggle]
  • Permission node: worldeditdisplay.use.render to allow switching render modes

Floodgate Support

  • Added Floodgate integration to detect Bedrock players on Geyser servers
  • CUI messages are automatically suppressed for Bedrock clients to prevent client-side issues
  • Soft-dependency on Floodgate (optional; no impact if Floodgate is not installed)

bStats Integration

  • Added bStats metrics for anonymous usage statistics
  • Display method distribution chart to track TextDisplay vs Particle fallback usage across online players
  • Helps guide future development priorities

World Change Handling

  • Added PlayerChangedWorldListener to automatically clear stale renders and re-render selections when a player changes worlds
  • Eliminates ghost renders left behind in the previous world

Improvements

  • Auto-merge new config keys on startup/reload: When upgrading from a previous version, any new configuration options added to config.yml in the plugin JAR are now automatically merged into the existing config file on disk. Existing user values are never overwritten — only genuinely missing keys are added. This eliminates the need to manually edit config.yml after updates. (/wedisplayreload also performs this merge.)
  • Updated plugin documentation with new image links
  • Improved .gitignore to exclude IDE configuration files
  • Enhanced share label position calculation accuracy (see bug fixes)
  • Optimized Spigot adventure shading configuration with clearer documentation

Bug Fixes

  • fix(render): Corrected shared label position calculation logic for proper visual alignment
  • fix(spigot): Downgraded adventure dependencies to 4.17.0 for PacketEvents compatibility on Spigot

Technical & Dependency Updates

  • Updated adventure-api from 4.17.0 to 5.1.1
  • Updated adventure-key from 4.17.0 to 5.1.1
  • Updated adventure-text-minimessage to latest
  • Updated adventure-text-serializer-legacy to latest
  • Updated adventure-text-serializer-bungeecord to latest
  • Added viaversion-api dependency for protocol version detection
  • Added floodgate-api dependency for Bedrock player detection
  • Added bstats-base dependency for metrics collection
  • Added OpenCollab and ViaVersion repository sources

System Requirements

Minecraft 1.20 ~ 1.21.x
Java 21+
Platform Paper / Folia / Spigot
PacketEvents 2.11.1+
WorldEdit Latest stable / FAWE
ViaVersion Optional (required for particle fallback auto-detection)
Floodgate Optional (required for Bedrock player detection)

Configuration Notes

  • No breaking configuration changes from 2.2.x.
  • New config keys (such as particle_fallback.*) are automatically merged into your existing config.yml on first startup after upgrading — no manual edits required.
  • New permission worldeditdisplay.use.render is available to control access to /wedisplay render.
  • Run /wedisplayreload after upgrading to ensure all new settings are applied.

Support

For issues, feature requests, or questions, please open an issue on our GitHub repository.

Full Changelog: 2.2.0...2.3.0

2.2.0Релиз26.1, 26.1.1, 26.1.2 · 16 мая 2026 г.

WorldEditDisplay 2.2.0 Selection Sharing, Multi-Platform Support & Performance Improvements

Summary

Major release introducing a Selection Sharing System that lets players share their WorldEdit selections with others in real-time, expanded multi-platform support (Paper, Folia, Spigot), a new RegionRenderer abstract base class for a more extensible rendering architecture, and numerous performance improvements with render caching and async operations.


New Features

Selection Sharing System

  • Added /wedisplay share command to invite other players to view your selection
  • Selections shared in real-time with persistent storage across sessions
  • Each shared selection is assigned a unique color generated automatically
  • Unused shared colors are released when sharing ends to optimize resources
  • Permission-based access control: worldeditdisplay.share required to use share commands
  • Share manager configuration is reloadable via /wedisplayreload

RegionRenderer Abstract Base Class

  • Introduced RegionRenderer abstract base class for a unified and extensible rendering architecture
  • Simplifies adding new region types and customizing render behavior

Multi-Platform Support

  • Added official support for Folia (region-threaded scheduling)
  • Added official support for Spigot (in addition to Paper)
  • Task scheduling is now platform-aware and routes to the correct scheduler automatically

Region Bounding Box & Distance Utilities

  • Added bounding box calculation methods to region objects
  • Added distance calculation methods between regions and players for range-based optimizations

Improvements

Rendering Performance

  • Introduced renderer-level caching to reduce redundant computation
  • Name cache logic for shared renders is now correctly invalidated to avoid stale reads
  • Clearing a sharer's render now properly releases associated resources
  • Render brightness and label position adjustments for improved visual quality

Async Settings I/O

  • Player settings are now saved asynchronously to prevent main-thread blocking
  • Config saves are deferred to a scheduled task to avoid repeated disk writes during rapid state changes

Thread Safety

  • Share request timeout is now stored in a thread-safe mutable field
  • Player multi-region map is now returned as an unmodifiable view to protect data integrity

Bug Fixes

  • fix(render): Corrected shared render name-cache invalidation logic to prevent unnecessary re-reads
  • fix(player): Returned unmodifiable multi-region map to protect internal data from external mutation
  • fix(share): Made share request timeout mutable for proper thread-safe handling
  • fix(render): Adjusted brightness calculation and label position for better display results

Technical & CI Updates

  • Updated GitHub Actions workflow file versions for improved stability
  • Added adventure-api exclusion filter to the Spigot Maven profile to prevent class conflicts
  • Removed SHARE-DESIGN.md design document (merged into implementation)

System Requirements

Component Requirement
Minecraft 1.20 ~ 1.21.x
Java 21+
Platform Paper / Folia / Spigot
PacketEvents 2.11.1+
WorldEdit Latest stable / FAWE

Configuration Notes

  • No breaking configuration changes from 2.1.x.
  • A new share section will be generated in config.yml on first launch.
  • Run /wedisplayreload after upgrading to apply any new defaults.

Download

Available on GitHub Actions and Modrinth.

Support

For issues, feature requests, or questions, please open an issue on our GitHub repository.

Full Changelog: 2.1.2...2.2.0

2.1.2Релиз26.1, 26.1.1, 26.1.2 · 21 апреля 2026 г.

WorldEditDisplay v2.1.2 Release Notes

Summary

Patch release fixing polygon regions not rendering when the selection has a flat vertical range (minY equals maxY).

Changelog

  • fix(region): Polygon region not displayed when minY == maxY
    • Fixed a bug where PolygonRegion.isDefined() used a strict maxY > minY check, which prevented rendering whenever the polygon's vertical range was flat (e.g. a single-block-height selection or when the first mm event arrives with equal min/max values).
    • Changed the condition to maxY >= minY so polygon regions are rendered correctly in all cases.

Notes

  • No public API changes.
  • Fully backward-compatible. No configuration changes required.

Full Changelog: https://github.com/TWME-TW/WorldEditDisplay/compare/2.1.1...2.1.2

2.1.1Релиз1.21.9, 1.21.10, 1.21.11 · 20 апреля 2026 г.

WorldEditDisplay v2.1.1 Release Notes

Summary

Release adding per-shape see-through settings, a rendering rebase task, and fixing a rendering issue with polyhedron selections.

Note: This release is not fully backward-compatible for configuration. renderer.global.see_through has been removed. Please update your config.yml before upgrading.

Changelog

  • fix(renderer): Polyhedron vertex visibility

    • Fixed a bug where polyhedron vertex markers were not displayed when only vertex (p) events had been received and faces (poly) had not yet been reported by WorldEdit. Vertex markers are now rendered immediately as vertex events arrive.
  • change(renderer): Per-shape see_through configuration

    • Removed the global renderer.global.see_through setting.
    • Added individual see_through settings for each shape type (cuboid, cylinder, ellipsoid, polygon, polyhedron).
    • Existing configurations using renderer.global.see_through must be updated to the new per-shape format.
  • feat(renderer): Rendering rebase task

    • Added a periodic rebase task to keep TextDisplay entities within view range as players move.
  • perf(renderer): Reduce ellipsoid grid line count

    • Changed calculateGridStep formula from radius / N to ceil(2 * radius / N).
    • radius_grid_division now controls the approximate number of grid lines per axis plane rather than being a divisor of the radius.
    • For mid-sized ellipsoids (e.g. radius 10), grid lines per plane drop from ~20 to ~5, reducing total line entity count by up to 75%.
  • chore(deps): Bumped TextDisplayShape dependency to 1.3.0.

Notes

  • No public API changes.
  • Configuration is not fully backward-compatible: renderer.global.see_through has been replaced with per-shape settings.

Full Changelog: https://github.com/TWME-TW/WorldEditDisplay/compare/2.1.0...2.1.1

2.1.0Релиз1.21.9, 1.21.10, 1.21.11 · 17 марта 2026 г.

✨ New Features

  • Cylinder & Ellipsoid Fill Options - New fill color and customization settings for Cylinder and Ellipsoid selection types
  • Enhanced Player Settings - Extended player preference system with renderer-specific settings for Cylinder and Ellipsoid rendering
  • Improved Settings Management - New PlayerRenderSettings class for more granular control over individual selection type rendering preferences

🚀 Improvements

  • Optimized Segment Configuration - Refined minimum and maximum segment count adjustments for Cylinder and Ellipsoid renderers for better visual fidelity
  • Enhanced Grid Thickness Control - Improved grid thickness adjustments for circular and elliptical selections
  • Default Rendering Behavior - Polygon face fill rendering now disabled by default for cleaner initial visualization (users can enable per preference)
  • Language File Restructuring - Reorganized language files for Cuboid, Cylinder, Ellipsoid, Polygon, and Polyhedron settings for better localization management
  • Settings Command Enhancement - Improved PlayerSettingsCommand to support new Cylinder and Ellipsoid customization options

📝 Configuration Updates

Several configuration options have been added to config.yml for Cylinder and Ellipsoid rendering. The new format maintains backward compatibility while introducing:

  • Fill options for Cylinder selections
  • Fill color settings for Ellipsoid selections
  • Adjustable segment count parameters for both shapes

🐛 Bug Fixes

  • Fixed rendering issues with Cylinder and Ellipsoid grid display
  • Improved stability for polygon fill rendering by disabling by default
  • Enhanced pull request detection reliability

📋 System Requirements

  • Java: 21
  • Minecraft: 1.21.x
  • WorldEdit: Latest stable version

Download

Available on GitHub Actions, Modrinth

Support

For issues, feature requests, or questions, please open an issue on our GitHub repository.

Full Changelog: https://github.com/TWME-TW/WorldEditDisplay/compare/2.0.0...2.1.0

2.0.0Релиз1.21.9, 1.21.10, 1.21.11 · 17 марта 2026 г.

🎨 WorldEditDisplay 2.0.0 - Redesigned Rendering with Customizable Colors & Enhanced Performance

We're thrilled to announce WorldEditDisplay 2.0.0, a major release featuring a complete redesign of the rendering system with extensive improvements to visual customization and performance optimization.

✨ New Features

  • Migrated to TextDisplayShapes Framework - Completely redesigned rendering system for more reliable and customizable display entity rendering
  • Customizable Colors - Support for custom hex colors (#RRGGBBAA) for all visual elements across all selection types
  • Region Face Filling - Enable visual face filling for Cuboid, Polygon, and Polyhedron selections to better visualize 3D regions
  • Dirty Region Optimization - Intelligent dirty region tracking to improve rendering performance and reduce unnecessary updates
  • Enhanced Renderer Management - Improved architecture for managing multiple renderer instances with better resource allocation
  • Single Region Rendering - New capability to render or clear individual regions without affecting others
  • CUI Color Override Support - Uses WorldEdit's CUI (Client User Interface) colors to enhance fill surface rendering
  • Debug Mode Enhancement - Added detailed WECUI message display in debug mode for easier troubleshooting

🚀 Improvements

  • Overall rendering architecture redesign for better performance and maintainability
  • Enhanced fill color processing for more accurate visual representation
  • Better multi-renderer management system
  • Improved region clearing and rendering efficiency
  • More robust packet handling and event listeners

🔧 Technical Updates

  • Java Requirement: Updated to Java 21
  • Dependencies: Updated to latest stable versions
  • Framework: Migrated to TextDisplayShapes library for enhanced display entity rendering

📋 Breaking Changes

  • Requires Java 21 (previously Java 17)
  • Rendering system has been completely redesigned - configurations may need adjustment for optimal appearance

⚠️ Important Configuration Update

You MUST regenerate your config.yml file before upgrading to 2.0.0

Due to significant architectural changes in the rendering system, the configuration format has changed substantially.

Action Required:

  1. Backup your current config.yml file
  2. Delete the old config.yml on your server
  3. Start the plugin - it will generate a new config.yml with the updated format
  4. Re-apply any custom settings from your backup to the new configuration file

Attempting to use the old configuration format may cause unexpected behavior or errors.

🐛 Stability

This release includes multiple fixes to ensure stability and better compatibility with the latest Minecraft versions.

Download

Available on GitHub Actions, Modrinth

Support

For issues, feature requests, or questions, please open an issue on our GitHub repository.

1.0.5Релиз1.21.9, 1.21.10, 1.21.11 · 12 января 2026 г.

What's Changed

New Contributors

Full Changelog: https://github.com/TWME-TW/WorldEditDisplay/compare/1.0.3...1.0.5

Комментарии

Загружаем…