Nimbusv1.0.0

Display Plugin

Clickable server signs and interactive NPCs for lobby servers, with FancyNpcs integration and cross-version compatibility.

The Nimbus Display plugin adds clickable server signs and interactive NPCs to lobby and hub servers. Players can click a sign or NPC to join a server, open a server selector inventory, or execute custom commands.

Compatibility

The Display plugin requires Spigot 1.13+ (signs) through the latest Paper/Folia versions. NPCs require Paper 1.20+ with FancyNpcs. See Compatibility for details.

Installation

The display plugin ships inside nimbus-module-display and is auto-deployed to every backend service at runtime via ServiceFactory.resolveModulePlugins() (alongside nimbus-sdk.jar, which it depends on). Templates stay user-owned; the plugin is copied directly into each service's plugins/ directory on every prepare.

FancyNpcs is a soft dependency — it's only pulled in when you actually use NPC features and the display module opts to download it on demand. Plain server-selector sign use doesn't require FancyNpcs.

Because deployment is runtime-only, deleting plugins/nimbus-display.jar from a live service's directory just triggers redeployment on the next service start — deletions self-heal, no template mutation required.

Commands

The unified command is /ndisplay (alias: /nimbusdisplay).

Signs

CommandPermissionDescription
/ndisplay sign set <target> [strategy]nimbus.display.signCreate a sign (look at a sign block)
/ndisplay sign removenimbus.display.signRemove the sign you're looking at

NPCs

CommandPermissionDescription
/ndisplay npc set <target> [strategy] [type] [skin]nimbus.display.npcSpawn NPC at your position
/ndisplay npc removenimbus.display.npcRemove nearest NPC (5 blocks)
/ndisplay npc edit <property> <value>nimbus.display.npcLive-edit NPC property
/ndisplay npc infonimbus.display.npcShow all properties of nearest NPC

Global

CommandPermissionDescription
/ndisplay listnimbus.display.listList all signs and NPCs
/ndisplay reloadnimbus.display.reloadReload config and respawn all

Creating NPCs

Output
/ndisplay npc set BedWars                         # Villager NPC
/ndisplay npc set BedWars least PLAYER Notch       # Player NPC with skin
/ndisplay npc set BedWars fill ZOMBIE              # Zombie NPC

Entity types: PLAYER, VILLAGER, ZOMBIE, SKELETON, PILLAGER, WANDERING_TRADER, IRON_GOLEM, ALLAY, ARMOR_STAND, and any other living entity type.

For PLAYER type, the optional skin argument sets the player name whose skin to use.

Live-editing NPCs

All properties can be changed live with /ndisplay npc edit. The NPC respawns immediately with new settings and the config is saved.

PropertyExampleDescription
typePLAYER, ZOMBIEEntity type
skinNotchPlayer skin (PLAYER type)
targetBedWarsTarget group or service
strategyleast, fill, randomRouting strategy
lookattrue, falseTurn head toward player
left_clickCONNECT, COMMAND /menu, INVENTORY, NONELeft-click action
right_clickINVENTORY, CONNECT, NONERight-click action
hologram&b&lBedWars|&7{players} onlineHologram lines (| = line break)
floating_itemtrue, RED_BED, offFloating item (true = from display config)
mainhandDIAMOND_SWORD, noneMain hand item
offhandSHIELD, noneOff hand item
headDIAMOND_HELMET, noneHelmet slot
chestDIAMOND_CHESTPLATE, noneChestplate slot
legsDIAMOND_LEGGINGS, noneLeggings slot
feetDIAMOND_BOOTS, noneBoots slot
burningtrue, falseVisual fire effect
posecrouching, sleeping, swimming, spin_attack, noneEntity pose
positionhereMove NPC to your position

Click actions

ActionDescription
CONNECTRoute player to best server in group (or specific service)
INVENTORYOpen server selector GUI with all services as clickable items
COMMAND <cmd>Execute a command as the player (e.g., COMMAND /menu open)
NONEDo nothing

Hologram placeholders

PlaceholderDescription
{name} / {target}Target name (group or service)
{players}Current player count
{max_players}Maximum players per instance
{servers}Number of running services
{state}Current state (resolved through display config)

Display config integration

Signs and NPC holograms pull their templates from config/modules/display/<group>.toml. The floating item material is also defined per group:

config/groups/*.toml
[display.npc]
display_name = "&b&lBedWars"
subtitle = "&7{players}/{max_players} online &8| &7{state}"
subtitle_offline = "&c✖ Offline"
floating_item = "RED_BED"

[display.npc.status_items]
ONLINE = "LIME_WOOL"
OFFLINE = "GRAY_WOOL"
INGAME = "ORANGE_WOOL"

Server selector inventory

When a player triggers the INVENTORY action, a chest GUI opens showing all services in the target group. Each service is represented by a wool item colored by status (configurable via status_items). Clicking a service connects the player.

Inventory appearance is configurable in the display config:

config/groups/*.toml
[display.npc.inventory]
title = "&8» &b&lBedWars Servers"
size = 27
item_name = "&b{name}"
item_lore = ["&7Players: &f{players}/{max_players}", "&7State: &f{state}", "", "&aClick to join!"]

Data storage

NPC and sign configurations are stored in the plugin's config.yml:

YAML
npcs:
  bedwars-npc-10-65-5:
    target: BedWars
    strategy: least
    entity_type: PLAYER
    skin: Notch
    look_at_player: true
    left_click: CONNECT
    right_click: INVENTORY
    hologram:
      - "&b&lBedWars"
      - "&7{players}/{max_players} online"
      - "&7{state}"
    floating_item: "true"
    equipment:
      mainhand: DIAMOND_SWORD
      offhand: SHIELD
    burning: false
    pose: null
    location:
      world: world
      x: 10.5
      y: 65.0
      z: 5.5
      yaw: 90.0
      pitch: 0.0

signs:
  bedwars-100-64-200:
    target: BedWars
    strategy: least
    location:
      world: world
      x: 100
      y: 64
      z: 200

Permissions

PermissionDescription
nimbus.display.signCreate and manage signs
nimbus.display.npcCreate, edit, and remove NPCs
nimbus.display.listList all signs and NPCs
nimbus.display.reloadReload display config

Compatibility

The Display plugin requires Spigot 1.13+ through the latest Paper and Folia versions. The 1.13 minimum is required because the plugin uses the flattened material system (post-1.13) for block and item resolution.

Feature availability by version

FeatureMinimum versionNotes
Signs (create, update, click)Spigot 1.13+Full functionality, uses TextCompat for cross-version sign rendering
Sign text (Adventure)Paper 1.16.5+Rich text via sign.line(Component)
Sign text (Legacy)Spigot 1.13+sign.setLine(String) with & color codes
NPCs (FancyNpcs)Paper 1.20+Requires FancyNpcs plugin (soft dependency, graceful degradation)
NPC holograms (ArmorStands)Spigot 1.13+Custom names via TextCompat.setCustomName()
NPC floating itemsSpigot 1.13+setUnlimitedLifetime() / setCanMobPickup() silently skipped on older versions
PersistentDataContainer (hologram tags)Bukkit 1.14+Falls back to scoreboard tags on 1.13
Server selector inventorySpigot 1.13+Cross-version inventory creation via TextCompat.createInventory()
Folia support (Signs)Folia 1.19.4+Each sign updated on its block's region thread via SchedulerCompat.runAtLocation()
Folia support (NPCs)Folia 1.19.4+NPC spawn/despawn/update on the NPC location's region thread

Folia details

On Folia, all block and entity operations are region-aware:

  • Sign updates — Each sign is updated on the region thread that owns its block location
  • NPC spawning — ArmorStand holograms, floating items, and FancyNpc entities are spawned on the correct region thread
  • NPC updates — Hologram text updates are dispatched per-NPC to the correct region
  • FancyNpcs — FancyNpcs 2.9.2+ has native Folia support for NPC rendering and interaction

Graceful degradation

On servers where FancyNpcs is not installed (or on Spigot versions below 1.20), the NPC system is silently disabled. Signs continue to work on all versions. The plugin logs a warning on startup if FancyNpcs is missing.

Next steps