# Developer Overview Sign-API is a lightweight module that lets other plugins control nametags programmatically. You can read, override, and release nametag lines globally or per-viewer, and listen for reload events to reapply overrides. --- ## Maven / Gradle The Sign-API artifact is hosted on JitPack. Add it as a `compileOnly` / `provided` dependency so that Sign is not shaded into your plugin jar. **Repository:** *Gradle (Kotlin DSL):* ```kotlin repositories { maven("https://jitpack.io") } ``` *Maven:* ```xml <repository> <id>jitpack.io</id> <url>https://jitpack.io</url> </repository> ``` **Dependency:** *Gradle (Kotlin DSL):* ```kotlin compileOnly("com.github.Lodestones:Sign-API:1.0.0") ``` *Maven:* ```xml <dependency> <groupId>com.github.Lodestones</groupId> <artifactId>Sign-API</artifactId> <version>1.0.0</version> <scope>provided</scope> </dependency> ``` Add `Sign` as a dependency in your `paper-plugin.yml`: ```yaml dependencies: server: Sign: required: true load: BEFORE ``` --- ## Accessing the API The API is accessed through the static `SignAPI` class. The API instance is available after Sign has been enabled. ```java import gg.lode.sign.api.SignAPI; import gg.lode.sign.api.nametag.INametagManager; import gg.lode.sign.api.nametag.INametag; INametagManager manager = SignAPI.getNametagManager(); INametag nametag = manager.get(player); ``` --- ## Common Operations ### Get a player's nametag ```java INametag nametag = SignAPI.getNametagManager().get(targetPlayer); if (nametag == null) { // Player doesn't have a nametag return; } ``` ### Override lines globally All viewers see the overridden lines until `release()` is called or the plugin is reloaded. ```java nametag.setLines(List.of("<red>WANTED", "<gray>Bounty: 1000g")); // Undo nametag.release(); ``` ### Override lines per-viewer A specific viewer sees custom lines. Per-viewer overrides take priority over global overrides. ```java nametag.setLines(viewer, List.of("<green>Ally", "<gray>{health} HP")); // Undo for this viewer nametag.release(viewer); ``` ### Check for overrides ```java boolean hasGlobal = nametag.hasOverride(); boolean hasForViewer = nametag.hasOverride(viewer); ``` ### Listen for reloads All overrides are cleared when `/sign reload` is executed. Listen for `SignReloadEvent` to reapply them. ```java @EventHandler public void onSignReload(SignReloadEvent event) { // Re-apply overrides here } ``` Override lines support the same formatting as config lines — MiniMessage, PlaceholderAPI, `{player}`, `{health}`, and `<condition>` tags all work. --- ## Override Priority When resolving which lines to display for a given viewer: | Priority | Source | Description | |---|---|---| | 1 (highest) | Per-viewer override | Set via `setLines(Player, List)` | | 2 | Global override | Set via `setLines(List)` | | 3 (lowest) | Config | Lines from `config.yml` | --- ## Related Pages - [[Sign/Developers/API Reference]] — full interface documentation - [[Sign/Server Owners/Configuration]] — config values the API can override