Ember
Developers Ember Bridge

Talk to your players' client.

A plugin for Spigot and Paper (1.8 and newer). Send notifications, waypoints, cooldowns and vignettes to anyone on Ember, or turn off mods that don't fit your game mode.

Notifications

A clean toast in the corner instead of another chat line.

Waypoints

Markers with distance, visible through walls. Per world, up to 64 per player.

Cooldowns

Pearl, gapple or ability timers right above the hotbar, with a progress bar.

Vignettes

Tint the edges of the screen: red when the zone closes, gold on a kill streak.

Mod rules

Turn off zoom, fullbright, toggle sprint and more while players are on your server.

Team markers

Teammates get a marker over their head with name and distance, even far away or behind walls.

Titles

Big centered titles with a subtitle and fades. They work on 1.7 too, which has no titles.

Detection

Know who plays on Ember, with their version, the moment they join.

Install

  1. Drop EmberBridge-1.1.0.jar into your server's plugins folder and restart.
  2. Edit plugins/EmberBridge/config.yml: your server name, which Ember mods to turn off and an optional welcome notification. Apply it with /emberbridge reload.
  3. Join with Ember and run /emberbridge demo to see everything at once. /emberbridge list shows who's on Ember.

Players on other clients aren't affected: they never register the channel, so nothing is sent to them. Behind BungeeCord or Velocity, install it on each backend server. Once Ember players see the plugin on your server, it gets an "Ember features" badge in the Ember server lists.

Use it from your plugin

Add the API jar as a compileOnly / provided dependency and depend: [EmberBridge] in your plugin.yml. Everything runs on the main thread.

import gg.ember.bridge.api.*;

public final class ArenaListener implements Listener {
    @EventHandler
    public void onEmberJoin(EmberPlayerJoinEvent e) {
        EmberPlayer ember = e.getEmberPlayer();
        ember.notify("Welcome to the arena", "First to 5 kills wins.");
        ember.setDisabledMods(Arrays.asList(EmberMod.ZOOM, EmberMod.FULLBRIGHT));
        ember.sendTitle("Round 1", "Fight!", 300, 2000, 600);
        ember.setTeam(game.getTeammates(e.getEmberPlayer().getPlayer()), "#4ADE80");
        ember.addWaypoint(Waypoint.builder("mid")
            .name("Middle")
            .location(arena.getCenter())
            .color("#FBBF24")
            .build());
    }

    @EventHandler
    public void onPearl(ProjectileLaunchEvent e) {
        if (!(e.getEntity() instanceof EnderPearl)) return;
        Player p = (Player) e.getEntity().getShooter();
        EmberBridge.player(p).ifPresent(ember ->
            ember.cooldown("pearl", "Ender pearl", 15_000, "#C084FC"));
    }
}

Mods you can turn off

zoomZoom
fullbrightFullbright
togglesprintToggle sprint
togglesneakToggle sneak
timechangerTime changer
nofogNo fog
clearweatherClear weather
waypointsPersonal waypoints (yours still show)
pingsParty pings
crosshair3rdThird person crosshair

The protocol

Not on Bukkit? It's plain JSON on the ember:bridge plugin channel, so any server software can speak it. Ember registers the channel when it joins and then says hello.

// server → client, on the "ember:bridge" plugin channel (UTF-8 JSON)
{"type":"notification","title":"Welcome","body":"Have fun"}
{"type":"waypoint.add","id":"mid","name":"Middle","x":0,"y":64,"z":0,"color":"#FBBF24"}
{"type":"waypoint.remove","id":"mid"}      {"type":"waypoint.clear"}
{"type":"cooldown.add","id":"pearl","name":"Ender pearl","millis":15000,"color":"#C084FC"}
{"type":"cooldown.remove","id":"pearl"}
{"type":"rules","disabled":["zoom","fullbright"]}
{"type":"vignette","color":"#E11D2E","opacity":0.4}
{"type":"title","title":"Round 1","subtitle":"Fight!","fadeIn":300,"stay":2000,"fadeOut":600}
{"type":"team","color":"#4ADE80","members":[{"uuid":"…","name":"Kairo","x":12.5,"y":64,"z":-3.2}]}

// client → server, right after joining
{"type":"hello","protocol":2,"version":"0.16.0+1.8.9","mc":"1.8.9"}

Limits: 64 waypoints, 8 cooldowns and 32 teammates per player, cooldowns up to 1 hour, notification titles up to 60 characters, big titles up to 40. The team list is sent whole every time (members missing from it are removed). Everything is cleared when the player leaves your server.