CloudNet-Lobby
1.2A module-based lobby system, compatible with CloudNet. Can be "abused" for non-lobby servers.
CloudNet - Lobby
This Plugin depends on McUtils which you can obtain here .
By downloading this resource, you agree to the EULA of CloudNet-Lobby .
CloudNet-Lobby can also work with non-CloudNet servers!
Check the pre-made Addons section for more information.
Please notice: I will only give support for spigot/paper servers with a version listed at "Tested Minecraft Versions".
CloudNet-Lobby is a module-based (lobby-) system. What does module-based mean? The Lobby-System is only the base for the modules (like Spigot is the base for plugins).
That means: The system itself cannot do much. The power lies in the modules (I'll call them "addons" from now)!
But don't worry, you'll get some pre-made addons and configurations.
You can also use this system on non-lobby servers, just disable (or enable) every setting to make the server behavior normal (check out the configuration!). Why should you place a Lobby-System on a non-lobby server and make the server behavior normal? You can still use the Addons, which is a great advantage (e.g. the Action Scoreboard)!
This Plugin supports PlaceholderAPI .
Explenations
The following is complicated!
You should take yourself a little while and read all these explanations .
Explenation: Addons
So, how are these addons working? All addons can be used with configurations. There are three kinds of addons: Actions, Placeholders and Lists.
You set actions that will be executed for the players when they join the server. And some of these actions can trigger other actions (e.g. an item click in a "menu").
Placeholders? Placeholders should explain itself. If you use placeholders in a text (e.g. As item name, in the scoreboard, or in a text message) they will be replace by something other (e.g. the players name or name of the server).
We will take a look on Lists later (in pre-made addons -> actions/Hotbar).
Both, actions and placeholder are called with arguments. When calling an action or a placeholder you have to specify the name of if and the argument separated by a colon.
So when calling an action or placeholder the "command" seems like this
action:argument(action) or
${placeholder:argument}A very big difference between actions and placeholders is, that you can use actions only in special "areas" and placeholders actually everywhere.
You can also put a "!" in front of a action-call. That will tell the action that it should do, whatever it does quietly. E.g. can can put a "!" in front of a action if you do not want that it prints out a message to the player (e.g. "!Waypoint:Spawn").
Explenation: Expressions
Another point to mention are the so called expressions (at least i call them like this). You can use them anywhere where you can use placeholders. Basically a placeholder is an expression too.
An expression always starts with a "${" and ends with a "}".
The only other expressions but the placeholders are the "if" and lists expressions.
${?TEXT OPERATOR TEXT:(IF EXPRESSION IS TRUE)else(IF EXPRESSION IS FALSE)}First you see i wrote "TEXT". Here you can, if you want to, insert placeholders.
The operator is very important. You can choose between (without the commas)
>=, >, <=, <, =, != The operator "=" checks if both parts of the head equals each other.
The operator "!=" checks if both parts of the head not equals each other.
The other operators can only compare numbers.
">=" checks if the left number is bigger than the right or equals it.
">" checks if the left numbers is bigger than the right.
"<=" checks if the left number is smaller than the right or equals it.
"<" cheks if the left number is smaller than the right.
The part where "IF EXPRESSION IS TRUE" is will be inserted as the whole expression if the "head" (the part before the colon) is true. The part where "IF EXPRESSION IS FALSE" will be inserted as the whole expression if the head is false. If you want to, you can simply leave out the "else" part, so that the expression does not care if the head is not true. In this case the expression would be replaced with nothing. So leabing out the "else" part is exactly like leave the else body empty "else()".
You can also interlace these expressions (write an expression into another one, and so on...).
So practically we can do a lot of things with these "if" expressions. For example:
${?${Server:MOTD}=A nice server!:(A good motd!)else(A bad motd)}would be in endeffect replaced with
A good motd! if the motd of the server is "A nice server!".
Thats because "${Server:MOTD}" is a placeholder, which will be replaced with the motd of the current server.
Btw if you hadn't noticed it: You can also use placeholders in the arguments of other placeholders, or in the bodies of "if" expressions.
Pre-made addons
So, after all this complicated stuff here's a list of the pre-made addons:
Only the italic orange addons require CloudNet.
All other addons can be used without CloudNet.
Actions
- Connect
Syntax and Use
Connect:ServerNameConnects the player to another Bungee-Server.
- Gamemode
Syntax and Use
Gamemode:NewGamemodePossible gamemodes are
0, 1, 2, 3, SURVIVAL, CREATIVE, ADVENTURE, SPECTATOR
- Hotbar
Syntax and Use
Hotbar:HotbarName, Hotbar:~reload, Hotbar:~done"Hotbar:HotbarName" loads the given hotbar.
"Hotbar:~reload" reloads the current hotbar (if set), e.g. If you got an Item with a variable name (with the help of expressions, e.g. the players money) it will only change their properties (item type, name, lore, etc.) if the hotbar will be reloaded.
"Hotbar:~done" is some kind of "closing" the current hotbar. All the hotbar's items will be removed from the inventory, and the current hotbar will be removed from the player.Default Hotbar 'default.json'
{ "title": "", "content": { "hider": { "slot": 1, "item": { "id": "${?${PlayersShowing}=All:(lime_dye)else(${?${PlayersShowing}=OnlyFriends:(purple_dye)else(light_gray_dye)})}", "durability": 0, "amount": 1, "name": "&b» ${?${PlayersShowing}=All:(&aShow &cOnly Friends)else(${?${PlayersShowing}=OnlyFriends:(&cHide Players)else(&aShow All Players)})}", "lore": [ "&7Showing currently", "${?${PlayersShowing}=All:(&aAll Players)else(${?${PlayersShowing}=OnlyFriends:(&dOnly Friends)else(&7No Other Players)})}" ], "enchantments": [] }, "clickaction": { "left": null, "right": [ "ShowPlayers:${?${PlayersShowing}=All:(OnlyFriends)else(${?${PlayersShowing}=OnlyFriends:(None)else(All)})}", "Hotbar:~reload" ] } }, "navigator": { "slot": 4, "item": { "id": "compass", "durability": 0, "amount": 1, "name": "&b» &9Navigator", "lore": [], "enchantments": [] }, "clickaction": { "left": null, "right": [ "Menu:navigation" ] } }, "lobbyswitcher": { "slot": 7, "item": { "id": "nether_star", "durability": 0, "amount": 1, "name": "&b» &9Lobby Switcher", "lore": [], "enchantments": [] }, "clickaction": { "left": null, "right": [ "Menu:lobbies" ] } } } }This is the hotbar "default". The name/id of the hotbar will always the file's name (without the ".json").
And as you see, there's a clear structure in a hotbar file.
The "title" is useless in version 1.0, I'll add an action bar in version 1.2, so that the hotbar's title will be displayed the player as actionbar.In the "content" section are the different items located. Each item has got an ID (the first item id here is "hider"). Then the different properties in the item section: "slot" is the hotbar slot. The first slot is 0, the second is 1, and so on until the last slot 8.
In the subsection of "item" you can set its id (you can use https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/Material.html as a reference), durability (which is actually ignored since the new id system), amount, name, and lore.As you see, here you can use all kinds of expressions (in v1.0 only "if"-expressions and placeholders).
The "special" area for the action triggers is the "clickaction" area.
Here you can define which action will be called on a left-, and rightclick. Just leave out an option (left/right) or set its value to "null" and then no action will be called.Also very important is the ability of the listing. You can write another kind of expression in the id of the item, if you do so, the lobby system will create a list and for each object in this list, an item will be generated and placed as it is configured.
The only thing that will be ignored is the slot. Okay, it wont be fully ignored, if the list name is correct the first generated item will be placed at the specified slot.
The next item will be placed at the next slot, and so on..item${i;ListName:Argument}The actually expression is "${i;ListName:Argument}".
After the first bracked you have to define a variable, in this case its just "i", followed by a semicolon. Then the name of the list and the argument seperated with a normal colon (like the normal placeholders).
So you can use the variable in the item properties with an dollar character in front of it. In every generated item this variable will be replaced with the object in the list.$iSee pre-made addons/Lists for current pre-made lists.
- Inventory
Syntax and Use
Inventory:CloseJep, the only thing that this can do is close the current inventory of the player
- Menu
Syntax and Use
Menu:MenuName; Menu:~reload, Menu:~donePlease read the description of the Hotbar addon to understand how the configuration is working.
Default Menu 'navigator.json
{ "rows": 6, "title": "&b» &cNavigation", "content": { "item": { "location": { "row": 2, "column": 5 }, "item": { "id": "grass_block", "durability": 0, "amount": 1, "name": "&a» &b&lSpawn", "lore": [ "Click to teleport" ], "enchantments": [] }, "clickaction": { "left": [ "Waypoint:spawn" ], "right": null } } } }Default Menu 'lobbies.json'
{ "rows": 1, "title": "&b» &cLobby-Switcher", "content": { "item${i;ServerGroups:Lobby}": { "location": { "row": 1, "column": 1 }, "item": { "id": "sugar", "durability": 0, "amount": "${Server:Players:$i}", "name": "&a» &b$i", "lore": [ "&7${Server:Players:$i}/${Server:MaxPlayers:$i}" ], "enchantments": [] }, "clickaction": { "left": [ "Inventory:Close", "Connect:$i" ], "right": null } } } }
- PlayerCommand
Syntax and Use
PlayerCommand:TextThe player will execute the given text as command.
- ShowPlayers
Syntax and Use
ShowPlayers:valuePossible values are
All, OnlyFriends, NoneYou can also leave out the value, in this case the players will just be hidden, or shown like the current setting of the player (a "reload").
- Scoreboard
Syntax and Use
Scoreboard:ScoreboradNameThis scoreboard (which is actually only a sideboard) is compatible with any other scoreboard (e.g. NameTagEdit, etc.).
Please read the description of the Hotbar addon to understand how the configuration is working.Default Scoreboard 'default.yml'
title: '&bCloudNet-Lobby' updateInterval: 20 content: '15': '' '14': '' '13': ' ' '12': '&b Hello,' '11': '&7 ${Player:Name}' '10': ' ' '9': '&b Server' '8': '&7 ${Server:Name}' '7': ' ' '6': '&b Time' '5': '&9 ${RealTime:HH:mm:ss}' '4': '' '3': '' '2': '' '1': ''The only thing to mention here is the "updateIntervall": This is the time (in ticks, 20 ticks = 1 second) how long the scoreboard will wait before it will reload itself.
In This example the placeholder "RealTime" is used with the Argument "HH:mm:ss" that will display the hour of the day (0-24), the minute on the our (0-59) and the second in the minute (0-59). In order that the second is updated every second, the update intervall have to be set at least to 1.
The empty values in "content" wont be displayed, not even an empty line will be generated.
You can use multiple values with the same content (compare 10 and 7). The addon will display both (actually minecraft is not able to display multiple entires in a scoreboard with the same value).
- Waypoint
Syntax and Use
Waypoint:WaypointNameWill teleport the player to the given waypoint, or send a error message if the waypoint does not exists.
Placeholders
- HeldSlot
Syntax and Use
${HeldSlot}Returns the number of the current slot the player has selected in their hotbar. PS: Yes you got it! No argument, so no colon!
- Player
Syntax and Use
${Player:value}Possible values are
Name, DisplayName, UUID
- PlayersShowing
Syntax and Use
${PlayersShowing}Possible returnments are
All, OnlyFriends, None
- RealTime
Syntax and Use
${RealTime:SimpleDateFormat}Returns the time of the host machine in the SimpleDateFormat (e.g. "HH:mm" will return the hour and
minute ). Check out this website for more information.
- Server
Syntax and Use
${Server:value}Possible values are
IsOnline, MOTD, Players, MaxPlayers, Name" IsOnline " can return "true" or "false", " MOTD " returns the MOTD of the server, " Players " the amount of current players and " MaxPlayers " the amount of maximum players for the servers (slots). You can add another colon after the value and the specify the server. If you leave of the specification of the server, the current server will be used. As Example:
${Server:IsOnline:CityBuild-1}
Similar projects
Plugin →Let Me Despawn
Improves performance by tweaking mob despawn rules. Say bye to pesky unintentional persistent mobs.
25MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta
Emotecraft
Create your own emotes in Minecraft.
7.5MSueta
Simple Tpa
A simple tpa plugin which sends requests
5.4MSueta
Common Network
Forge and Fabric Unified Networking Solution
3.9MSueta
Set Home
A lightweight plugin for players to set their homes.
3.8MSueta