WorldEditDisplay

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

636

Quick challenge

How far can you run before the mobs catch you?

WorldEditDisplay

WorldEditDisplay

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: - PacketEvents 2.11.1+

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`:

```yaml 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: - polyhedron image - polyhedron image - polyhedron image - polyhedron 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

```yaml 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: - Without 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 ```bash

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:

```bash 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

- WorldEdit - The core editing tool - WorldEditCUI - Client-side CUI mod (protocol reference) - PacketEvents - Packet handling library - TextDisplayShapes - Shape rendering library used by the plugin

---

Made with ❤️ by TWME-TW

ADS