LuckPerms

LuckPerms

41.4k Downloads

SpongeForge Tables Not Found

kmccmk9 opened this issue ยท 14 comments

commented

Hello running version 4.1.61 with SpongeForge 1.12.2-2611-8.0.0-BETA-3003 and 1.12.2-2611-7.1.0-BETA-2990 I get the following SQL error with H2 database configuration. This causes many subsequent failures. I can provide as much info as needed.

[22:07:50] [Server thread/INFO]:                __        __   ___  __         __
[22:07:50] [Server thread/INFO]:     |    |  | /  ` |__/ |__) |__  |__)  |\/| /__`
[22:07:50] [Server thread/INFO]:     |___ \__/ \__, |  \ |    |___ |  \  |  | .__/
[22:07:50] [Server thread/INFO]:
[22:07:50] [Server thread/INFO]:   Loading version v4.1.61 on Sponge - SpongeForge
[22:07:50] [Server thread/INFO]:   Running on server version SpongeAPI: 8.0.0-SNAPSHOT-252eef2 - SpongeForge: 1.12.2-2611-8.0.0-BETA-3003
[22:07:50] [Server thread/INFO]:
[22:07:50] [Server thread/INFO]: [LP] Loading configuration...
[22:07:51] [Server thread/INFO]: [LP] Loading storage provider... [H2]
[22:07:52] [Server thread/INFO] [STDERR]: [org.h2.jdbc.JdbcSQLException:printStackTrace:80]: org.h2.jdbc.JdbcSQLException: Table "LUCKPERMS_ACTIONS" not found; SQL statement:
ALTER TABLE luckperms_actions MODIFY COLUMN actor_name VARCHAR(100) [42102-196]
...
[22:07:52] [Server thread/INFO]: [LP] Loading internal permission managers...
[22:07:52] [Server thread/INFO]: [LP] Registering PermissionService...
[22:07:53] [Server thread/INFO]: [LP] Performing initial data load...
[22:07:53] [Server thread/INFO] [STDERR]: [me.lucko.luckperms.common.plugin.AbstractLuckPermsPlugin:enable:181]: java.util.concurrent.CompletionException: java.lang.reflect.UndeclaredThrowableException
...
[22:07:53] [Server thread/INFO] [STDERR]: [java.lang.Throwable:printStackTrace:667]: Caused by: org.h2.jdbc.JdbcSQLException: Table "LUCKPERMS_GROUPS" not found; SQL statement:
SELECT name FROM luckperms_groups [42102-196]
...
[22:07:53] [Server thread/INFO]: [LP] Successfully enabled. (took 2560ms)

It definitely does not enable successfully despite the log message. Any commands afterwards generate many more sql errors of very similar characteristics.

It just seems like it doesn't create tables at first run and then everything after that relying on the tables gets messed up but I for the life of me can't figure out why this is happening. For completeness my config file is below in case something is off there I'm not aware of.

####################################################################################################
# +----------------------------------------------------------------------------------------------+ #
# |                                   __         __   ___  __         __                         | #
# |                        |    |  | /  ` |__/  |__) |__  |__)  |\/| /__`                        | #
# |                        |___ \__/ \__, |  \  |    |___ |  \  |  | .__/                        | #
# |                                                                                              | #
# |                                                                                              | #
# |  SOURCE CODE: https://github.com/lucko/LuckPerms                                             | #
# |  WIKI:        https://github.com/lucko/LuckPerms/wiki                                        | #
# |  BUG REPORTS: https://github.com/lucko/LuckPerms/issues                                      | #
# |                                                                                              | #
# |  Each option in this file is documented and explained here:                                  | #
# |   ==>  https://github.com/lucko/LuckPerms/wiki/Configuration                                 | #
# |                                                                                              | #
# |  New options are not added to this file automatically. Default values are used if an         | #
# |  option cannot be found. The latest config versions can be obtained at the link above.       | #
# +----------------------------------------------------------------------------------------------+ #
####################################################################################################

# +----------------------------------------------------------------------------------------------+ #
# |                                                                                              | #
# |                                      ESSENTIAL SETTINGS                                      | #
# |                                                                                              | #
# |                   Important settings that control how LuckPerms functions.                   | #
# |                                                                                              | #
# +----------------------------------------------------------------------------------------------+ #

# The name of the server, used for server specific permissions.
#
# - When set to "global" this setting is effectively ignored.
# - In all other cases, the value here is added to all players in a "server" context.
# - See: https://github.com/lucko/LuckPerms/wiki/Context
server = "global"

# If the servers own UUID cache/lookup facility should be used when there is no record for a player
# already in LuckPerms.
#
# - When this is set to 'false', commands using a player's username will not work unless the player
#   has joined since LuckPerms was first installed.
# - To get around this, you can use a player's uuid directly in the command, or enable this option.
# - When this is set to 'true', the server facility is used. This may use a number of methods,
#   including checking the servers local cache, or making a request to the Mojang API.
use-server-uuid-cache = false




# +----------------------------------------------------------------------------------------------+ #
# |                                                                                              | #
# |                                       STORAGE SETTINGS                                       | #
# |                                                                                              | #
# |                Controls which storage method LuckPerms will use to store data.               | #
# |                                                                                              | #
# +----------------------------------------------------------------------------------------------+ #

# How the plugin should store data
#
# - The various options are explained in more detail on the wiki:
#   https://github.com/lucko/LuckPerms/wiki/Choosing-a-Storage-type
#
# - Possible options:
#
#   |  Remote databases - require connection information to be configured below
#   |=> MySQL
#   |=> MariaDB (preferred over MySQL)
#   |=> PostgreSQL
#   |=> MongoDB
#
#   |  Flatfile/local database - don't require any extra configuration
#   |=> H2 (preferred over SQLite)
#   |=> SQLite
#
#   |  Readable & editable text files - don't require any extra configuration
#   |=> YAML (.yml files)
#   |=> JSON (.json files)
#   |=> HOCON (.conf files)
#
# - A H2 database is the default option.
# - If you want to edit data manually in "traditional" storage files, we suggest using YAML.
storage-method = "h2"

# The following block defines the settings for remote database storage methods.
#
# - You don't need to touch any of the settings here if you're using a local storage method!
# - The connection detail options are shared between all remote storage types.
data {

  # Define the address and port for the database.
  # - The standard DB engine port is used by default
  #   (MySQL = 3306, PostgreSQL = 5432, MongoDB = 27017)
  # - Specify as "host:port" if differs
  address = "localhost"

  # The name of the database to store LuckPerms data in.
  # - This must be created already. Don't worry about this setting if you're using MongoDB.
  database = "minecraft"

  # Credentials for the database.
  username = "root"
  password = ""

  # These settings apply to the MySQL connection pool.
  # - The default values will be suitable for the majority of users.
  # - Do not change these settings unless you know what you're doing!
  pool-settings {

    # Sets the maximum size of the MySQL connection pool.
    # - Basically this value will determine the maximum number of actual
    #   connections to the database backend.
    # - More information about determining the size of connection pools can be found here:
    #   https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing
    maximum-pool-size = 10

    # Sets the minimum number of idle connections that the pool will try to maintain.
    # - For maximum performance and responsiveness to spike demands, it is recommended to not set
    #   this value and instead allow the pool to act as a fixed size connection pool.
    #   (set this value to the same as 'maximum-pool-size')
    minimum-idle = 10

    # This setting controls the maximum lifetime of a connection in the pool in milliseconds.
    # - The value should be at least 30 seconds less than any database or infrastructure imposed
    #   connection time limit.
    maximum-lifetime = 1800000 # 30 minutes

    # This setting controls the maximum number of milliseconds that the plugin will wait for a
    # connection from the pool, before timing out.
    connection-timeout = 5000 # 5 seconds

    # This setting allows you to define extra properties for connections.
    properties {
      useUnicode = true
      characterEncoding = "utf8"
    }
  }

  # The prefix for all LuckPerms SQL tables.
  # - Change this is you want to use different tables for different servers.
  table_prefix = "luckperms_"

  # The prefix to use for all LuckPerms collections. Change this if you want to use different
  # collections for different servers. The default is no prefix.
  mongodb_collection_prefix = ""

  # MongoDB ClientConnectionURI for use with replica sets and custom connection options
  # - See https://docs.mongodb.com/manual/reference/connection-string/
  mongodb_connection_URI = ""

  # Define settings for a "split" storage setup.
  #
  # - This allows you to define a storage method for each type of data.
  # - The connection options above still have to be correct for each type here.
  split-storage {
    # Don't touch this if you don't want to use split storage!
    enabled = false
    methods {
      # These options don't need to be modified if split storage isn't enabled.
      user = "h2"
      group = "h2"
      track = "h2"
      uuid = "h2"
      log = "h2"
    }
  }
}



# +----------------------------------------------------------------------------------------------+ #
# |                                                                                              | #
# |                            UPDATE PROPAGATION & MESSAGING SERVICE                            | #
# |                                                                                              | #
# |    Controls the ways in which LuckPerms will sync data & notify other servers of changes.    | #
# |     These options are documented on greater detail on the wiki under "Instant Updates".      | #
# |                                                                                              | #
# +----------------------------------------------------------------------------------------------+ #

# This option controls how frequently LuckPerms will perform a sync task.
#
# - A sync task will refresh all data from the storage, and ensure that the most up-to-date data is
#   being used by the plugin.
# - This is disabled by default, as most users will not need it. However, if you're using a remote
#   storage type without a messaging service setup, you may wish to set this to something like 3.
# - Set to -1 to disable the task completely.
sync-minutes = -1

# If the file watcher should be enabled.
#
# - When using a file-based storage type, LuckPerms can monitor the data files for changes, and
#   automatically update when changes are detected.
# - If you don't want this feature to be active, set this option to false.
watch-files = true

# Define which messaging service should be used by the plugin.
#
# - If enabled and configured, LuckPerms will use the messaging service to inform other connected
#   servers of changes.
# - Use the command "/lp networksync" to manually push changes.
# - Data is NOT stored using this service. It is only used as a messaging platform.
#
# - If you decide to enable this feature, you should set "sync-minutes" to -1, as there is no need
#   for LuckPerms to poll the database for changes.
#
# - Possible options:
#   => sql       Uses the SQL database to form a queue system for communication. Will only work when
#                'storage-method' is set to MySQL or MariaDB. This is chosen by default if the
#                option is set to 'none' and SQL storage is in use. Set to 'notsql' to disable this.
#   => bungee    Uses the plugin messaging channels to communicate with the proxy.
#                LuckPerms must be installed on your proxy & all connected servers backend servers.
#                Won't work if you have more than one BungeeCord proxy.
#   => redis     Uses Redis pub-sub to push changes. Your server connection info must be configured
#                below.
#   => none      Disables the service.
messaging-service = "none"

# If LuckPerms should automatically push updates after a change has been made with a command.
auto-push-updates = true

# If LuckPerms should push logging entries to connected servers via the messaging service.
push-log-entries = true

# If LuckPerms should broadcast received logging entries to players on this platform.
#
# - If you have LuckPerms installed on your backend servers as well as a BungeeCord proxy, you
#   should set this option to false on either your backends or your proxies, to avoid players being
#   messaged twice about log entries.
broadcast-received-log-entries = true

# Settings for Redis.
# Port 6379 is used by default; set address to "host:port" if differs
redis {
  enabled = false
  address = "localhost"
  password = ""
}


# +----------------------------------------------------------------------------------------------+ #
# |                                                                                              | #
# |                                    CUSTOMIZATION SETTINGS                                    | #
# |                                                                                              | #
# |              Settings that allow admins to customize the way LuckPerms operates.             | #
# |                                                                                              | #
# +----------------------------------------------------------------------------------------------+ #

# Controls how temporary permissions/parents/meta should be accumulated.
#
# - The default behaviour is "deny".
# - This behaviour can also be specified when the command is executed. See the command usage
#   documentation for more info.
#
# - Possible options:
#   => accumulate   durations will be added to the existing expiry time
#   => replace      durations will be replaced if the new duration is later than the current
#                   expiration
#   => deny         the command will just fail if you try to add another node with the same expiry
temporary-add-behaviour = "deny"

# Controls how LuckPerms will determine a users "primary" group.
#
# - The meaning and influence of "primary groups" are explained in detail on the wiki.
# - The preferred approach is to let LuckPerms automatically determine a users primary group
#   based on the relative weight of their parent groups.
#
# - Possible options:
#   => stored                  use the value stored against the users record in the file/database
#   => parents-by-weight       just use the users most highly weighted parent
#   => all-parents-by-weight   same as above, but calculates based upon all parents inherited from
#                              both directly and indirectly
primary-group-calculation = "parents-by-weight"

# If the plugin should check for "extra" permissions with users run LP commands.
#
# - These extra permissions allow finer control over what users can do with each command, and who
#   they have access to edit.
# - The nature of the checks are documented on the wiki under "Argument based command permissions".
# - Argument based permissions are *not* static, unlike the 'base' permissions, and will depend upon
#   the arguments given within the command.
argument-based-command-permissions = false

# If the plugin should send log notifications to users whenever permissions are modified.
#
# - Notifications are only sent to those with the appropriate permission to receive them
# - They can also be temporarily enabled/disabled on a per-user basis using
#   '/lp log notify <on|off>'
log-notify = true

# Defines the options for prefix and suffix stacking.
#
# - The feature allows you to display multiple prefixes or suffixes alongside a players username in
#   chat.
# - It is explained and documented in more detail on the wiki under "Prefix & Suffix Stacking".
#
# - The options are divided into separate sections for prefixes and suffixes.
# - The value of 'start-spacer' is included at the start of the resultant prefix/suffix.
# - The value of 'end-spacer' is included at the end of the resultant prefix/suffix.
# - The value of 'middle-spacer' is included between each element in the resultant prefix/suffix.
#
# - Possible format options:
#   => highest                        Selects the value with the highest weight, from all values
#                                     held by or inherited by the player.
#
#   => lowest                         Same as above, except takes the one with the lowest weight.
#
#   => highest_own                    Selects the value with the highest weight, but will not
#                                     accept any inherited values.
#
#   => lowest_own                     Same as above, except takes the value with the lowest weight.
#
#   => highest_inherited              Selects the value with the highest weight, but will only
#                                     accept inherited values.
#
#   => lowest_inherited               Same as above, except takes the value with the lowest weight.
#
#   => highest_on_track_<track>       Selects the value with the highest weight, but only if the
#                                     value was inherited from a group on the given track.
#
#   => lowest_on_track_<track>        Same as above, except takes the value with the lowest weight.
#
#   => highest_not_on_track_<track>   Selects the value with the highest weight, but only if the
#                                     value was inherited from a group not on the given track.
#
#   => lowest_not_on_track_<track>    Same as above, except takes the value with the lowest weight.
meta-formatting {
  prefix {
    format = [
      "highest"
    ]
    start-spacer = ""
    middle-spacer = " "
    end-spacer = ""
  }
  suffix {
    format = [
      "highest"
    ]
    start-spacer = ""
    middle-spacer = " "
    end-spacer = ""
  }
}



# +----------------------------------------------------------------------------------------------+ #
# |                                                                                              | #
# |                            PERMISSION CALCULATION AND INHERITANCE                            | #
# |                                                                                              | #
# |    Modify the way permission checks, meta lookups and inheritance resolutions are handled.   | #
# |                                                                                              | #
# +----------------------------------------------------------------------------------------------+ #

# The algorithm LuckPerms should use when traversing the "inheritance tree".
#
# - Possible options:
#   => breadth-first            See: https://en.wikipedia.org/wiki/Breadth-first_search
#   => depth-first-pre-order    See: https://en.wikipedia.org/wiki/Depth-first_search
#   => depth-first-post-order   See: https://en.wikipedia.org/wiki/Depth-first_search
inheritance-traversal-algorithm = "depth-first-pre-order"

# +----------------------------------------------------------------------------------------------+ #
# | Permission resolution settings                                                               | #
# +----------------------------------------------------------------------------------------------+ #

# If users on this server should have their global permissions applied.
# When set to false, only server specific permissions will apply for users on this server
include-global = true

# If users on this server should have their global world permissions applied.
# When set to false, only world specific permissions will apply for users on this server
include-global-world = true

# If users on this server should have global (non-server specific) groups applied
apply-global-groups = true

# If users on this server should have global (non-world specific) groups applied
apply-global-world-groups = true

# +----------------------------------------------------------------------------------------------+ #
# | Inheritance settings                                                                         | #
# +----------------------------------------------------------------------------------------------+ #

# If the plugin should apply wildcard permissions.
#
# - If set to true, LuckPerms will detect wildcard permissions, and resolve & apply all registered
#   permissions matching the wildcard.
apply-wildcards = true

# If the plugin should parse regex permissions.
#
# - If set to true, LuckPerms will detect regex permissions, marked with "r=" at the start of the
#   node, and resolve & apply all registered permissions matching the regex.
apply-regex = true

# If the plugin should complete and apply shorthand permissions.
#
# - If set to true, LuckPerms will detect and expand shorthand node patterns.
apply-shorthand = true

# If the plugin should apply Bukkit child permissions.
#
# - Plugin authors can define custom permissions structures for their plugin, which will be resolved
#   and used by LuckPerms if this setting is enabled.
apply-bukkit-child-permissions = true

# If the plugin should apply Bukkit default permissions.
#
# - Plugin authors can define permissions which should be given to all users by default, or setup
#   permissions which should/shouldn't be given to opped players.
# - If this option is set to false, LuckPerms will ignore these defaults.
apply-bukkit-default-permissions = true

# If the plugin should apply attachment permissions.
#
# - Other plugins on the server are able to add their own "permission attachments" to players.
# - This allows them to grant players additional permissions which last until the end of the
#   session, or until they're removed.
# - If this option is set to false, LuckPerms will not include these attachment permissions when
#   considering if a player should have access to a certain permission.
apply-bukkit-attachment-permissions = true

# +----------------------------------------------------------------------------------------------+ #
# | Extra settings                                                                               | #
# +----------------------------------------------------------------------------------------------+ #

# Allows you to set "aliases" for the worlds sent forward for context calculation.
#
# - These aliases are provided in addition to the real world name. Applied recursively.
# - Remove the comment characters for the default aliases to apply.
world-rewrite {
  #world_nether = "world"
  #world_the_end = "world"
}

# Define special group weights for this server.
#
# - Group weights can also be applied directly to group data, using the setweight command.
# - This section allows weights to be set on a per-server basis.
group-weight {
  #admin = 10
}




# +----------------------------------------------------------------------------------------------+ #
# |                                                                                              | #
# |                                      FINE TUNING OPTIONS                                     | #
# |                                                                                              | #
# |     A number of more niche settings for tweaking and changing behaviour. The section also    | #
# | contains toggles for some more specialised features. It is only necessary to make changes to | #
# |                  these options if you want to fine-tune LuckPerms behaviour.                 | #
# |                                                                                              | #
# +----------------------------------------------------------------------------------------------+ #

# +----------------------------------------------------------------------------------------------+ #
# | Miscellaneous (and rarely used) settings                                                     | #
# +----------------------------------------------------------------------------------------------+ #

# If LuckPerms should produce extra logging output when it handles logins.
#
# - Useful if you're having issues with UUID forwarding or data not being loaded.
debug-logins = false

# If LuckPerms should allow usernames with non alphanumeric characters.
#
# - Note that due to the design of the storage implementation, usernames must still be 16 characters
#   or less.
allow-invalid-usernames = false

# If LuckPerms should allow a users primary group to be removed with the 'parent remove' command.
#
# - When this happens, the plugin will set their primary group back to default.
prevent-primary-group-removal = false




# +----------------------------------------------------------------------------------------------+ #
# |                                                                                              | #
# |                                      DEFAULT ASSIGNMENTS                                     | #
# |                                                                                              | #
# +----------------------------------------------------------------------------------------------+ #

# This section allows you to define defaults to give users whenever they connect to the server.
# The default assignments are highly configurable and conditional.
#
# There is one default assignment built into LuckPerms, which will add all users to the "default"
# group if they are not a member of any other group. This setting cannot be disabled. However, you
# can use this section to add more of your own.
#
# IMPORTANT:
# In order to save storage space, LuckPerms does not store users who have no permissions defined,
# and are only a member of the default group. Adding default assignments to this section will negate
# this effect. It is HIGHLY RECCOMENDED that instead of assigning defaults here, you add permissions
# to the "default" group, or set the "default" group to inherit other groups, and then use the
# group-name-rewrite rule above.
#
# It is also important to note that these rules are considered every time a player logs into the
# server, and are applied directly to the user's data. Simply removing a rule here will not reverse
# the effect of that rule on any users who have already had it applied to them.
#
# The "has" and "lacks" conditions below support standard boolean logic, using the 'and' & 'or'
# characters used in Java.
# e.g. "(some.other.permission | some.permission.other) & some.thing.else" == a user has
# 'some.other.permission', or 'some.permission.other', and they also have 'some.thing.else'
#
# Groups are represented by the permission node: group.<group name>
# Per server and per world nodes are represented by "server-world/permission" or "server/permission"
#
# Within conditions, permission nodes MUST be escaped using "<" and ">". See the example below.
#
# Explanation of the examples below: (they're just to demonstrate the features & use cases)
#
# rule1:
# If a user is either in the vip or vip+ group, and they have the "titles.titlecollector" permission
# set to true, and the "some.random.permission" set to false... if they're not in the group
# "prison_titlepack" on the "prison" server, then give add them to the "prison_titlepack" group on
# the "prison" server, and remove "some.random.permission".
#
# rule2:
# If the user isn't in any of the following groups on the skyblock server: sb_level1, sb_level2,
# sb_level3, then add them to sb_level1 on the skyblock server.
#
# rule3:
# If the user is a member of the default group, remove them from default, add them to member, and
# set their primary group to member.
#
# WARNING: Unlike internal commands, this system does not ensure that a group exists before adding
# a user to it. It also does not unsure that a user is a member of a group before making that group
# their primary group.
#
# Before you use "give: group.<name>" or "set-primary-group", make sure that the group exists, and
# that the user is a member of the group.
default-assignments {
#  rule1 {
#    if {
#      has-true="(<group.vip> | <group.vip+>) & <titles.tilecollector>"
#      has-false="<some.random.permission>"
#      lacks="<prison/group.prison_titlepack>"
#    }
#    give = [
#      "prison/group.prison_titlepack"
#    ]
#    take = [
#      "some.random.permission"
#    ]
#  }
#  rule2 {
#    if {
#      lacks="<skyblock/group.sb_level1> & <skyblock/group.sb_level2> & <skyblock/group.sb_level3>"
#    }
#    give = [
#      "skyblock/group.sb_level1"
#    ]
#  }
#  rule3 {
#    if {
#      has-true="<group.default>"
#    }
#    take = [
#      "group.default"
#    ]
#    give = [
#      "group.member"
#    ]
#    set-primary-group="member"
#  }
}
commented

Is this the first time you've installed LuckPerms, or do you already have some data setup?

commented

Can you try stopping your server, and then deleting the luckperms-h2.mv.db file

commented

Hi, yes this would be with no existing data.

commented

Thanks for the response, I tried but I have the same set of errors.

commented

Ok interesting.

Would you mind sharing some more details about your setup - I'd like to try and reproduce the issue myself.

Ideally, I need:

  • Your SpongeForge version
  • Your Forge version
  • Any other mods/plugins you're using
  • What kind of server are you running on, which Linux distro, Windows/Mac??

If you are using any mods/plugins, can you reproduce the issue on a fresh server without any mods?

There's obviously some sort of incompatibility with the H2 database included in LP, and certain installs of SpongeForge (this issue has been reported quite a few times before and I've been unable to work out the cause).

I need to try to work out what the issue is - could be Forge, Sponge, or another mod/plugin.

commented
  • SpongeForge 1.12.2-2611-8.0.0-BETA-3003 or 1.12.2-2611-7.1.0-BETA-2990 (it doesn't seem to matter)
  • Forge 1.12.2-14.23.1.2555
  • Mods/Plugins:
AnotherGymPlugin-1.12.2-0.5.3-beta.jar
GTS-3.6.1-S7.1.jar
LuckPerms-Sponge-4.1.61.jar
Nucleus-1.3.6-S7.0-MC1.12.2-plugin.jar
PixelExtras-1.12.2-2.3.5-universal.jar
PixelHunt-1.1-MC1.12.2-F2611-S7.1.0.jar
Pixelmon-1.12.2-6.2.3-server.jar
PixelmonEconomyBridge-1.12.2-1.3.0.jar
PixelMoney-1.12.2-2.1.0.jar
PixelShout-1.12.2-1.2.0-universal.jar
PokedexRewards-0.7-MC1.12.2-F2611-S7.1.0.jar
PokeStops_1.12.2-2.0.2.jar
spongeforge-1.12.2-2611-8.0.0-BETA-3003.jar
TotalEconomy-1.8.0.jar
WonderTrade-1.12.2-4.5.2-universal.jar
  • Linux Ubuntu Server 16.04 LTS

The issue does not occur if it is a clean directory with SpongeForge and LuckPerms

commented

Ah ok, that's very interesting.

Could you try to determine which mod is causing the incompatibility?

It should be fairly easy / quick to do; simply split your mods in half, try starting the server with half of them, and keep splitting until you find which mod it is.

Obviously keep SpongeForge + LP enabled the whole time.. but yeah, hopefully you get the idea.

If you can work out exactly which mod is causing the problem, I can look into creating a fix. :)

commented

Hi,

What is interesting is that if I did Luckperms by itself then added each plugin one at a time (never more than one) it was able to startup successfully. Maybe something was fighting for the H2 driver somehow.

commented

So it can now startup with all of the mods present?

Try deleting the h2 file again, does it regenerate ok?

commented

After deleting the file and trying to restart with the plugins/mods in place it does not work and throws the following:

[22:30:16] [pool-3-thread-3/ERROR] [Sponge]: The Scheduler tried to run the task luckperms-A-8 owned by Plugin{id=luckperms, name=LuckPerms, version=4.1.61, description=A permissions plugin, url=https://github.com/lucko/LuckPerms, authors=[Luck], source=/home/kylec/server_pixelmon/mods/LuckPerms-Sponge-4.1.61.jar}, but an error occured.
java.util.concurrent.CompletionException: java.lang.reflect.UndeclaredThrowableException
        at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:273) ~[?:1.8.0_162]
        at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:280) ~[?:1.8.0_162]
        at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1629) ~[?:1.8.0_162]
        at org.spongepowered.api.scheduler.Task$Builder.lambda$execute$0(Task.java:139) ~[Task$Builder.class:1.12.2-2611-8.0.0-BETA-3003]
        at org.spongepowered.common.scheduler.SchedulerBase.lambda$startTask$0(SchedulerBase.java:186) ~[SchedulerBase.class:1.12.2-2611-8.0.0-BETA-3003]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_162]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_162]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_162]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_162]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_162]
Caused by: java.lang.reflect.UndeclaredThrowableException
        at com.sun.proxy.$Proxy68.prepareStatement(Unknown Source) ~[?:?]
        at me.lucko.luckperms.common.storage.dao.sql.SqlDao.loadAllGroups(SqlDao.java:612) ~[SqlDao.class:?]
        at me.lucko.luckperms.common.storage.AbstractStorage.lambda$loadAllGroups$10(AbstractStorage.java:222) ~[AbstractStorage.class:?]
        at me.lucko.luckperms.common.storage.AbstractStorage.lambda$makeFuture$1(AbstractStorage.java:100) ~[AbstractStorage.class:?]
        at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1626) ~[?:1.8.0_162]
        ... 7 more
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_162]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_162]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_162]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_162]
        at me.lucko.luckperms.common.storage.dao.sql.connection.file.NonClosableConnection.lambda$wrap$0(NonClosableConnection.java:60) ~[NonClosableConnection.class:?]
        at com.sun.proxy.$Proxy68.prepareStatement(Unknown Source) ~[?:?]
        at me.lucko.luckperms.common.storage.dao.sql.SqlDao.loadAllGroups(SqlDao.java:612) ~[SqlDao.class:?]
        at me.lucko.luckperms.common.storage.AbstractStorage.lambda$loadAllGroups$10(AbstractStorage.java:222) ~[AbstractStorage.class:?]
        at me.lucko.luckperms.common.storage.AbstractStorage.lambda$makeFuture$1(AbstractStorage.java:100) ~[AbstractStorage.class:?]
        at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1626) ~[?:1.8.0_162]
        ... 7 more
Caused by: org.h2.jdbc.JdbcSQLException: Table "LUCKPERMS_GROUPS" not found; SQL statement:
SELECT name FROM luckperms_groups [42102-196]
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:345) ~[DbException.class:1.12.2-2611-8.0.0-BETA-3003]
        at org.h2.message.DbException.get(DbException.java:179) ~[DbException.class:1.12.2-2611-8.0.0-BETA-3003]
        at org.h2.message.DbException.get(DbException.java:155) ~[DbException.class:1.12.2-2611-8.0.0-BETA-3003]
        at org.h2.command.Parser.readTableOrView(Parser.java:5552) ~[Parser.class:1.12.2-2611-8.0.0-BETA-3003]
        at org.h2.command.Parser.readTableFilter(Parser.java:1266) ~[Parser.class:1.12.2-2611-8.0.0-BETA-3003]
        at org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1946) ~[Parser.class:1.12.2-2611-8.0.0-BETA-3003]
        at org.h2.command.Parser.parseSelectSimple(Parser.java:2095) ~[Parser.class:1.12.2-2611-8.0.0-BETA-3003]
        at org.h2.command.Parser.parseSelectSub(Parser.java:1940) ~[Parser.class:1.12.2-2611-8.0.0-BETA-3003]
        at org.h2.command.Parser.parseSelectUnion(Parser.java:1755) ~[Parser.class:1.12.2-2611-8.0.0-BETA-3003]
        at org.h2.command.Parser.parseSelect(Parser.java:1743) ~[Parser.class:1.12.2-2611-8.0.0-BETA-3003]
        at org.h2.command.Parser.parsePrepared(Parser.java:449) ~[Parser.class:1.12.2-2611-8.0.0-BETA-3003]
        at org.h2.command.Parser.parse(Parser.java:321) ~[Parser.class:1.12.2-2611-8.0.0-BETA-3003]
        at org.h2.command.Parser.parse(Parser.java:293) ~[Parser.class:1.12.2-2611-8.0.0-BETA-3003]
        at org.h2.command.Parser.prepareCommand(Parser.java:258) ~[Parser.class:1.12.2-2611-8.0.0-BETA-3003]
        at org.h2.engine.Session.prepareLocal(Session.java:578) ~[Session.class:1.12.2-2611-8.0.0-BETA-3003]
        at org.h2.engine.Session.prepareCommand(Session.java:519) ~[Session.class:1.12.2-2611-8.0.0-BETA-3003]
        at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1204) ~[JdbcConnection.class:1.12.2-2611-8.0.0-BETA-3003]
        at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:73) ~[JdbcPreparedStatement.class:1.12.2-2611-8.0.0-BETA-3003]
        at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:288) ~[JdbcConnection.class:1.12.2-2611-8.0.0-BETA-3003]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_162]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_162]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_162]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_162]
        at me.lucko.luckperms.common.storage.dao.sql.connection.file.NonClosableConnection.lambda$wrap$0(NonClosableConnection.java:60) ~[NonClosableConnection.class:?]
        at com.sun.proxy.$Proxy68.prepareStatement(Unknown Source) ~[?:?]
        at me.lucko.luckperms.common.storage.dao.sql.SqlDao.loadAllGroups(SqlDao.java:612) ~[SqlDao.class:?]
        at me.lucko.luckperms.common.storage.AbstractStorage.lambda$loadAllGroups$10(AbstractStorage.java:222) ~[AbstractStorage.class:?]
        at me.lucko.luckperms.common.storage.AbstractStorage.lambda$makeFuture$1(AbstractStorage.java:100) ~[AbstractStorage.class:?]
        at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1626) ~[?:1.8.0_162]
        ... 7 more
commented

Okay, so we're back to (almost) where we started.

As per my previous reply:

Could you try to determine which mod is causing the incompatibility?
It should be fairly easy / quick to do; simply split your mods in half, try starting the server with half of them, and keep splitting until you find which mod it is.
Obviously keep SpongeForge + LP enabled the whole time.. but yeah, hopefully you get the idea.
If you can work out exactly which mod is causing the problem, I can look into creating a fix. :)

I need to know which mod is preventing LP from enabling and creating the database.

commented

I have finally got around to testing this, and I have found the conflicting sidemod: GTS. The error does not arise when GTS is not installed, and since it is distributed with the server pack you download on the technic site, no wonder so many users have been experiencing this issue.

Here is a test server with the error occurring and only the following installed:

  • Pixelmon Reforged
  • TCG
  • LuckPerms
  • SpongeForge
  • GTS

https://drive.google.com/file/d/1sKgsD14sNQ4AQo9N26qXxxDL_V_fr2gN/view?usp=sharing

Logs with the H2 error can be found as well.

commented

Thank you - I will look into it more sometime this weekend.

I was unable to reproduce with just Pixelmon + SF + LP, so I had assumed it must've been one of the mods/plugins commonly used alongside it.

commented

Fixed in the latest builds. Thanks for everyone's help resolving the issue. :)