# 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