BungeePlaceholderBridge-spigot icon

BungeePlaceholderBridge-spigot -----

A bridge plugin that allows BungeeCord plugins to use PlaceholderAPI placeholders from backend Spigo



Installation
For Server Owners
  1. BungeeCord Proxy: Put into your folderBungeePlaceholderBridge-Bungee-1.0.0.jarplugins/
  2. Each Spigot Backend Server:
    • Put into your folderBungeePlaceholderBridge-Bukkit-1.0.0.jarplugins/
    • Ensure PlaceholderAPI is also installed
  3. Restart all servers
For Developers (Using the API)
Add the API dependency to your BungeeCord plugin:

Maven:

<repositories>
<repository>
<id>jitpack.io</id>
<url> https://jitpack.io</url>
</repository>
</repositories>

<dependencies>
<dependency>
<groupId>com.github.13502544286</groupId>
<artifactId>BungeePlaceholderBridge</artifactId>
<version>v2.0.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
Gradle:

dependencies {
compileOnly 'com.github.13502544286.BungeePlaceholderBridge:BungeePlaceholderBridge:2.0.0'
}
API Usage Example
import com.mcplugin.bpb.api.PlaceholderBridge;
import net.md_5.bungee.api.connection.ProxiedPlayer;

public class MyPlugin extends Plugin {

public void onPlayerJoin(ProxiedPlayer player) {
PlaceholderBridge bridge = PlaceholderBridge.getInstance();

// Format a string with placeholders
bridge.format("Welcome %player_name%! Your rank is %vault_rank%.", player)
.thenAccept(formatted -> {
player.sendMessage(new TextComponent(formatted));
});

// Format by UUID (async-safe)
bridge.format("Hello %player_name%!", player.getUniqueId())
.thenAccept(formatted -> {
// Do something with the formatted text
});

// Check if text has placeholders before formatting
if (PlaceholderBridge.hasPlaceholders(message)) {
bridge.format(message, player).thenAccept(formatted -> {
// Use formatted message
});
}
}
}
Important: The method returns a . Never call on it from the main thread - this will deadlock the proxy!format()CompletableFuture<String>.join()

Commands
/bpb (BungeeCord only)
Command Description Permission
/bpb status Show plugin status (pending requests, cache size) bpb.admin
/bpb cache Show cache information bpb.admin
/bpb cache clear Clear the placeholder cache bpb.admin
/bpb test <text> Test placeholder resolution bpb.admin
/bpb help Show help message bpb.admin
Configuration
Currently, the plugin works out of the box with sensible defaults:

  • Cache expiry: 30 seconds (placeholder results are cached per-player to reduce network traffic)
  • Request timeout: 5 seconds (requests that don't receive a response in time will return the original text)
These settings may be made configurable in future versions.

Features
  • Async by design - Uses to never block the proxy threadCompletableFuture
  • Smart caching - Results are cached per-player to minimize Plugin Messaging channel traffic
  • Timeout handling - Requests that time out gracefully return the original unformatted text
  • Zero-config - Works immediately after installation, no configuration files needed
  • Lightweight - Minimal overhead, only processes messages that actually contain placeholders
  • PlaceholderAPI compatible - Works with all PlaceholderAPI expansions installed on backend servers
Protocol Details
The plugin uses two Plugin Messaging channels:

Channel Direction Purpose
bpb:request Bungee -> Spigot Send placeholder resolution requests
bpb:response Spigot -> Bungee Return resolved placeholder results
Request packet format:

[int] protocol version (1)
[long] request ID MSB
[long] request ID LSB
[long] player UUID MSB
[long] player UUID LSB
[String] text with placeholders

Response packet format:

[int] protocol version (1)
[long] request ID MSB
[long] request ID LSB
[String] resolved text
Resource Information
Author:
----------
Total Downloads: 4
First Release: May 29, 2026
Last Update: May 29, 2026
Category: ---------------
All-Time Rating:
0 ratings
Find more info at github.com...
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings