COWMODSКаталог модов

GlowAPI

Make players and entities glow in any chat color, per receiving player - two viewers can see the same player in two different colors.

1430обновлён 23 окт. 2026 г.
БиблиотекиУтилиты

Описание

Discord Release Downloads Servers License

Built with Java 8 Available for Paper Available for Purpur Available for Spigot Available for Bukkit

Chat with us on Discord

GlowAPI

Makes players and entities glow in any of the sixteen chat colors, and does it per receiving player.


The vanilla glowing effect is one flag on the entity, so it looks the same to everyone who can see it. That's fine until you want it to mean something. A team plugin wants your own team outlined green and the enemy red, at the same time, on the same entity. A staff tool wants a vanished player outlined only for other staff. A minigame wants the last player alive highlighted for the spectators and nobody else.

None of that is possible with one server-side flag. GlowAPI does it client-side instead: the glow bit and the scoreboard team that carries the color are sent to each viewer individually, so player A can see player B glowing red while player C sees that same player B glowing blue, and player B sees nothing at all.

This is a maintained continuation of InventivetalentDev's GlowAPI, which stopped being updated years ago. Same package, same class, same method signatures - plugins written against the old one keep working without a single code change.


What changed

The old version needed PacketListenerAPI installed alongside it, and that dependency died first. When it stopped being updated, everything built on GlowAPI went with it.

The packet layer is now PacketEvents, bundled inside the jar and relocated, so nothing else has to be installed and nothing collides with another plugin's copy. That also carried the supported range from roughly 1.19 up to the current release.

old GlowAPIGlowAPI 2.0
Packet layerPacketListenerAPI (dead)PacketEvents, bundled
Extra plugins to installonenone
Minecraft versionsup to ~1.191.9 through 26.3
Public API-unchanged

Minecraft 1.8.x is not supported and won't be. The glowing effect didn't exist before 1.9, so there is nothing to send.


Requirements

  • Bukkit, Spigot, Paper or a fork, on Minecraft 1.9 or newer
  • Nothing else. PacketEvents is inside the jar

If you already run PacketEvents as its own plugin, GlowAPI notices and uses that instance instead of starting a second one.

Drop the jar in plugins/ and restart. There is no setup step - the plugin is idle until another plugin asks it for something, or until you type /glow.


Glow by permission, no code

Not every server wants to write a plugin to use this. Set auto-glow.enabled: true in config.yml and give a group glowapi.auto.<color>, for example glowapi.auto.gold for your VIP rank in LuckPerms. Everyone holding it glows in that color for every other player.

If a player holds several, the first in this order wins: black, dark_blue, dark_green, dark_aqua, dark_red, dark_purple, gold, gray, dark_gray, blue, green, aqua, red, purple, yellow, white. After changing permissions, /glowapi reload applies them to players who are already online. Only glows handed out this way are taken back, so /glow and other plugins keep theirs.


Using it from your plugin

Add GlowAPI as a soft dependency in your plugin.yml:

softdepend: [GlowAPI]

Then call it. Every method is static, so there is no instance to fetch and no service to look up:

// green for one viewer
GlowAPI.setGlowing(target, GlowAPI.Color.GREEN, viewer);

// red for everyone online
GlowAPI.setGlowing(target, GlowAPI.Color.RED, Bukkit.getOnlinePlayers());

// stop glowing for that viewer
GlowAPI.setGlowing(target, (GlowAPI.Color) null, viewer);

The one thing to watch is timing on join. A player isn't ready to receive entity packets in the same tick they fire PlayerJoinEvent, so give it a moment:

@EventHandler
public void onJoin(PlayerJoinEvent event) {
    Bukkit.getScheduler().runTaskLater(this, () ->
        GlowAPI.setGlowing(event.getPlayer(), GlowAPI.Color.DARK_AQUA, Bukkit.getOnlinePlayers()), 10L);
}

Getting the API into your build

The artifact lives in Codeberg's package registry.

Maven

<repositories>
  <repository>
    <id>codeberg-glowapi</id>
    <url>https://codeberg.org/api/packages/LucasTHCR/maven</url>
  </repository>
</repositories>

<dependencies>
  <dependency>
    <groupId>org.inventivetalent</groupId>
    <artifactId>glowapi</artifactId>
    <version>2.2.0-RELEASE</version>
    <scope>provided</scope>
  </dependency>
</dependencies>

Gradle (Kotlin DSL)

repositories {
    maven("https://codeberg.org/api/packages/LucasTHCR/maven")
}

dependencies {
    compileOnly("org.inventivetalent:glowapi:2.2.0-RELEASE")
}

Gradle (Groovy DSL)

repositories {
    maven { url 'https://codeberg.org/api/packages/LucasTHCR/maven' }
}

dependencies {
    compileOnly 'org.inventivetalent:glowapi:2.2.0-RELEASE'
}

provided and compileOnly are not a detail you can skip. GlowAPI is GPLv3, so shading it into your own jar would put your whole plugin under GPLv3 as well. Compiling against it and letting the server supply the jar at runtime does not - your plugin keeps whatever licence you chose. It also means your users install one GlowAPI, not one copy per plugin.

Server owners install the jar from the download page; nothing extra goes into your build.

The full surface

MethodDoes
setGlowing(Entity, Color, Player)Sets the color of one entity for one viewer
setGlowing(Entity, Color, Collection<Player>)Same, for several viewers
setGlowing(Collection<Entity>, Color, Player)Several entities, one viewer
setGlowing(Collection<Entity>, Color, Collection<Player>)Several entities, several viewers
setGlowing(Entity, boolean, Player)Glow on or off in the default white
setGlowing(Entity, Color, String tagVisibility, String push, Player)As above, overriding the team's name-tag and collision rules for this call
isGlowing(Entity, Player)Whether that viewer currently sees it glowing
isGlowing(Entity, Collection<Player>, boolean checkAll)checkAll decides between all viewers and any viewer
getGlowColor(Entity, Player)The Color that viewer sees, or null
initTeam(Player)Creates the glow teams for a viewer. Runs on join by itself; you only need it if you build your own login flow

Color is the sixteen chat colors - BLACK, DARK_BLUE, DARK_GREEN, DARK_AQUA, DARK_RED, DARK_PURPLE, GOLD, GRAY, DARK_GRAY, BLUE, GREEN, AQUA, RED, PURPLE, YELLOW, WHITE - plus NONE.

NONE means glowing without joining a color team, which the client draws in white. Passing null instead of a Color is the one that turns the glow off.

Anything with a UUID works, not just players: mobs, armor stands, dropped items, item frames.


Commands

The commands exist so you can check the plugin works without writing code first. The real interface is the API.

CommandPermissionDoes
/glow <color|off> [player]glowapi.command.glowMakes a player glow for everyone online. Without a name, yourself
/glowapi reloadglowapi.command.adminRe-reads config.yml and rebuilds the teams
/glowapi versionglowapi.command.adminPrints the running version
/glowapi debugglowapi.command.adminShows the detected client version and the colour ids being sent

Both permissions default to OP. Tab completion covers the colors and the online players.


Configuration

Four values, and the defaults are what you want unless you have a reason otherwise.

# always | never | hideForOtherTeams | hideForOwnTeam
nameTagVisibility: always

# always | never | pushOtherTeams | pushOwnTeam
collision: always

# auto | always | never
modern-team-colors: auto

auto-glow:
  enabled: false

bstats: true

modern-team-colors exists because Minecraft encodes colours as a bit field - blue, green, red, bright - and clients from 26.1 on read the red and blue bits the other way round. Left alone, aqua reaches those clients as yellow and dark_blue as dark_red, while green, gray, black and white look fine because their red and blue bits are the same. auto swaps the two bits for clients on 26.1 and newer and leaves older ones untouched, so it is correct whatever your players connect with. It follows each viewer's client, not the server, so a mixed-version server behind a protocol translator is handled too. /glowapi debug shows you what is being sent.

bstats: true sends anonymous server counts to bStats. Set it to false and nothing is sent.

The color is carried by a scoreboard team, and a team also decides whether its members' name tags are visible and whether they push each other. Those two settings are what a glowing player inherits along with the color, which is why they're configurable here rather than being fixed.

Set collision: never and glowing players walk through each other, which is usually a surprise rather than a feature. Leave both on always and glow is purely cosmetic.

A plugin that needs different rules for one particular call can pass them to setGlowing directly instead of changing the file.


A note on other scoreboard plugins

The teams are named GAPI#<COLOR> and are sent to the client only. They never touch the server-side scoreboard, so a tab-list or nametag plugin managing its own teams won't be overwritten.

The overlap that does exist is the client's, not the server's: a player can only be in one team at a time on the client. If another plugin puts a player in a client-side team for a prefix, whichever of the two sent its packet last is the one the client keeps. This is a limitation of the vanilla protocol, not something either plugin can work around.


Support

Maintained by LucasTHCR. Original work by InventivetalentDev.

Bug reports and questions go to dc.gg/paperstream. Include your server version and the plugin doing the calls - glow bugs are almost always a conflict with something else touching teams or entity metadata, and knowing what else is installed saves a round of guessing.


License

Copyright (C) 2026 LucasTHCR

GlowAPI is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 3 as published by the Free Software Foundation.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for details.

The original GlowAPI was released under the MIT License by Haylee Schäfer, and those terms still govern that original code. The jar as a whole is GPLv3 because the bundled PacketEvents is GPL-3.0, and a work containing GPL-3.0 code has to be passed on under GPL-3.0 in full. MIT is GPL-compatible, which is what makes that possible.

Short version: use it, study it, change it, pass it on. Anything you distribute that is built on it has to be GPLv3 too and has to ship its source.

This does not reach into your plugin. Calling GlowAPI at runtime, with it installed as its own jar next to yours, is not distributing a combined work. Your plugin stays under whatever license you picked for it. What GPLv3 asks is that you don't shade GlowAPI into your own jar and then ship that under different terms.

Галерея

Последние версии

Все версии →
release

2.2.1-RELEASE

2.2.1-RELEASE
23 окт. 2026 г.35Minecraft: 1.10, 1.10.1, 1.10.2, 1.11, 1.11.1, 1.11.2, 1.12, 1.12.1, 1.12.2, 1.13, 1.13.1, 1.13.2, 1.14, 1.14.1, 1.14.2, 1.14.3, 1.14.4, 1.15, 1.15.1, 1.15.2, 1.16, 1.16.1, 1.16.2, 1.16.3, 1.16.4, 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.10, 1.21.11, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.9, 1.9.1, 1.9.2, 1.9.3, 1.9.4, 26.1, 26.1.1, 26.1.2, 26.2, 26.3bukkit, folia, paper, purpur, spigot
Скачать
Что нового
### Changed - Built against PacketEvents 2.14.0, the stable release with Minecraft 26.3 support. 2.2.0 still bundled a 2.14.0 snapshot. - New project icon. - `LICENSE` is the plain GPL-3.0 text again. A source file header had ended up at the top of it. - The Maven artifact for this version is `org.inventivetalent:glowapi:2.2.1-RELEASE`.
release

2.2.0-RELEASE

2.2.0-RELEASE
12 окт. 2026 г.25Minecraft: 1.10, 1.10.1, 1.10.2, 1.11, 1.11.1, 1.11.2, 1.12, 1.12.1, 1.12.2, 1.13, 1.13.1, 1.13.2, 1.14, 1.14.1, 1.14.2, 1.14.3, 1.14.4, 1.15, 1.15.1, 1.15.2, 1.16, 1.16.1, 1.16.2, 1.16.3, 1.16.4, 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.10, 1.21.11, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.9, 1.9.1, 1.9.2, 1.9.3, 1.9.4, 26.1, 26.1.1, 26.1.2, 26.2, 26.3bukkit, folia, paper, purpur, spigot
Скачать
Что нового
### Added - Auto-glow by permission. With `auto-glow.enabled: true`, a player holding `glowapi.auto.<color>` glows in that color for everyone, for example `glowapi.auto.gold` on a VIP group in LuckPerms. No code and no second plugin needed. `/glowapi reload` re-applies the colors after a permission change. Only glows handed out this way are taken back, so `/glow` and other plugins keep theirs. Off by default. ### Changed - First stable release with the 26.3 color fix and the Folia support from 2.1.x, so servers on the default `release` update channel get them as well. - The Maven artifact for this version is `org.inventivetalent:glowapi:2.2.0-RELEASE`.
beta

GlowAPI 2.1.1-BETA

2.1.1-BETA
24 сент. 2026 г.29Minecraft: 1.10, 1.10.1, 1.10.2, 1.11, 1.11.1, 1.11.2, 1.12, 1.12.1, 1.12.2, 1.13, 1.13.1, 1.13.2, 1.14, 1.14.1, 1.14.2, 1.14.3, 1.14.4, 1.15, 1.15.1, 1.15.2, 1.16, 1.16.1, 1.16.2, 1.16.3, 1.16.4, 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.10, 1.21.11, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.9, 1.9.1, 1.9.2, 1.9.3, 1.9.4, 26.1, 26.1.1, 26.1.2, 26.2, 26.3bukkit, folia, paper, purpur, spigot
Скачать
Что нового
- Declares Folia support. GlowAPI only sends packets and never schedules world work, so nothing else had to change.
beta

GlowAPI 2.1.0-BETA

2.1.0-BETA
19 сент. 2026 г.16Minecraft: 1.10, 1.10.1, 1.10.2, 1.11, 1.11.1, 1.11.2, 1.12, 1.12.1, 1.12.2, 1.13, 1.13.1, 1.13.2, 1.14, 1.14.1, 1.14.2, 1.14.3, 1.14.4, 1.15, 1.15.1, 1.15.2, 1.16, 1.16.1, 1.16.2, 1.16.3, 1.16.4, 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.10, 1.21.11, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.9, 1.9.1, 1.9.2, 1.9.3, 1.9.4, 26.1, 26.1.1, 26.1.2, 26.2, 26.3bukkit, paper, purpur, spigot
Скачать
Что нового
Minecraft 26.3 support. 26.3 inserted three new packets, which shifted the team packet that glowing rides on from id 109 to 111. Every earlier build is refused by PacketEvents on 26.3 and disabled on startup. Tested on a real Paper 26.3 server: the plugin enables cleanly, all glow teams are created and parsed correctly by the client, setting and clearing colours works, and the red/blue correction for clients on 26.1 and newer behaves as it should. **Why BETA:** PacketEvents has the 26.3 support merged but has not released it yet, so this build bundles the official snapshot. Nothing in GlowAPI itself changed. The next version will be a normal release built against the PacketEvents release, with no further changes. On 26.2 and older, 2.0.1 keeps working.
release

GlowAPI 2.0.1

2.0.1
28 авг. 2026 г.32Minecraft: 1.10, 1.10.1, 1.10.2, 1.11, 1.11.1, 1.11.2, 1.12, 1.12.1, 1.12.2, 1.13, 1.13.1, 1.13.2, 1.14, 1.14.1, 1.14.2, 1.14.3, 1.14.4, 1.15, 1.15.1, 1.15.2, 1.16, 1.16.1, 1.16.2, 1.16.3, 1.16.4, 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.10, 1.21.11, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.9, 1.9.1, 1.9.2, 1.9.3, 1.9.4, 26.1, 26.1.1, 26.1.2, 26.2bukkit, paper, purpur, spigot
Скачать
Что нового
Fixes a packet that older clients cannot handle. `initTeam` sends a `REMOVE` before the `CREATE` so that rebuilding the glow teams really changes their colour - a `CREATE` for a team the client already knows is ignored, so without it a config change would only ever reach players who reconnect. On a **fresh join**, though, the client has never seen those teams, and clients before 1.13 look the team up and then use it without checking for null. That `REMOVE` was going out for something that never existed there. It is now only sent when the teams were created for that player before, which is exactly the rebuild case it was added for. No API change, no config change. Everything in 2.0.0 applies unchanged.