NPCs Module
The CloudNet NPC module allows spawning of fake-players for server selection.
Every NPC provides server connect methods either trough an inventory or through direct connect. NPCs can be managed with the /cloudnpc
command.
NPC properties
Every NPC consists of the following properties, which can either be set on creation, or can be edited with the /cloudnpc edit
command.
targetGroup ------------- The group services must have to make joining over the NPC possible
skinOwnerName ----------- The name of the minecraft profile the NPCs' textures will be fetched from (this is only done once, the skin won't change)
itemInHand -------------- The name of the Bukkit Material the NPC will hold in his main hand
shouldLookAtPlayer ------ If the NPC should look at the player
shouldImitatePlayer ----- If the NPC should imitate the player (attack animation and sneaking)
infoLine ---------------- The hologram which is shown above the NPC
rightClickAction -------- The action which will be executed when a player right-clicks the NPC
leftClickAction --------- The action which will be executed when a player left-clicks the NPC
Available actions are OPEN_INVENTORY, DIRECT_CONNECT_HIGHEST_PLAYERS, DIRECT_CONNECT_LOWEST_PLAYERS, DIRECT_CONNECT_RANDOM and NOTHING
Placeholders for the InfoLine:
%group% | %g% -------------- The targetGroup of the NPC
%online_players% | %o_p& --- The total amount of players which are only on services of the NPC targetGroup
%max_players% | %m_p& ------ The total amount of max players from all services of the NPC targetGroup
%online_servers% | %o_s% --- The amount of servers of the NPC targetGroup which are online
NPC Inventory
Warning
The inventory contains 1.13+ items in the default configuration!
If you do not change them, they will not be visible on versions below that.
You can also use our Sample Configuration for 1.8 to 1.12.
Placeholders for items in the inventory:
%task% ----------------------- The name of the task of the server
%task_id% -------------------- The id of the service (example: Lobby-1 -> 1)
%group% ---------------------- The target group of the NPC
%name% ----------------------- The name of the service
%uuid% ----------------------- The UUID of the service
%node% ----------------------- The name of the node the service is running on
%environment% ---------------- The environment of the service
%life_cycle% ----------------- The current life cycle of the service
%runtime% -------------------- The runtime of the service (Normally "jvm")
%port% ----------------------- The port of the service
%cpu_usage% ------------------ The current CPU usage of the service
%threads% -------------------- The current amount of threads of the service
%online% --------------------- "Online" or "Offline"
%online_players% ------------- The current amount of online players of the service
%max_players% ---------------- The current amount of max players of the service
%motd% ----------------------- The current motd of the service
%extra% ---------------------- The current extra of the service (can only be set with the API)
%state% ---------------------- The current state of the service (can only be set with the API)
%version% -------------------- The server version of the service
%whitelist% ------------------ "Enabled" or "Disabled" - Spigots whitelist
LabyMod emotes
The module does also offer the possibility to play emotes on the NPCs for LabyMod users. This can be configured in the config of the NPC module.
"labyModEmotes": {
"emoteIds": [
2,
3,
49
],
"onJoinEmoteIds": [
4,
20
],
"minEmoteDelayTicks": 400,
"maxEmoteDelayTicks": 600,
"playEmotesSynchronous": false
}
emoteIds ---------------- A list of LabyMod emote ids which will be played randomly
minEmoteDelayTicks ------ The minimum amount of time (in ticks) between the emote-play-sequences
maxEmoteDelayTicks ------ The maximum amount of time (in ticks) between the emote-play-sequences
onJoinEmoteIds ---------- A list of LabyMod emote ids which will be played randomly to a new joined player
playEmotesSynchronous --- If all NPCs should play the same emote
For a list of all emote ids, see the LabyMod developer docs.
Sample Configuration
The default configuration of the NPC Module looks like this:
{
"config": {
"configurations": [
{
"targetGroup": "Lobby",
"infoLineDistance": 0.1,
"inventorySize": 54,
"startSlot": 10,
"endSlot": 54,
"showFullServices": true,
"onlineItem": {
"material": "LIME_DYE",
"subId": -1,
"displayName": "ยงa%name%",
"lore": [
" ",
"ยง8โ ยงe%state%",
"ยง8โ ยง7%online_players%ยง8/ยง7%max_players%",
"ยง8โ ยง7%motd%"
]
},
"emptyItem": {
"material": "LIGHT_GRAY_DYE",
"subId": -1,
"displayName": "ยง7%name%",
"lore": [
" ",
"ยง8โ ยงe%state%",
"ยง8โ ยง7%online_players%ยง8/ยง7%max_players%",
"ยง8โ ยง7%motd%"
]
},
"fullItem": {
"material": "REDSTONE",
"subId": -1,
"displayName": "ยงc%name%",
"lore": [
" ",
"ยง8โ ยงe%state%",
"ยง8โ ยง7%online_players%ยง8/ยง7%max_players%",
"ยง8โ ยง7%motd%"
]
},
"inventoryLayout": {
"1": {
"material": "BLACK_STAINED_GLASS_PANE",
"subId": -1,
"displayName": " ",
"lore": []
},
"2": {
"material": "BLACK_STAINED_GLASS_PANE",
"subId": -1,
"displayName": " ",
"lore": []
},
"3": {
"material": "BLACK_STAINED_GLASS_PANE",
"subId": -1,
"displayName": " ",
"lore": []
},
"4": {
"material": "BLACK_STAINED_GLASS_PANE",
"subId": -1,
"displayName": " ",
"lore": []
},
"5": {
"material": "BLACK_STAINED_GLASS_PANE",
"subId": -1,
"displayName": " ",
"lore": []
},
"6": {
"material": "BLACK_STAINED_GLASS_PANE",
"subId": -1,
"displayName": " ",
"lore": []
},
"7": {
"material": "BLACK_STAINED_GLASS_PANE",
"subId": -1,
"displayName": " ",
"lore": []
},
"8": {
"material": "BLACK_STAINED_GLASS_PANE",
"subId": -1,
"displayName": " ",
"lore": []
},
"9": {
"material": "BLACK_STAINED_GLASS_PANE",
"subId": -1,
"displayName": " ",
"lore": []
}
},
"labyModEmotes": {
"emoteIds": [2, 3, 49],
"onJoinEmoteIds": [4, 20],
"minEmoteDelayTicks": 400,
"maxEmoteDelayTicks": 600,
"playEmotesSynchronous": false
},
"npcTabListRemoveTicks": 40
}
],
"messages": {
"command-create-display-name-too-long": "ยง7The NPC displayName cannot be longer than 16 chars!",
"command-edit-success": "ยง7Successfully edited the NPC.",
"command-cleanup-success": "ยง7All NPCs on unloaded worlds have been removed successfully.",
"command-create-texture-fetch-fail": "ยง7Unable to fetch the skin of the provided Minecraft name! Try again later.",
"command-remove-success": "ยง7Successfully removed the server selector NPC.",
"command-no-npc-in-range": "ยง7There is no NPC in the range of 5 blocks!",
"command-edit-invalid-action": "ยง7The provided action isn't valid!",
"command-create-invalid-material": "ยง7The provided item isn't a valid material! (Use AIR for no item in hand)",
"command-create-success": "ยง7Successfully created the server selector NPC."
}
}
}
Sample Configuration 1.8 to 1.12
The default configuration of the NPC Module for the 1.8 looks like this:
{
"config": {
"configurations": [
{
"targetGroup": "Lobby",
"infoLineDistance": 0.1,
"inventorySize": 54,
"startSlot": 10,
"endSlot": 54,
"showFullServices": true,
"onlineItem": {
"material": "INK_SACK",
"subId": 10,
"displayName": "ยงa%name%",
"lore": [
" ",
"ยง8โ ยงe%state%",
"ยง8โ ยง7%online_players%ยง8/ยง7%max_players%",
"ยง8โ ยง7%motd%"
]
},
"emptyItem": {
"material": "INK_SACK",
"subId": 7,
"displayName": "ยง7%name%",
"lore": [
" ",
"ยง8โ ยงe%state%",
"ยง8โ ยง7%online_players%ยง8/ยง7%max_players%",
"ยง8โ ยง7%motd%"
]
},
"fullItem": {
"material": "REDSTONE",
"subId": -1,
"displayName": "ยงc%name%",
"lore": [
" ",
"ยง8โ ยงe%state%",
"ยง8โ ยง7%online_players%ยง8/ยง7%max_players%",
"ยง8โ ยง7%motd%"
]
},
"inventoryLayout": {
"1": {
"material": "STAINED_GLASS_PANE",
"subId": 15,
"displayName": " ",
"lore": []
},
"2": {
"material": "STAINED_GLASS_PANE",
"subId": 15,
"displayName": " ",
"lore": []
},
"3": {
"material": "STAINED_GLASS_PANE",
"subId": 15,
"displayName": " ",
"lore": []
},
"4": {
"material": "STAINED_GLASS_PANE",
"subId": 15,
"displayName": " ",
"lore": []
},
"5": {
"material": "STAINED_GLASS_PANE",
"subId": 15,
"displayName": " ",
"lore": []
},
"6": {
"material": "STAINED_GLASS_PANE",
"subId": 15,
"displayName": " ",
"lore": []
},
"7": {
"material": "STAINED_GLASS_PANE",
"subId": 15,
"displayName": " ",
"lore": []
},
"8": {
"material": "STAINED_GLASS_PANE",
"subId": 15,
"displayName": " ",
"lore": []
},
"9": {
"material": "STAINED_GLASS_PANE",
"subId": 15,
"displayName": " ",
"lore": []
}
},
"labyModEmotes": {
"emoteIds": [2, 3, 49],
"onJoinEmoteIds": [4, 20],
"minEmoteDelayTicks": 400,
"maxEmoteDelayTicks": 600,
"playEmotesSynchronous": false
},
"npcTabListRemoveTicks": 40
}
],
"messages": {
"command-create-display-name-too-long": "ยง7The NPC displayName cannot be longer than 16 chars!",
"command-edit-success": "ยง7Successfully edited the NPC.",
"command-cleanup-success": "ยง7All NPCs on unloaded worlds have been removed successfully.",
"command-create-texture-fetch-fail": "ยง7Unable to fetch the skin of the provided Minecraft name! Try again later.",
"command-remove-success": "ยง7Successfully removed the server selector NPC.",
"command-no-npc-in-range": "ยง7There is no NPC in the range of 5 blocks!",
"command-edit-invalid-action": "ยง7The provided action isn't valid!",
"command-create-invalid-material": "ยง7The provided item isn't a valid material! (Use AIR for no item in hand)",
"command-create-success": "ยง7Successfully created the server selector NPC."
}
}
}