Double Doors Server

A Bukkit/Spigot plugin that opens mirrored double doors together, with low-latency syncing and optional compatibility handling for common server stacks.

357

Quick challenge

How far can you run before the mobs catch you?

Double Doors Server

Double Doors Server

GitHub Release

GitHub License

GitHub Issues

Modrinth Game Versions

Crowdin

Online players

Online servers

A Bukkit/Spigot plugin that opens mirrored double doors together, with low-latency syncing and optional compatibility handling for common server stacks.

Features

- Same-tick partner door sync (no scheduled 1-tick delay) - Strict mirrored pair matching for doors: - same door type - same facing direction - opposite hinge - side-by-side only - Optional recursive opening support for non-door openables (fence gates/trapdoors) - Per-player toggle: `/doubledoors toggle` - LuckPerms-friendly permission nodes - GriefPrevention compatibility check for linked-door claim access - Duplicate interaction debounce (helps packet duplication patterns seen with some Bedrock/Geyser flows) - Translation support via JSON language files (built-in + custom)

Compatibility

- Supports Minecraft Java Edition `26.1`.

Geyser / Floodgate

- Plugin declares soft-depends on `Geyser-Spigot` and `floodgate`. - A short duplicate-interaction debounce window is used to avoid rapid duplicate toggles on the same block.

LuckPerms

- Works through standard Bukkit permissions, so LuckPerms applies automatically. - Use `doubledoors.use` to allow/deny linked opening behavior.

GriefPrevention

- Plugin declares a soft-depend on `GriefPrevention`. - When present, linked-door interaction is checked against claim build permission before toggling the partner door.

Proxy Setup (Multi-Server)

DoubleDoors includes an optional Velocity proxy plugin for Geyser/Floodgate environments with multiple backend servers.

Proxy Features

- Shared SQL heartbeat/presence tracking across multiple proxies - Automatic detection of Geyser/Floodgate clients - Support for SQLite and MySQL databases - Connection pooling via HikariCP for efficient SQL resource usage

Proxy Installation

1. Download the proxy JAR from the releases page (`doubledoors-proxy-<version>.jar`) 2. Place it in your Velocity `plugins/` directory 3. Restart the proxy 4. A `plugins/DoubleDoors/proxy-config.properties` file will be generated

Proxy Configuration

Edit `plugins/DoubleDoors/proxy-config.properties`:

```properties

Enable SQL heartbeat reporting (requires Geyser/Floodgate on this proxy)

sql.enabled=false

JDBC URL for the shared database

SQLite example: jdbc:sqlite:plugins/DoubleDoors/doubledoors.db

MySQL example: jdbc:mysql://localhost:3306/doubledoors

sql.jdbcUrl=jdbc:sqlite:plugins/DoubleDoors/doubledoors.db

SQL authentication (leave blank for SQLite)

sql.username= sql.password=

Unique proxy identifier (for multi-proxy setups)

sql.proxyId=velocity-main

Heartbeat interval in seconds (minimum 5 seconds)

sql.heartbeatSeconds=30 ```

Multi-Proxy Example

For a setup with multiple Velocity proxies reporting to a shared MySQL database:

Proxy 1: ```properties sql.enabled=true sql.jdbcUrl=jdbc:mysql://db.example.com:3306/doubledoors sql.username=dd_user sql.password=dd_pass sql.proxyId=velocity-us sql.heartbeatSeconds=30 ```

Proxy 2: ```properties sql.enabled=true sql.jdbcUrl=jdbc:mysql://db.example.com:3306/doubledoors sql.username=dd_user sql.password=dd_pass sql.proxyId=velocity-eu sql.heartbeatSeconds=30 ```

Commands

- `/doubledoors reload` - reload config - `/doubledoors toggle` - toggle behavior for yourself - `/doubledoors server-toggle` - toggle behavior server-wide

Permissions

- `doubledoors.use` (default: `true`) - `doubledoors.toggle` (default: `true`) - `doubledoors.reload` (default: `op`) - `doubledoors.server-toggle` (default: `op`)

Config

`src/main/resources/config.yml`

- `enableRecursiveOpening` (default: `true`) - `recursiveOpeningMaxBlocksDistance` (default: `10`) - `enableDoors` (default: `true`) - `enableFenceGates` (default: `true`) - `enableTrapdoors` (default: `true`) - `enableVillagerLinkedDoors` (default: `true`) - `serverWideEnabled` (default: `true`) - `language` (default: `en_US`)

Language files:

- Built-in fallback file: `src/main/resources/lang/en_US.json` - Runtime custom language folder: `plugins/DoubleDoors/lang/` - Set active language with `language: <code>` in `config.yml` (example: `language: de_DE`) - Custom files are JSON objects of key/value strings and override built-in messages when present.

Build

Requirements:

- Java 25 - Maven

Build command:

```bash mvn -DskipTests package ```

Output jar is generated under `target/`.

License

Licensed under the GNU General Public License v3.0. See `LICENSE`.

ADS