LobbyAPI
What is LobbyAPI
LobbyAPI was created to manage multiple worlds and allow players to teleport to those worlds using user friendly menu, while being able to be fully configurable.Just by using the commands /lobby or /hub, the player has access to all worlds specified in the menu, where when they click on the block the represents a world they are teleported to location given to that world. LobbyAPI has tons of configurable methods to change the color of the block in the menu, the amount of that block, what spot it is located, and the description of the world, who can see or go to a world, along with the methods for how the world will interact with other worlds.
How to create and manage worlds
If you a re new to LobbyAPI, you can find a guide how to set up worlds at this link:
https://dev.bukkit.org/projects/lobbyapi/pages/events/basic-command-tutorial
Features
- Allows players to teleport from world to world.
- Menu is fully customizable
- Shows all players in given world
- Allows players to teleport from Server to Server (for bungee servers only).
- Allows other plugins to access when a player teleports to a new world or clicks on a new world in the menu.
- Works on all versions of Bukkit
- Plugin support LobbyAPI is just the back-bone for the plugins that will add the worlds. All that is needed to add a world to the menu will be under Developer Information.
Icon Customization is here!
Now you can easily customize the materials, description, and other attributes for each world registered!
Commands
/Lobby | Opens up the WorldMenu |
/Hub | Opens up the WorldMenu |
/LobbyApi | Allows you to change some properties of LobbyAPI |
/LobbyApi addWorld [world] [slot] [x][y][z]..... | Adds a world to the LobbyAPI menu |
/LobbyApi removeWorld [world] | Removes a world to the LobbyAPI menu |
/LobbyApi addServer [server-name] [slot] | Adds a server to the LobbyAPI menu |
/LobbyApi removeServer [server-name] | Removes a server to the LobbyAPI menu |
/LobbyApi listServers | Shows a list for all the servers |
/LobbyApi listWorlds |
Shows a list for all the worlds |
/LobbyApi setDefaultWeather [world] [weather] | Sets the default weather for a world. Choices are NORMAL, NO_RAIN, and ALWAYS_RAINING |
/LobbyApi addJoiningCommand [world] [command] | Adds a command that should be sent when a player joins that world. |
/LobbyApi removeJoiningCommand [world] [command id] | Removes a command that should be sent when a player joins that world. |
/LobbyApi listJoiningCommands [world] | Lists all the commands that are sent when a player joins that world. |
/LobbyApi listJoiningCommands [world] | Lists all the commands that are sent when a player joins that world. |
(There are a few more commands, but I've had issues recreating the table :p):
/LobbyAPI generateNetherAndEndFor", "Generates a nether and end world for the world"
/LobbyAPI setMainLobby", "Changes the default spawn world"
/LobbyAPI removeMainLobby", "Removes default spawn world"
/LobbyAPI setMaterial", "Sets the material icon for a world"
/LobbyAPI setDisplayName", "Changes a display name for a world."
/LobbyAPI setDescription", "Sets the description for a world"
/LobbyAPI hideWorld", "Hides a world from the menu."
/LobbyAPI showWorld", "Shows the world from the menu, if previously hidden"
/LobbyAPI setWorldSelector", "Sets the word selector to be the item in the sender's hand"
/LobbyAPI removeWorldSelector", "removes word selector"
/LobbyAPI setGamemode", "Sets the description for a world"
/LobbyAPI changeSpawn", "Changes the spawn location for a world"
/LobbyAPI version", "Gets the version of the plugin"
/LobbyAPI setvoidlooping", "Enables or disables teleporting players to spawn if they are in the void"
/LobbyAPI setdisablehealthandhunger", "Enables or disables health or hunger changes for worlds"
/LobbyAPI setlocationsaving", "Enables or disables location saving when a player leaves the world"
/LobbyAPI setcanuseportals", "Enables or disables portals for certain worlds."
/LobbyAPI addDefaultItem", "Adds the item in your hand to the list of default items."
/LobbyAPI removeDefaultItem", "Adds the item in your hand to the list of default items."
/LobbyAPI listDefaultItems", "Adds the item in your hand to the list of default items."
/LobbyAPI addDecor", "Adds a decor item to the hub menu"
/LobbyAPI removeDecor", "Removes a decor item."
/LobbyAPI toggleWhitelist", "Toggles whether the world is restricted to only certain players"
/LobbyAPI addToWhitelist", "Adds a player to a world's whitelist"
/LobbyAPI removeFromWhitelist", "Adds a player to a world's whitelist"
/LobbyAPI listWhitelist", "Adds a player to a world's whitelist"
/LobbyAPI goto", "Teleports the player to the spawn of a world"
Permissions:
- lobbyapi.*
- ---Gives access to all lobbyapi features
- lobbyapi.user
- --Gives all commands that users should have. If you do not know what permissions to give to your players, just give them this.
- lobbyapi.commands
- --Only gives access to commands
- lobbyapi.hub
- --Gives access to the /hub commands.
- lobbyapi.bypassworldlimits
- --Gives players the ability to join worlds that are private, or have gone over the player limit
Dependencies and Compatibility
LobbyAPI does not depend on any other plugin, and should work with all other plugins. If you receive any errors from my plugin or features or not enabled for you, please make a comment or ticket of this page.
Developer Information
If you want to register a world through a plugin, use the guide HERE . Call this method in onEnable method to register worlds when the plugin loads.
To add a BungeeServer to the menu, all you need is this line: LobbyAPI.registerBungeeServer(String bungeeServersName, Description, WoolColor);
How to Install
- Drop this plugin into you plugins folder
- Find/Create a plugin that will allow you get to your world
- Restart your server
This plugin uses bStats:
bStats is a metrics service that allows me to to see how many servers use my plugins, how many players they have, and which countries use my plugin the most. All information is anonymized, so no information can be directly linked to you, and instead is added to the average of all severs that use the plugin.
In reply to ZombieStryker:
Hey i have just installed the plugin but i dont know how to load more then one world at start up so it only shows that i can lobby to the end and nether but none of my other worlds can you help?
In reply to Forge_User_42897775:
Major Issue with plugin:
jar file is moved to update folder after loading it when server starts.
Console shows:
[15:00:56 INFO]: [LobbyAPI] Update done! Downloaded 100899 bytes!
[15:00:56 INFO]: [LobbyAPI] Update done! Result: UPDATE_SUCCEEDED
:
:
[15:00:57 INFO]: [LobbyAPI] Added world 'LobbyWorld'
[15:00:57 INFO]: [LobbyAPI] Added world 'PhantumMC'
[15:00:57 INFO]: [LobbyAPI] Added world 'PhantumMC_nether'
[15:00:57 INFO]: [LobbyAPI] Added world 'PhantumMC_the_end'
[15:00:57 INFO]: [LobbyAPI] Added world 'Underworld'
[15:00:57 INFO]: [LobbyAPI] Added world 'Flatworld'
Next time server restarts the JAR file does not load because it was moved to update folder.
Update folder has three versions of the JAR file in it (3.7.20. 3.7.21, 3.7.22). I have deleted all JAR's, and support folder "LobbyAPI" from the server and installed from Bukkit latest version and restarted server. Still loads the API and then moves the JAR file to the "update" folder.
I have repeated these steps for the other two versions and it still does the same thing.
Even setting "auto-update" to false in the Config.yml it still moves the JAR file and does not download the newer versions but it still post this message in console:
[15:00:56 INFO]: [LobbyAPI] Update done! Downloaded 100899 bytes!
[15:00:56 INFO]: [LobbyAPI] Update done! Result: UPDATE_SUCCEEDED
Also, when I check the new Config.yml in the support folder that was created each time, it still shows current version as 3.7.21 when loading any of the three versions I was trying to load:
auto-update: true
hasBungee: false
Version: 3.7.21
I will have to move the JAR back to plugin folder and patch the config.yml every night after the reboot cycle then reboot until you can fix this.
Thanks.
As of right now, I am not able to replicate your problem. Have you tried manually downloading version 3.7.22?
I just downloaded the latest version and uploaded to my server and when i started the server
it loaded the api then moved the jar file to the update folder.
It seems I made an error when I was imputing the update. I wrote 21 instead of 22. I have just re-released the update, so that should fix the problem.
Ok, that did not fix it, but I was able to stop the file from being moved by disabling the updater and the config.yml now shows the current version.
I guess i will have to do manual updates from now on.
Thanks
Hello, I am running 1.11.2 Bukitt Server. I created a World named "LobbyWorld" to set up a lobby and then set the login point to the LobbyWorld using your plugin. When ever I login or use the API I get the following error:
[14:47:57 ERROR]: Could not pass event PlayerChangedWorldEvent to LobbyAPI v3.7.20
Although I get the error in the Console, it does not seem to effect the porting from world to worlds and it displays that I ported to the world I selected to the screen.
This is the only plugin out of the 84 plugins I am running that is returning an error.
I have these Worlds:
Primary Worlds:
PhantumMC
PhantumMC_nether
PhantumMC_the_end
Askyblock plugin (generated by Plugin)
Askyblock
Askyblock_nether
Dungeon Maze plugin (generated by plugin command in game)
Underworld
I am running WorldEdit, WorldGuard, Multiverse-Core, PermissionsEx, Essencials and Vault as my core plugins.
The other plugins I'm running are:
AddLight, A SkyBlock, Bankraft, Beton Quest, Character Stats, Citizens,
EasyPath, Enchant Extractor, Essentials, EXP Bottles, Gods, GriefPrevention,
Jobs, MobArena, MultiChannel, PurchaseCommands, QuickShop, QwickTree,
SalvageSmelter, Ships, SimpleSit, Slimefun, SlimeFun Addons (Barrels,
Electric Spawners, Emerald Enchants, Exotic Garden, Extra Gear,
Hot bar Pets, Magical Loot, Private Storage, Sensible Toolbox,
Shelter, Slimefun Guide, Slimefun Ores, Slime Xpansion) StatsGUI,
VirtualChestVault, WillowWild, WizardlyMagic, XP-Deposit, ZHorse,
AchievementExp, AntiXRay, BetterAlias, BetterDrops, DialyLoginRewards,
Durexp, EmptyWorldGenerator, Enchanted Furnace, Enchantment Extractor,
EssentialsAntiBuild, EssentialsChat, EssentialsGeoIP, EssentialsProtect,
EssentialsSpawn, ExpOres, HGGifts, InfernalMobs, Item-NBT-API, KeepItems,
LobbyEssentials, Lore, NoCreeperHoles, SchematicBuildTool, ShipsLock,
SilkSpawners, SimpleCommandSigns, StatsGUI, Swimming, TimTheEnchanter,
TPLogin, URLCommand, VeinMiner, ZavAutoMessager, CS-CoreLib, ProtocolLib.
I am reconfiguring the Permissions config.yml because I keep losing command access after playing the game for a while but I need to know how to fix the issue with your plugin or figure out if one of the other plugins is not compatible causing your plugin to return an errors.
Here is the complete error:
[18:06:56 ERROR]: Could not pass event PlayerChangedWorldEvent to LobbyAPI v3.7.20 org.bukkit.event.EventException at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:298) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:501) [craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:486) [craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at net.minecraft.server.v1_11_R1.PlayerList.moveToWorld(PlayerList.java:658) [craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer.teleport(CraftPlayer.java:508) [craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.bukkit.craftbukkit.v1_11_R1.entity.CraftEntity.teleport(CraftEntity.java:250) [craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at me.zombie_striker.lobbyapi.Main.onSelect(Main.java:1351) [LobbyAPI%2520v3.7.20.jar:?] at sun.reflect.GeneratedMethodAccessor159.invoke(Unknown Source) ~[?:?] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_112] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_112] at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:296) [craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) [craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:501) [craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:486) [craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at net.minecraft.server.v1_11_R1.PlayerConnection.a(PlayerConnection.java:1770) [craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at net.minecraft.server.v1_11_R1.PacketPlayInWindowClick.a(SourceFile:33) [craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at net.minecraft.server.v1_11_R1.PacketPlayInWindowClick.a(SourceFile:10) [craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at net.minecraft.server.v1_11_R1.PlayerConnectionUtils$1.run(SourceFile:13) [craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_112] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_112] at net.minecraft.server.v1_11_R1.SystemUtils.a(SourceFile:46) [craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at net.minecraft.server.v1_11_R1.MinecraftServer.D(MinecraftServer.java:695) [craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at net.minecraft.server.v1_11_R1.DedicatedServer.D(DedicatedServer.java:360) [craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at net.minecraft.server.v1_11_R1.MinecraftServer.C(MinecraftServer.java:650) [craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at net.minecraft.server.v1_11_R1.MinecraftServer.run(MinecraftServer.java:554) [craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at java.lang.Thread.run(Thread.java:745) [?:1.8.0_112] Caused by: java.lang.NullPointerException: null key in entry: null=10 at com.google.common.collect.CollectPreconditions.checkEntryNotNull(CollectPreconditions.java:31) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at com.google.common.collect.ImmutableMap.entryOf(ImmutableMap.java:135) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at com.google.common.collect.ImmutableMap$Builder.put(ImmutableMap.java:206) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.bukkit.craftbukkit.v1_11_R1.inventory.CraftMetaItem.serializeEnchantments(CraftMetaItem.java:786) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.bukkit.craftbukkit.v1_11_R1.inventory.CraftMetaItem.serialize(CraftMetaItem.java:739) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.bukkit.craftbukkit.v1_11_R1.inventory.CraftMetaItem.serialize(CraftMetaItem.java:725) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.bukkit.configuration.file.YamlRepresenter$RepresentConfigurationSerializable.representData(YamlRepresenter.java:33) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:94) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.yaml.snakeyaml.representer.BaseRepresenter.representMapping(BaseRepresenter.java:156) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.yaml.snakeyaml.representer.SafeRepresenter$RepresentMap.representData(SafeRepresenter.java:306) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.bukkit.configuration.file.YamlRepresenter$RepresentConfigurationSerializable.representData(YamlRepresenter.java:35) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:94) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.yaml.snakeyaml.representer.BaseRepresenter.representMapping(BaseRepresenter.java:156) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.yaml.snakeyaml.representer.SafeRepresenter$RepresentMap.representData(SafeRepresenter.java:306) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.bukkit.configuration.file.YamlRepresenter$RepresentConfigurationSection.representData(YamlRepresenter.java:23) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:94) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.yaml.snakeyaml.representer.BaseRepresenter.representMapping(BaseRepresenter.java:156) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.yaml.snakeyaml.representer.SafeRepresenter$RepresentMap.representData(SafeRepresenter.java:306) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.bukkit.configuration.file.YamlRepresenter$RepresentConfigurationSection.representData(YamlRepresenter.java:23) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:94) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.yaml.snakeyaml.representer.BaseRepresenter.representMapping(BaseRepresenter.java:156) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.yaml.snakeyaml.representer.SafeRepresenter$RepresentMap.representData(SafeRepresenter.java:306) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.bukkit.configuration.file.YamlRepresenter$RepresentConfigurationSection.representData(YamlRepresenter.java:23) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:94) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.yaml.snakeyaml.representer.BaseRepresenter.representMapping(BaseRepresenter.java:156) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.yaml.snakeyaml.representer.SafeRepresenter$RepresentMap.representData(SafeRepresenter.java:306) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:94) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.yaml.snakeyaml.representer.BaseRepresenter.represent(BaseRepresenter.java:64) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.yaml.snakeyaml.Yaml.dumpAll(Yaml.java:242) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.yaml.snakeyaml.Yaml.dumpAll(Yaml.java:206) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.yaml.snakeyaml.Yaml.dump(Yaml.java:181) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.bukkit.configuration.file.YamlConfiguration.saveToString(YamlConfiguration.java:39) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.bukkit.configuration.file.FileConfiguration.save(FileConfiguration.java:68) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at org.bukkit.plugin.java.JavaPlugin.saveConfig(JavaPlugin.java:180) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] at me.zombie_striker.lobbyapi.Main.saveInventory(Main.java:1565) ~[?:?] at me.zombie_striker.lobbyapi.Main.onWorldchange(Main.java:1270) ~[?:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_112] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_112] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_112] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_112] at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:296) ~[craftbukkit-1.11.2.jar:git-Bukkit-1a71021] ... 26 more
Thanks
I have just released an update for LobbyAPI. This may fix your issue. If you still receiving this error, I will need to see your config.yml.
no, did not fix, but it is now giving players an ID when they login and the error only occurs when they use the api.
Config exceeds 30000 characters, Can I email you the file?
Please post the config on pastebin.com Reply with the link.
Here is the link to the config.yml: http://pastebin.com/yBTF0Dc2
Thanks
This looks like an issue with your special characters. The lore for your items have characters that are undefined by pastebin. The issue may be that the config does not support utf-8. Make sure it supports utf8 by opening up the config.yml, Create a new line starting with a hashtag, and then save the file. You should receive a message saying the file needs to be converted to utf8. Click okay and let it save. This should fix your problem.
Ok, it seems to be working at this point, but I don't have any other users online to preform multiple action at the same time.
I normally use the editor on the host site (server.pro) but I copied the text and pasted it in Notepad++ and added the "#" as requested and the key words turned dark blue after saving the file to my desktop. I then delete the file on the server and uploaded the new config.yml and I am not getting the errors when i use /lobby to move from world to world.
I did load another plugin today (greenhouses/plugin #85) and it was also causing the same error. So I tried the same process and those errors are gone too. I am going to download all of my yml files from the server tonight and make sure they are all utf-8 formats just to make sure none of the plugins give this error in the future.
Thank you very much.
Okay. I got it setup but now I'm having issues with something else. When the server restarts or reloads, the x, y and z coords reset on the icons inside the api. What could the issue be?
What are they defaulted to? What did you input as the XYZ and what are they reset to?
When someone clicks on the icon to teleport, nothing happens. They end up just standing there. The X, Y and Z keep disappearing. When I look into the config, there's nothing in typed in where the XYZ should be.
I believe the issue has been fixed. If you reload your server twice, the new update should be applied.
If your problem still persists, please post the config.
I will try that out and test it. Thank you.