Coder Social home page Coder Social logo

luckperms / luckperms Goto Github PK

View Code? Open in Web Editor NEW
1.9K 46.0 495.0 14.29 MB

A permissions plugin for Minecraft servers.

Home Page: https://luckperms.net

License: MIT License

Java 99.98% Dockerfile 0.02%
permissions bukkit spigot bungeecord sponge minecraft fabricmc minecraft-mod minecraft-plugin

luckperms's Introduction

LuckPerms

Build Status javadoc Maven Central Discord

LuckPerms is a permissions plugin for Minecraft servers. It allows server admins to control what features players can use by creating groups and assigning permissions.

The latest downloads, wiki & other useful links can be found on the project homepage at luckperms.net.

It is:

  • fast - written with performance and scalability in mind.
  • reliable - trusted by thousands of server admins, and the largest of server networks.
  • easy to use - setup permissions using commands, directly in config files, or using the web editor.
  • flexible - supports a variety of data storage options, and works on lots of different server types.
  • extensive - a plethora of customization options and settings which can be changed to suit your server.
  • free - available for download and usage at no cost, and permissively licensed so it can remain free forever.

For more information, see the wiki article on Why LuckPerms?

Building

LuckPerms uses Gradle to handle dependencies & building.

Requirements

  • Java 21 JDK or newer
  • Git

Compiling from source

git clone https://github.com/LuckPerms/LuckPerms.git
cd LuckPerms/
./gradlew build

You can find the output jars in the loader/build/libs or build/libs directories.

Tests

There are some automated tests which run during each build.

Contributing

Pull Requests

If you make any changes or improvements to the plugin which you think would be beneficial to others, please consider making a pull request to merge your changes back into the upstream project. (especially if your changes are bug fixes!)

LuckPerms loosely follows the Google Java Style Guide. Generally, try to copy the style of code found in the class you're editing.

Project Layout

The project is split up into a few separate modules.

  • API - The public, semantically versioned API used by other plugins wishing to integrate with and retrieve data from LuckPerms. This module (for the most part) does not contain any implementation itself, and is provided by the plugin.
  • Common - The common module contains most of the code which implements the respective LuckPerms plugins. This abstract module reduces duplicated code throughout the project.
  • Bukkit, BungeeCord, Fabric, Forge, Nukkit, Sponge & Velocity - Each use the common module to implement plugins on the respective server platforms.

License

LuckPerms is licensed under the permissive MIT license. Please see LICENSE.txt for more info.

luckperms's People

Contributors

andre601 avatar bakatrouble avatar bloodmc avatar bombardygamer avatar creator3 avatar drexhd avatar electron93 avatar emilyy-dev avatar europejing avatar izzelaliz avatar laarryy avatar lucko avatar lxgaming avatar misode avatar mrmicky-fr avatar omegaweapondev avatar oop-778 avatar pixelmonpro avatar potatopresident avatar powercasgamer avatar redstonefuture avatar schneidermr avatar slind14 avatar spannerman79 avatar svenar-nl avatar tadhgboyle avatar tjeukayim avatar tobi406 avatar turbotailz avatar vorburger avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

luckperms's Issues

migration from powerfulperms problem

>luckperms migration powerfulperms xxx.xxx.xxx.xxx:3306 powerfulperms mysqlaccount xxxxxxxx players
[19:46:12 INFO]: [LP] Command not recognised.

when i run this command, console will reply this :/
i tried v2.15.13 v2.14.20 v2.13.13, all replay same message.

Unable to access user options before players log on

GP needs to access player option data after the server starts in order to properly run certain claim tasks. After server starts up, If I attempt to access a user subject that has NOT logged on yet, I always get null data.

I tested with a user that has a UUID of de86e572-d957-3b2d-8706-5c55a1dd406b

Code being tested

Subject playerSubject = GriefPrevention.instance.permissionService.getUserSubjects().get(playerUniqueId.toString());
String optionValue = playerSubject.getOption(key).orElse(null);

The above code returns the following

BEFORE login
[01:15:12] [Server thread/INFO] [STDOUT]: [me.ryanhamshire.griefprevention.util.PlayerUtils:getOptionIntValue:117]: subj = de86e572-d957-3b2d-8706-5c55a1dd406b, key = griefprevention.create-claim-limit, optionValue = null

AFTER login
[01:16:32] [Server thread/INFO] [STDOUT]: [me.ryanhamshire.griefprevention.util.PlayerUtils:getOptionIntValue:117]: subj = de86e572-d957-3b2d-8706-5c55a1dd406b, key = griefprevention.create-claim-limit, optionValue = 1

As you can see above, LP doesn't seem to load the user data unless the player logs in.

Issue seems to be in the get method

https://github.com/lucko/LuckPerms/blob/master/sponge/src/main/java/me/lucko/luckperms/sponge/service/collections/UserCollection.java#L98

I see no LP logs stating the user is being loaded from storage.

Add luckperms.asroot

It would be interesting to add a permission that makes user "like" ops (player.isOp() returns true).

LuckPerms PermissionsEx Migration Error (Something to do with prefixes?)

When attempting to migrate from permissionsEx via the console (specifically "lp migration permissionsex") I run into the following prefix-is-not-a-uuid error:

http://pastebin.com/zGNmzZ7F

I just downloaded the latest version of LuckPerms (2.5.5) and PermissionsEx (1.23.4) prior to attempting this.

Plugins (21): CoreProtect, AsyncWorldEditInjector, dynmap, MultiWorld, WorldEdit, ImageMaps, AsyncWorldEdit, CPCameraStudio, PermissionsEx, SWROTR_Utility(Custom Plugin), AlwaysOnline, CrackShot, Chairs, Ships, Vault, notnt, Cannons, LuckPerms, Essentials, CraftBook, EnjinMinecraftPlugin

Support permission options other than prefix/suffix

This is an issue based on https://forums.spongepowered.org/t/luckperms-an-advanced-permissions-system/14274/121

As far as I can see, so far, LuckPerms only supports adding the permission options prefix and suffix. Unfortunately, in Sponge plugins such as mine, Nucleus, we make much heavier use of options, and while we try to mitigate it in the plugin when the support isn't there, it's still somewhat essential to have the support to gain full functionallity.

A good example of where the lack of permission options is hitting us is setting the number of homes a player can has. Using numbered permissions is time consuming and wasteful, because permissions are pretty much just a true/false/undefined state. Options allow us to solve that problem by being any form we choose, and only having to make one query, not multiple queries. We would also expect them to be inheritable, so the meta system you provide would (unfortunately) not quite fit how Options are expected to work.

For context on why this is being requested, http://nucleuspowered.org/docs/modules/chat.html and http://nucleuspowered.org/docs/modules/home.html explains how we use options, and it would be appreciated if you support them too, else Nucleus and other plugins will run with reduced functionallity.

(In case of confusion, I'm suggesting that it should be something like GroupManager's variables (added using manuaddv etc.), or PEX's options)

Set default group on join

Is it impossible to set the default group one gets assigned on the first join or is it me who just can't find the correct command? :)

Great plugin so far!

Pex migration issues with default group and chat prefixes

As of LuckPermsSponge-2.15.5.jar, after migrating from Pex, we're having several issues.

In Pex, a user with no group is defaulting to the "member" group. Also, prefix are prioritized using the "weight" option. Here's an extract from our Pex configuration file:

{
    "subjects": {
        "default": {
            "default": [
                {
                    "contexts": {
                        "localip": "127.0.0.1"
                    },
                    "permissions-default": 0
                },
...
            "user": [
                {
                    "parents": [
                        "group:member"
                    ],
                    "permissions-default": 0
                }
            ]
        },
        "group": {
            "default": [
                {
                    "options": {
                        "prefix": "&7Guest "
                    },
                    "permissions-default": -1
                }
            ],
            "member": [
                {
                    "options": {
                        "weight": "99999",
                        "rank-ladder": "staff",
                        "rank": "1000",
                        "prefix": "&7Member "
                    },
                    "permissions-default": 0,
...
                }
            ],
            "moderator": [
                {
                    "parents": [
                        "group:minimod"
                    ],
                    "options": {
                        "weight": "10400",
                        "rank-ladder": "staff",
                        "rank": "400",
                        "prefix": "&bMod "
                    }
                }
            ],
            "minimod": [
                {
                    "options": {
                        "weight": "10450",
                        "rank-ladder": "staff",
                        "rank": "450",
                        "prefix": "&bMiniMod "
                    },
                    "parents": [
                        "group:member"
                    ]
                }
            ],
...

After migrating to LP, I've noted the following issues:
1- users with no group defined, are attached to the "default" group.
To fix this, I've added "member" group has a parent of "default" group
and I've cleared the "default" group prefix.

2- staff users (a moderator) remain with the "Member " prefix.
From what I understand, all chat prefixes from all groups have the same priority of 100 in LP.
Looks like Pex weight needs to be converted into "chat priority" during migration.

3- I can't remove the migrated prefixes with commands:

>lp group moderator meta info
[19:59:47] [Server thread/INFO] [nucleus]: Server ran the command: /lp group moderator meta info
[19:59:47] [pool-3-thread-38/INFO]: [LP] moderator's Prefixes
[19:59:47] [pool-3-thread-38/INFO]: [LP] -> 100 - "Member " (inherited from member)
[19:59:47] [pool-3-thread-38/INFO]: [LP] -> 100 - "MiniMod " (inherited from minimod)
[19:59:47] [pool-3-thread-38/INFO]: [LP] -> 100 - "Mod " (inherited from self)
[19:59:47] [pool-3-thread-38/INFO]: [LP] moderator has no suffixes.
[19:59:47] [pool-3-thread-38/INFO]: [LP] moderator's Meta
[19:59:47] [pool-3-thread-38/INFO]: [LP] -> rank = "450" (inherited from minimod)
[19:59:47] [pool-3-thread-38/INFO]: [LP] -> rank-ladder = "staff" (inherited from self)
[19:59:47] [pool-3-thread-38/INFO]: [LP] -> weight = "10450" (inherited from minimod)
[19:59:47] [pool-3-thread-38/INFO]: [LP] -> weight = "99999" (inherited from member)
[19:59:47] [pool-3-thread-38/INFO]: [LP] -> rank = "1000" (inherited from member)
[19:59:47] [pool-3-thread-38/INFO]: [LP] -> weight = "10400" (inherited from self)
[19:59:47] [pool-3-thread-38/INFO]: [LP] -> rank = "400" (inherited from self)
>lp group moderator meta removeprefix 100 "Mod "
[19:59:59] [Server thread/INFO] [nucleus]: Server ran the command: /lp group moderator meta removeprefix 100 "Mod "
[19:59:59] [pool-3-thread-42/INFO]: [LP] moderator doesn't have that prefix set.
>lp group moderator meta addprefix 10450 "Mod "
[20:00:07] [Server thread/INFO] [nucleus]: Server ran the command: /lp group moderator meta addprefix 10450 "Mod "
[20:00:07] [pool-3-thread-40/INFO]: [LP] moderator had prefix "Mod " set at a priority of 10450.
[20:00:07] [pool-3-thread-40/INFO]: [LP] (Group data was saved to storage)
>lp group moderator meta removeprefix 10450 "Mod "
[20:00:14] [Server thread/INFO] [nucleus]: Server ran the command: /lp group moderator meta removeprefix 10450 "Mod "
[20:00:14] [pool-3-thread-40/INFO]: [LP] moderator had prefix "Mod " at priority 10450 removed.
[20:00:14] [pool-3-thread-40/INFO]: [LP] (Group data was saved to storage)

Allow support for wildcard permissions without having to define it

Recreating Steps:
A)Install Modifyworld
B)Install LuckPerms
C)Enable item-restrction, item-use-check and player notifications on modifyworld config
D)Apply permission (modifyworld.items.hold.) or (modifyworld.items.have.)
E)Make modifyworld check for items(Spawn in item to your inv, then select your item slot to that item)

There are some reasons why it's a wildcard issue since if you use a more specific permission (modifyworld.items.hold.STONE), it seems to work.

Also, config directly says that wildcards "will only work for plugins that define all of their permissions to the server". Coincidentally modifyworld's plugin.yml has no permissions defined.

The reason why it should be implemented because modifyworld has potentially 100s of different nodes and not being able to use wildcard permission is severely limiting.

User shows as being offline

When i try to make a bungeecord command it said i don't have perms, and when i run /lpb user Soreth info it say me i'm offline, i don't know if it's normal.

Split Datastore issue

I've recently wiped my database. Now, every time i try to add a command for me, or use something, I'm receiving a error of No Permissions. I was wondering why, then I decided to add a permission for me, and seems that LuckPerms didn't re-registered me to the database. Look: http://prntscr.com/d05su5

In my database, the user and uuid tables are empty.
Running:
SpongeForge 1.10.2-6.0.0-BETA-1851
LuckPerms build 45 from Jenkins
LuckPerms in database (MySQL) mode

Tracks

Tracks currently only work for primary groups, which isn't very useful.

They should be able to work on any group, including per-server and per-world assignments.

Plugin Usage for non-ops

Basically, GroupManager has functionality that allows you to give people access to commands for setting groups and permissions, without giving them op or full access to your server. My suggestion (now that I'm using LP) is that this be implemented here.

How GroupManager does it:
Say I'm in the group "Admin" and I know that the "Owner" group has the * permission aka access to everything. I try to add myself into that group with /manuadd Myself Owner. GroupManager tells me that I cannot modify someone with the same permissions as me or higher. So basically, I cannot modify other admins or owners, head-admin, etc.

But wait, I could give myself the permission for overrides, right? So I try to give myself the groupmanager.op permission, which overrides the inheritance limits (without this permission, I can only add people to groups I inherit, and the people must have fewer permissions than me). When I execute the command to add this permission to my group or myself, it tells me that I cannot give permissions that I don't have myself.

Essentially, this allows you to give staff members access to help you with certain tasks, but does not allow them to grant themselves all the power on the server. Maybe you're on vacation and players are saying they can't auction. Your staff member could check permissions and add new ones if necessary. But they would not be able to add new permissions to themselves and gain more power.

Note: The ONLY flaw I could find in the GroupManager system is that I could add a higher group to my own inheritance list with /mangaddi and then I would inherit its permissions and gain more power. However, this could easily be avoided by not giving the rank access to change inheritance, and as discussed above, they wouldn't be able to give themselves this command.

So in all, I think that certain commands like setting a parent group, adding permissions, etc. should have these limits like in GroupManager. I think that once this is implemented, any possible loopholes (like the inheritance one) should be explained so that server admins know exactly how to set it up so that non-ops cannot use the plugin to give themselves more power.

Ranks randomly dissapearing

Using LuckPermsSponge-2.14.6.jar, certain players ranks, permissions, prefixes and suffixes randomly disappear(all at the same time). I cannot confirm whether its more than one player at a time because unless you are typing in chat or issuing a command you won't notice. Relogging gives all the permission back.

Offline UUIDs on a Bungee network have been fixed in latest Paper builds

# If this server is in offline or online mode.
# This setting allows a player to have the same UUID across a network of offline mode/mixed servers.

# You should generally reflect the setting in server.properties here. Except when...

#1. You have Spigot servers connected to a BungeeCord proxy, with online-mode set to false, but 'bungeecord' set to true in the spigot.yml
#    AND 'ip-forward' set to true in the BungeeCord config.yml
#    In this case, set online-mode in LuckPerms to true, despite the server being in offline mode.

Paper is now able to handle offline mode uuids correctly if the "online-mode-bungee" option in the paper.yml file is set to false. I think you should add this info in the option comment.
@lucko

Help? Can't figure out how permissions work

Well, I have Nucleus and LuckPerms installed on my SpongeForge 1.10.2 server. I can't figure out how the groups/permissions work...

Iinitially, I created a group called admin. After, I used /nucleus setupperms ADMIN admin, and the group received the right permissions. Then, I used /luckperms user setprimarygroup admin, but I still having no permissions. Same happened with the default group (I used /nucleus setupperms USER default to add permissions to the default group).

Can you help me, or point me to a wiki/something else?

Datastore no good method to get UUID and Username

In the current implementation is there only one method to get all the users
https://github.com/lucko/LuckPerms/blob/master/common/src/main/java/me/lucko/luckperms/storage/Datastore.java#L77
This returns a Set with UUID's

the only thing is now, that when you load a user, by UUID / some sort, for the cache, you also need a username.
Now the thing is, there is not a great way for getting Usernames instead of requesting that for every one individually.

Now what i am searching for is kind of hashmap system, for getting UUID with Username
in SQL "SELECT UUID, Username FROM ..."

Because the time needed for my own private database is now over 3min... because every user got a unique i want to know you username, if known... in single requests
while i got the feeling this could be smarter done

Added timed ranks

I wasn't sure if this plugin already has this option that's why i am posting this :).

Basically timed ranks.

Race condition in permission inheritance

  • possibly related to per-server permissions
  • possibly occurs when the server name is set in the config
  • maybe related to Bukkit OPs

Verbose returns UNDEF for the node, even if it is set directly to the user.

Datastore improvements

Refactor the datastore, so only unique or "non-default" users are saved, and users that only inherit the default group are not.

Will require removing support for a custom default group.

Improve permissions debug

So the current command of debug is a bit confusing since you do the following

/lp verbose true filter
/lp verbose false filter

Setting verbose to true sends the output to player chat and setting it to false does not. However, with the word "verbose", to me it sounds like if it is false it should be outputting to a log and if true it redirects to player chat. Perhaps there should be another command to turn perm debug on which would send ALL output to a logfile/console by default. If a user wanted it to be verbose(sent to chat), they could turn it on.

So something like

/lp permdebug on filter
/lp verbose true (sends to chat but remains logging to log file)
/lp verbose false (disables chat messages)
/lp permdebug false (disables all debugging)

Bug with Sponge miscalculation player leaves/joins

Sometimes, my auto-rejoin script that sends players from the lobby "hangs" and will attempt a connection but fail. Sponge fires a player disconnect event whenever the hung connection times out. If you relog before it times out, you will be logged in but Sponge will fire a disconnect event for you which causes this bug. Everything breaks.

[20:04:29] [Server thread/ERROR] [Sponge]: Could not pass MoveEntityEvent$Impl to Plugin{id=griefprevention, name=GriefPrevention, version=2.2.0, description=This plugin is designed to
prevent all forms of grief., source=/opt/mcf/mods/griefprevention-1.10.2-2.2.0-DEBUG2.jar}
com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalStateException: Recursive load of: me.lucko.luckperms.sponge.model.SpongeUser$UserSubject@604ad371
        at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2201) ~[minecraft_server.1.10.2.jar:?]
        at com.google.common.cache.LocalCache.get(LocalCache.java:3934) ~[minecraft_server.1.10.2.jar:?]
        at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3938) ~[minecraft_server.1.10.2.jar:?]
        at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4821) ~[minecraft_server.1.10.2.jar:?]
        at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4827) ~[minecraft_server.1.10.2.jar:?]
        at me.lucko.luckperms.common.contexts.ContextManager.getApplicableContext(ContextManager.java:60) ~[ContextManager.class:?]
        at me.lucko.luckperms.sponge.model.SpongeUser$UserSubject.getActiveContextSet(SpongeUser.java:182) ~[SpongeUser$UserSubject.class:?]
        at me.lucko.luckperms.sponge.service.LuckPermsSubject.getOption(LuckPermsSubject.java:95) ~[LuckPermsSubject.class:?]
        at me.ryanhamshire.griefprevention.util.PlayerUtils.getOptionDoubleValue(PlayerUtils.java:136) ~[PlayerUtils.class:?]
        at me.ryanhamshire.griefprevention.PlayerData.refreshPlayerOptions(PlayerData.java:200) ~[PlayerData.class:?]
        at me.ryanhamshire.griefprevention.PlayerData.<init>(PlayerData.java:192) ~[PlayerData.class:?]
        at me.ryanhamshire.griefprevention.claim.ClaimWorldManager.createPlayerData(ClaimWorldManager.java:117) ~[ClaimWorldManager.class:?]
        at me.ryanhamshire.griefprevention.claim.ClaimWorldManager.getOrCreatePlayerData(ClaimWorldManager.java:88) ~[ClaimWorldManager.class:?]
        at me.ryanhamshire.griefprevention.DataStore.getOrCreatePlayerData(DataStore.java:1470) ~[DataStore.class:?]
        at me.ryanhamshire.griefprevention.DataStore.getPlayerData(DataStore.java:1465) ~[DataStore.class:?]
        at me.ryanhamshire.griefprevention.event.EntityEventHandler.onEntityMove(EntityEventHandler.java:593) ~[EntityEventHandler.class:?]
        at org.spongepowered.common.event.listener.MoveEntityEventListener_EntityEventHandler_onEntityMove100.handle(Unknown Source) ~[?:?]
        at org.spongepowered.common.event.RegisteredListener.handle(RegisteredListener.java:95) ~[RegisteredListener.class:1.10.2-2123-5.1.0-BETA-1923]
        at org.spongepowered.mod.event.SpongeModEventManager.post(SpongeModEventManager.java:357) [SpongeModEventManager.class:1.10.2-2123-5.1.0-BETA-1923]
        at org.spongepowered.mod.event.SpongeModEventManager.post(SpongeModEventManager.java:398) [SpongeModEventManager.class:1.10.2-2123-5.1.0-BETA-1923]
        at org.spongepowered.mod.event.SpongeModEventManager.post(SpongeModEventManager.java:370) [SpongeModEventManager.class:1.10.2-2123-5.1.0-BETA-1923]
        at org.spongepowered.common.SpongeImpl.postEvent(SpongeImpl.java:141) [SpongeImpl.class:1.10.2-2123-5.1.0-BETA-1923]
        at net.minecraft.network.NetHandlerPlayServer.redirect$throwMoveEvent$zgp000(NetHandlerPlayServer.java:463) [me.class:?]
        at net.minecraft.network.NetHandlerPlayServer.func_147347_a(NetHandlerPlayServer.java:406) [me.class:?]
        at net.minecraft.network.play.client.CPacketPlayer.func_148833_a(SourceFile:126) [iw.class:?]
        at net.minecraft.network.play.client.CPacketPlayer$Position.func_148833_a(SourceFile:57) [iw$a.class:?]
        at org.spongepowered.common.network.PacketUtil.onProcessPacket(PacketUtil.java:136) [PacketUtil.class:1.10.2-2123-5.1.0-BETA-1923]
        at net.minecraft.network.PacketThreadUtil$1.redirect$onProcessPacket$zjc000(SourceFile:39) [fl$1.class:?]
        at net.minecraft.network.PacketThreadUtil$1.run(SourceFile:13) [fl$1.class:?]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_91]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_91]
        at net.minecraft.util.Util.func_181617_a(SourceFile:45) [h.class:?]
        at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:668) [MinecraftServer.class:?]
        at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:387) [ld.class:?]
        at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:613) [MinecraftServer.class:?]
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:471) [MinecraftServer.class:?]
        at java.lang.Thread.run(Thread.java:745) [?:1.8.0_91]
Caused by: java.lang.IllegalStateException: Recursive load of: me.lucko.luckperms.sponge.model.SpongeUser$UserSubject@604ad371
        at com.google.common.base.Preconditions.checkState(Preconditions.java:200) ~[minecraft_server.1.10.2.jar:?]
        at com.google.common.cache.LocalCache$Segment.waitForLoadingValue(LocalCache.java:2297) ~[minecraft_server.1.10.2.jar:?]
        at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2287) ~[minecraft_server.1.10.2.jar:?]
        at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2195) ~[minecraft_server.1.10.2.jar:?]
        at com.google.common.cache.LocalCache.get(LocalCache.java:3934) ~[minecraft_server.1.10.2.jar:?]
        at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3938) ~[minecraft_server.1.10.2.jar:?]
        at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4821) ~[minecraft_server.1.10.2.jar:?]
        at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4827) ~[minecraft_server.1.10.2.jar:?]
        at me.lucko.luckperms.common.contexts.ContextManager.getApplicableContext(ContextManager.java:60) ~[ContextManager.class:?]
        at me.lucko.luckperms.sponge.model.SpongeUser$UserSubject.getActiveContextSet(SpongeUser.java:182) ~[SpongeUser$UserSubject.class:?]
        at me.lucko.luckperms.sponge.service.LuckPermsSubject.getOption(LuckPermsSubject.java:95) ~[LuckPermsSubject.class:?]
        at me.ryanhamshire.griefprevention.util.PlayerUtils.getOptionDoubleValue(PlayerUtils.java:136) ~[PlayerUtils.class:?]
        at me.ryanhamshire.griefprevention.PlayerData.refreshPlayerOptions(PlayerData.java:200) ~[PlayerData.class:?]
        at me.ryanhamshire.griefprevention.PlayerData.<init>(PlayerData.java:192) ~[PlayerData.class:?]
        at me.ryanhamshire.griefprevention.claim.ClaimWorldManager.createPlayerData(ClaimWorldManager.java:117) ~[ClaimWorldManager.class:?]
        at me.ryanhamshire.griefprevention.claim.ClaimWorldManager.getOrCreatePlayerData(ClaimWorldManager.java:88) ~[ClaimWorldManager.class:?]
        at me.ryanhamshire.griefprevention.DataStore.getOrCreatePlayerData(DataStore.java:1470) ~[DataStore.class:?]
        at me.ryanhamshire.griefprevention.DataStore.getPlayerData(DataStore.java:1465) ~[DataStore.class:?]
        at me.ryanhamshire.griefprevention.DataStore.getClaimAtPlayer(DataStore.java:386) ~[DataStore.class:?]
        at me.ryanhamshire.griefprevention.claim.ClaimContextCalculator.accumulateContexts(ClaimContextCalculator.java:43) ~[ClaimContextCalculator.class:?]
        at me.ryanhamshire.griefprevention.claim.ClaimContextCalculator.accumulateContexts(ClaimContextCalculator.java:37) ~[ClaimContextCalculator.class:?]
        at me.lucko.luckperms.sponge.contexts.SpongeCalculatorLink.giveApplicableContext(SpongeCalculatorLink.java:42) ~[SpongeCalculatorLink.class:?]
        at me.lucko.luckperms.sponge.contexts.SpongeCalculatorLink.giveApplicableContext(SpongeCalculatorLink.java:35) ~[SpongeCalculatorLink.class:?]
        at me.lucko.luckperms.common.contexts.ContextManager.calculateApplicableContext(ContextManager.java:54) ~[ContextManager.class:?]
        at me.lucko.luckperms.common.contexts.ContextManager.access$000(ContextManager.java:37) ~[ContextManager.class:?]
        at me.lucko.luckperms.common.contexts.ContextManager$1.load(ContextManager.java:48) ~[ContextManager$1.class:?]
        at me.lucko.luckperms.common.contexts.ContextManager$1.load(ContextManager.java:45) ~[ContextManager$1.class:?]
        at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3524) ~[minecraft_server.1.10.2.jar:?]
        at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2317) ~[minecraft_server.1.10.2.jar:?]
        at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2280) ~[minecraft_server.1.10.2.jar:?]
        at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2195) ~[minecraft_server.1.10.2.jar:?]
        ... 36 more

Import groups from h2 storage to yaml.

How to move permissions and groups from h2 database to yaml? When I changed the type of storage to yml rank were not transferred.

And how to set default group? Like Player is the default.

All development builds gone?

Lastly, i checked for New development builds but almost all builds were one thing called gone! Fix? Explanation?

-Jamie

ClassNotFoundException: com.mysql.jdbc.jdbc2.optional.MysqlDataSource

I can't load LuckPerms in my Sponge server, I get that error in startup:

[22:31:24] [Server thread/ERROR] [Sponge/sponge]: Could not pass FMLPreInitializationEvent to Plugin{id=luckperms, name=LuckPerms, version=2.12.19, description=A permissions plugin, authors=[Luck], source=/home/fracica/SERVIDOR/Teste/mods/LuckPermsSponge-2.12.19.jar}
java.lang.RuntimeException: java.lang.ClassNotFoundException: com.mysql.jdbc.jdbc2.optional.MysqlDataSource
    at me.lucko.luckperms.lib.hikari.util.UtilityElf.createInstance(UtilityElf.java:90) ~[UtilityElf.class:?]
    at me.lucko.luckperms.lib.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:314) ~[PoolBase.class:?]
    at me.lucko.luckperms.lib.hikari.pool.PoolBase.<init>(PoolBase.java:108) ~[PoolBase.class:?]
    at me.lucko.luckperms.lib.hikari.pool.HikariPool.<init>(HikariPool.java:99) ~[HikariPool.class:?]
    at me.lucko.luckperms.lib.hikari.HikariDataSource.<init>(HikariDataSource.java:71) ~[HikariDataSource.class:?]
    at me.lucko.luckperms.common.storage.methods.MySQLDatastore.init(MySQLDatastore.java:80) ~[MySQLDatastore.class:?]
    at java.lang.Iterable.forEach(Iterable.java:75) ~[?:1.8.0_91]
    at me.lucko.luckperms.common.storage.SplitDatastore.init(SplitDatastore.java:49) ~[SplitDatastore.class:?]
    at me.lucko.luckperms.common.storage.StorageFactory.getDatastore(StorageFactory.java:80) ~[StorageFactory.class:?]
    at me.lucko.luckperms.sponge.LPSpongePlugin.onEnable(LPSpongePlugin.java:137) ~[LPSpongePlugin.class:?]
    at org.spongepowered.common.event.listener.GamePreInitializationEventListener_LPSpongePlugin_onEnable6.handle(Unknown Source) ~[?:?]
    at org.spongepowered.common.event.RegisteredListener.handle(RegisteredListener.java:95) ~[RegisteredListener.class:1.10.2-2098-5.1.0-BETA-1814]
    at org.spongepowered.mod.event.SpongeModEventManager.post(SpongeModEventManager.java:356) [SpongeModEventManager.class:1.10.2-2098-5.1.0-BETA-1814]
    at org.spongepowered.mod.event.SpongeModEventManager.post(SpongeModEventManager.java:397) [SpongeModEventManager.class:1.10.2-2098-5.1.0-BETA-1814]
    at org.spongepowered.mod.SpongeMod.onStateEvent(SpongeMod.java:227) [SpongeMod.class:1.10.2-2098-5.1.0-BETA-1814]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_91]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_91]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_91]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_91]
    at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) [minecraft_server.1.10.2.jar:?]
    at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) [minecraft_server.1.10.2.jar:?]
    at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) [minecraft_server.1.10.2.jar:?]
    at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) [minecraft_server.1.10.2.jar:?]
    at com.google.common.eventbus.EventBus.post(EventBus.java:275) [minecraft_server.1.10.2.jar:?]
    at net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:239) [LoadController.class:?]
    at net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:217) [LoadController.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_91]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_91]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_91]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_91]
    at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) [minecraft_server.1.10.2.jar:?]
    at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) [minecraft_server.1.10.2.jar:?]
    at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) [minecraft_server.1.10.2.jar:?]
    at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) [minecraft_server.1.10.2.jar:?]
    at com.google.common.eventbus.EventBus.post(EventBus.java:275) [minecraft_server.1.10.2.jar:?]
    at net.minecraftforge.fml.common.LoadController.redirect$onPost$zzd000(LoadController.java:53) [LoadController.class:?]
    at net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:142) [LoadController.class:?]
    at net.minecraftforge.fml.common.Loader.preinitializeMods(Loader.java:614) [Loader.class:?]
    at net.minecraftforge.fml.server.FMLServerHandler.beginServerLoading(FMLServerHandler.java:98) [FMLServerHandler.class:?]
    at net.minecraftforge.fml.common.FMLCommonHandler.onServerStart(FMLCommonHandler.java:328) [FMLCommonHandler.class:?]
    at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:121) [ld.class:?]
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:431) [MinecraftServer.class:?]
    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_91]
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.jdbc2.optional.MysqlDataSource
    at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:191) ~[launchwrapper-1.12.jar:?]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_91]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_91]
    at me.lucko.luckperms.lib.hikari.util.UtilityElf.createInstance(UtilityElf.java:77) ~[UtilityElf.class:?]
    ... 42 more

I configured LuckPerms to run with MySQL, and I have the driver, I have an other 1.7.10 server running and other plugin that uses that driver, then...)
Running LuckPermsSponge-2.12.19, on a 1.10.2 Sponge server.
SpongeForge version: 1.10.2-2098-5.1.0-BETA-1814
Forge version: 1.10.2-12.18.2.2107

[Sponge] Error with ComputerCraft Turtles

This issue happens whenever isBlockProtected is fired, which calls ChangeBlockEvent.Pre, which GriefPrevention listens on and requests the permission related to it. This seems to fail for some reason.
It also fails on PermissionsEx.

[00:00:14] [Server thread/ERROR] [Sponge]: Could not pass ChangeBlockEvent$Pre$Impl to Plugin{id=griefprevention, name=GriefPrevention, version=2.2.0, description=This plugin is designed to prevent all forms of grief., source=/opt/mcf/mods/griefprevention-1.10.2-2.2.0.145.jar}
java.lang.NullPointerException
        at me.lucko.luckperms.sponge.service.LuckPermsService.lambda$convertContexts$0(LuckPermsService.java:173) ~[LuckPermsService.class:?]
        at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[?:1.8.0_91]
        at java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1540) ~[?:1.8.0_91]
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[?:1.8.0_91]
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[?:1.8.0_91]
        at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) ~[?:1.8.0_91]
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:1.8.0_91]
        at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499) ~[?:1.8.0_91]
        at me.lucko.luckperms.sponge.service.LuckPermsService.convertContexts(LuckPermsService.java:173) ~[LuckPermsService.class:?]
        at me.lucko.luckperms.sponge.service.LuckPermsSubject.getPermissionValue(LuckPermsSubject.java:47) ~[LuckPermsSubject.class:?]
        at net.minecraft.entity.player.EntityPlayerMP.getPermissionValue(EntityPlayerMP.java:148) ~[lu.class:?]
        at me.ryanhamshire.griefprevention.GPPermissionHandler.getUserPermission(GPPermissionHandler.java:115) ~[GPPermissionHandler.class:?]
        at me.ryanhamshire.griefprevention.GPPermissionHandler.getClaimPermission(GPPermissionHandler.java:83) ~[GPPermissionHandler.class:?]
        at me.ryanhamshire.griefprevention.claim.Claim.allowBuild(Claim.java:504) ~[Claim.class:?]
        at me.ryanhamshire.griefprevention.GriefPrevention.allowBuild(GriefPrevention.java:1186) ~[GriefPrevention.class:?]
        at me.ryanhamshire.griefprevention.event.BlockEventHandler.onBlockPre(BlockEventHandler.java:131) ~[BlockEventHandler.class:?]
        at org.spongepowered.common.event.listener.PreListener_BlockEventHandler_onBlockPre66.handle(Unknown Source) ~[?:?]
        at org.spongepowered.common.event.RegisteredListener.handle(RegisteredListener.java:95) ~[RegisteredListener.class:1.10.2-2123-5.1.0-BETA-1923]
        at org.spongepowered.mod.event.SpongeModEventManager.post(SpongeModEventManager.java:357) [SpongeModEventManager.class:1.10.2-2123-5.1.0-BETA-1923]
        at org.spongepowered.mod.event.SpongeModEventManager.post(SpongeModEventManager.java:398) [SpongeModEventManager.class:1.10.2-2123-5.1.0-BETA-1923]
        at org.spongepowered.mod.event.SpongeModEventManager.post(SpongeModEventManager.java:370) [SpongeModEventManager.class:1.10.2-2123-5.1.0-BETA-1923]
        at org.spongepowered.common.SpongeImpl.postEvent(SpongeImpl.java:141) [SpongeImpl.class:1.10.2-2123-5.1.0-BETA-1923]
        at net.minecraft.server.dedicated.DedicatedServer.func_175579_a(DedicatedServer.java:110) [ld.class:?]
        at dan200.computercraft.ComputerCraft.isBlockEnterable(ComputerCraft.java:454) [ComputerCraft.class:?]
        at dan200.computercraft.shared.turtle.core.TurtleMoveCommand.canEnter(TurtleMoveCommand.java:163) [TurtleMoveCommand.class:?]
        at dan200.computercraft.shared.turtle.core.TurtleMoveCommand.execute(TurtleMoveCommand.java:45) [TurtleMoveCommand.class:?]
        at dan200.computercraft.shared.turtle.core.TurtleBrain.updateCommands(TurtleBrain.java:998) [TurtleBrain.class:?]
        at dan200.computercraft.shared.turtle.core.TurtleBrain.update(TurtleBrain.java:185) [TurtleBrain.class:?]
        at dan200.computercraft.shared.turtle.blocks.TileTurtle.func_73660_a(TileTurtle.java:259) [TileTurtle.class:?]
        at org.spongepowered.common.event.tracking.TrackingUtil.tickTileEntity(TrackingUtil.java:211) [TrackingUtil.class:1.10.2-2123-5.1.0-BETA-1923]
        at net.minecraft.world.WorldServer.redirect$onUpdateTileEntities$zjk000(WorldServer.java:1298) [ls.class:?]
        at net.minecraft.world.World.func_72939_s(World.java:1282) [aid.class:?]
        at net.minecraft.world.WorldServer.func_72939_s(WorldServer.java:713) [ls.class:?]
        at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:709) [MinecraftServer.class:?]
        at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:387) [ld.class:?]
        at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:613) [MinecraftServer.class:?]
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:471) [MinecraftServer.class:?]
        at java.lang.Thread.run(Thread.java:745) [?:1.8.0_91]

Add option to disable OP access

Atm OP users are able use any LuckPerms command, in my opinion it would be great to allow server owners to disable that, like PEX does.

[1.10.2] Connection leak detection

Randomly it spams the console with:

[23:50:00] [luckperms housekeeper/WARN] [me.lucko.luckperms.lib.hikari.pool.ProxyLeakTask]: Connection leak detection triggered for me.lucko.luckperms.lib.mysql.jdbc.JDBC4Connection@5fd73187, stack trace follows
java.lang.Exception: Apparent connection leak detected
        at me.lucko.luckperms.common.storage.methods.MySQLDatastore.getConnection(MySQLDatastore.java:139) ~[MySQLDatastore.class:?]
        at me.lucko.luckperms.common.storage.methods.MySQLDatastore.runQuery(MySQLDatastore.java:114) ~[MySQLDatastore.class:?]
        at me.lucko.luckperms.common.storage.methods.SQLDatastore.runQuery(SQLDatastore.java:97) ~[SQLDatastore.class:?]
        at me.lucko.luckperms.common.storage.methods.SQLDatastore.loadAllGroups(SQLDatastore.java:309) ~[SQLDatastore.class:?]
        at me.lucko.luckperms.common.storage.methods.MySQLDatastore.loadAllGroups(MySQLDatastore.java:36) ~[MySQLDatastore.class:?]
        at me.lucko.luckperms.common.storage.SplitDatastore.loadAllGroups(SplitDatastore.java:106) ~[SplitDatastore.class:?]
        at me.lucko.luckperms.common.runnables.UpdateTask.run(UpdateTask.java:44) ~[UpdateTask.class:?]
        at org.spongepowered.api.scheduler.Task$Builder.lambda$execute$0(Task.java:138) ~[Task$Builder.class:1.10.2-2098-5.1.0-BETA-1814]
        at org.spongepowered.common.scheduler.SchedulerBase.lambda$startTask$0(SchedulerBase.java:177) ~[SchedulerBase.class:1.10.2-2098-5.1.0-BETA-1814]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_91]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_91]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_91]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_91]
        at java.lang.Thread.run(Thread.java:745) [?:1.8.0_91]

Running LuckPermsSponge-2.12.20, on a 1.10.2 Sponge server.
SpongeForge version: 1.10.2-2098-5.1.0-BETA-1814
Forge version: 1.10.2-12.18.2.2107
Another error:

 java.sql.SQLTransientConnectionException: luckperms - Connection is not available, request timed out after 30000ms.
[23:51:29] [pool-2-thread-37/INFO] [STDERR]: [me.lucko.luckperms.common.storage.methods.MySQLDatastore:runQuery:125]:   at me.lucko.luckperms.lib.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:548)
[23:51:29] [pool-2-thread-37/INFO] [STDERR]: [me.lucko.luckperms.common.storage.methods.MySQLDatastore:runQuery:125]:   at me.lucko.luckperms.lib.hikari.pool.HikariPool.getConnection(HikariPool.java:186)
[23:51:29] [pool-2-thread-37/INFO] [STDERR]: [me.lucko.luckperms.common.storage.methods.MySQLDatastore:runQuery:125]:   at me.lucko.luckperms.lib.hikari.pool.HikariPool.getConnection(HikariPool.java:145)
[23:51:29] [pool-2-thread-37/INFO] [STDERR]: [me.lucko.luckperms.common.storage.methods.MySQLDatastore:runQuery:125]:   at me.lucko.luckperms.lib.hikari.HikariDataSource.getConnection(HikariDataSource.java:83)
[23:51:29] [pool-2-thread-37/INFO] [STDERR]: [me.lucko.luckperms.common.storage.methods.MySQLDatastore:runQuery:125]:   at me.lucko.luckperms.common.storage.methods.MySQLDatastore.getConnection(MySQLDatastore.java:139)
[23:51:29] [pool-2-thread-37/INFO] [STDERR]: [me.lucko.luckperms.common.storage.methods.MySQLDatastore:runQuery:125]:   at me.lucko.luckperms.common.storage.methods.MySQLDatastore.runQuery(MySQLDatastore.java:114)
[23:51:29] [pool-2-thread-37/INFO] [STDERR]: [me.lucko.luckperms.common.storage.methods.MySQLDatastore:runQuery:125]:   at me.lucko.luckperms.common.storage.methods.SQLDatastore.runQuery(SQLDatastore.java:97)
[23:51:29] [pool-2-thread-37/INFO] [STDERR]: [me.lucko.luckperms.common.storage.methods.MySQLDatastore:runQuery:125]:   at me.lucko.luckperms.common.storage.methods.SQLDatastore.loadAllTracks(SQLDatastore.java:407)
[23:51:29] [pool-2-thread-37/INFO] [STDERR]: [me.lucko.luckperms.common.storage.methods.MySQLDatastore:runQuery:125]:   at me.lucko.luckperms.common.storage.methods.MySQLDatastore.loadAllTracks(MySQLDatastore.java:36)
[23:51:29] [pool-2-thread-37/INFO] [STDERR]: [me.lucko.luckperms.common.storage.methods.MySQLDatastore:runQuery:125]:   at me.lucko.luckperms.common.storage.SplitDatastore.loadAllTracks(SplitDatastore.java:131)
[23:51:29] [pool-2-thread-37/INFO] [STDERR]: [me.lucko.luckperms.common.storage.methods.MySQLDatastore:runQuery:125]:   at me.lucko.luckperms.common.runnables.UpdateTask.run(UpdateTask.java:51)
[23:51:29] [pool-2-thread-37/INFO] [STDERR]: [me.lucko.luckperms.common.storage.methods.MySQLDatastore:runQuery:125]:   at org.spongepowered.api.scheduler.Task$Builder.lambda$execute$0(Task.java:138)
[23:51:29] [pool-2-thread-37/INFO] [STDERR]: [me.lucko.luckperms.common.storage.methods.MySQLDatastore:runQuery:125]:   at org.spongepowered.common.scheduler.SchedulerBase.lambda$startTask$0(SchedulerBase.java:177)
[23:51:29] [pool-2-thread-37/INFO] [STDERR]: [me.lucko.luckperms.common.storage.methods.MySQLDatastore:runQuery:125]:   at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[23:51:29] [pool-2-thread-37/INFO] [STDERR]: [me.lucko.luckperms.common.storage.methods.MySQLDatastore:runQuery:125]:   at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[23:51:29] [pool-2-thread-37/INFO] [STDERR]: [me.lucko.luckperms.common.storage.methods.MySQLDatastore:runQuery:125]:   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
[23:51:29] [pool-2-thread-37/INFO] [STDERR]: [me.lucko.luckperms.common.storage.methods.MySQLDatastore:runQuery:125]:   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
[23:51:29] [pool-2-thread-37/INFO] [STDERR]: [me.lucko.luckperms.common.storage.methods.MySQLDatastore:runQuery:125]:   at java.lang.Thread.run(Thread.java:745)

Don't work with java 7

Hi, I am currently using spigot 1.10.2 and your plugins don't work on java 7. Before you send me a message back saying upgrade to java 8, I can't because I am not the owner of the host.

It will be really nice if you make it work with java 7

Permission System!?

Hi there! ;)
So, maybe im just to dumb for this Permission System :D but i dont get, why my Permission dont work...
What i did..

  1. Set up the MySqL Database-storage (workes fine) then i...
    1.1 /luckperms creategroup admin
  2. /luckperms creategroup supp
  3. /luckperms group admin parent add supp
  4. /luckperms group admin meta addprefix 100 "&cAdmin "
  5. /luckperms group supp meta addprefix 90 "&a Supp"
  6. /luckperms group supp set chatex.allowchat true lobby1
  7. /luckperms group supp set chatex.allowchat true
    (Edit: 7.1 I surely did /luckperm user ZnapGaming setprimarygroup admin / supp)
  8. But i still cant chat with the group "supp" (Im using ChatEX+Vault+Apis)
    What am i doing wrong? The perm. even shows up in the DataBase: http://prntscr.com/cye1ik

Btw: maybe i will translate the lang.yml soon :) (to german)

[minor] Unsupported Operation

When calling "MetaUtils.getPrefix(new GroupLink(group), null, null, true);"
I got a Unsupported Operation Exception

When i trace it down, it comes down to this,
You create here a new Empty list, but that list is immutable
Documentation:

Returns an empty list (immutable).

https://github.com/lucko/LuckPerms/blob/2429831153d574da42bd9d290691294d57ec590c/common/src/main/java/me/lucko/luckperms/api/implementation/internal/PermissionHolderLink.java#L68

So when you do later the add method on it, it is unsupported :/

Stacktrace
http://pastebin.com/3vbjWNFs

GP option for extra claims not working

Using "/perms user xxx meta set griefprevention.claim-limit 3" does not give the player the allowance for claims defined in the option. I have spoken with bloodshot to confirm it's working in GP, which means the option in luckperms isn't working properly. Other options that don't include the mod id are working fine however (for different plugins than GP).

LuckPerms-2.11.21 (CI Build) <-- "Thank's captain obvious"

So obviously considering this is a development build there is gonna be issues, but reporting issues is the only way you will know about the issue, right? (Just trying to be helpful, no harm done)

[01:54:59 WARN]: me.lucko.luckperms.exceptions.ObjectAlreadyHasException
[01:54:59 WARN]:        at me.lucko.luckperms.core.PermissionHolder.setPermission(PermissionHolder.java:558)
[01:54:59 WARN]:        at me.lucko.luckperms.core.PermissionHolder.setPermission(PermissionHolder.java:588)
[01:54:59 WARN]:        at me.lucko.luckperms.users.UserManager.giveDefaultIfNeeded(UserManager.java:80)
[01:54:59 WARN]:        at me.lucko.luckperms.storage.methods.SQLDatastore.lambda$loadUser$5(SQLDatastore.java:180)
[01:54:59 WARN]:        at me.lucko.luckperms.storage.methods.H2Datastore.runQuery(H2Datastore.java:91)
[01:54:59 WARN]:        at me.lucko.luckperms.storage.methods.SQLDatastore.loadUser(SQLDatastore.java:149)
[01:54:59 WARN]:        at me.lucko.luckperms.storage.methods.H2Datastore.loadUser(H2Datastore.java:31)
[01:54:59 WARN]:        at me.lucko.luckperms.utils.AbstractListener.onAsyncLogin(AbstractListener.java:62)
[01:54:59 WARN]:        at me.lucko.luckperms.BukkitListener.onPlayerPreLogin(BukkitListener.java:59)
[01:54:59 WARN]:        at com.destroystokyo.paper.event.executor.MethodHandleEventExecutor.execute(MethodHandleEventExecutor.java:35)
[01:54:59 WARN]:        at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:74)
[01:54:59 WARN]:        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
[01:54:59 WARN]:        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:517)
[01:54:59 WARN]:        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:499)
[01:54:59 WARN]:        at net.minecraft.server.v1_10_R1.LoginListener$LoginHandler.fireEvents(LoginListener.java:248)
[01:54:59 WARN]:        at net.minecraft.server.v1_10_R1.LoginListener$3.run(LoginListener.java:209)
[01:54:59 INFO]: UUID of player OlafsFurryBalls is 75fc8638-0150-40e0-aab6-6d036fbcd35c
[01:55:00 INFO]: OlafsFurryBalls[/127.0.0.1:56994] logged in with entity id 154 at ([world]0.5578618169270192, 83.74885831273774, 1.7605709863437045)
>version
[01:56:09 INFO]: This server is running Paper version git-Paper-887 (MC: 1.10.2) (Implementing API version 1.10.2-R0.1-SNAPSHOT)
[01:56:09 INFO]: Checking version, please wait...
[01:56:10 INFO]: You are running the latest version
>plugins
[01:56:11 INFO]: Plugins (14): AsyncWorldEditInjector, AsyncWorldEdit, Vault, ProtocolLib, LuckPerms, WorldEdit, Essentials, EssentialsChat, EssentialsAntiBuild, EssentialsSpawn, WorldGuard, WorldGuardExtraFlags, ConditionalPerms, WorldGuardFishing

Per-server default group assignments

Is there any way to set the default group for when a new user logs into the server?! Cuz i really can't find it, not in tracks not in groups, nowhere. So maybe you could implement it or show me the LuckNode(Thats how i call your luck perms nodes for things like prefixes), or lead me to the command (If there). Cuz otherwise i have to use a first join plugin and i don't want that ๐Ÿ‘

Also can you tell me whats the difference between the bungee cord version and the normal version?

-Jamie

Standalone GUI editor

It would be cool to provide a CLI and a GUI to manage permissions in large networks.

Capitalization

Hi there. In converting to LuckPerms (went smoothly from GroupManager and permissionsex) all my capital lettered groups such as aGroup become agroup which breaks how the side loaded scoreboard works/looks.

Thermos 1.7.10 Load Error

I get a class not found exception when I try to load your plugin on Thermos for 1.7.10 Forge.
It works just fine in 1.10.2

Move repositories to the right context

Atm all the maven repos are configured in thhe main pom file, it would be more correct to put them in the specific modules and keep in the parent pom only the common repos.

Prefix dont want to work

Luckperms gives sending no Prefix to Vault.
It gives no Prefix in the Chat with a Chat Plugin.
I have used EssentialsChat and alot more Chat Plugins that use Vault.
My Vault is running on the latest Version.
I think its a Problem from LuckPerms.
The Prefix works with another Plugin. (BungeePerms)
I hope you can help me.

Greetings from Marcel - (GERMANY)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.