Trouble Hooking Into PEX

Discussion in 'Plugin Development' started by Rellac, Nov 25, 2014.

Thread Status:
Not open for further replies.
  1. Offline

    Rellac

    I have been working on a plugin, a simple permission system, and I would like to hook pex into the plugin to have it apply certain permission nodes to a player, but I seem to have come across an issue.

    After testing all of my initial plugin mechanics and getting everything running fine through multiple tests, I decided to start the process of hooking pex to enable node granting.

    However, I now seem to be getting the following error and I'm not sure what to do:

    whoops, wrong error...
    Show Spoiler
    Code:
    [16:15:59] [Server thread/ERROR]: Error occurred while enabling Ranks v1.0 (Is it up to date?)
    java.lang.NoSuchMethodError: org.bukkit.configuration.file.YamlConfiguration.loadConfiguration(Ljava/io/Reader;)Lorg/bukkit/configuration/file/YamlConfiguration;
    at com.test.Ranks.Ranks.reloadPlayers(Ranks.java:191) ~[?:?]
    at com.test.Ranks.Ranks.getPlayers(Ranks.java:203) ~[?:?]
    at com.test.Ranks.Ranks.check(Ranks.java:135) ~[?:?]
    at com.test.Ranks.Ranks.onEnable(Ranks.java:35) ~[?:?]
    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:250) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-35-gd6ac518-b3061jnks]
    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:324) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-35-gd6ac518-b3061jnks]
    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:404) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-35-gd6ac518-b3061jnks]
    at org.bukkit.craftbukkit.v1_7_R3.CraftServer.loadPlugin(CraftServer.java:448) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-35-gd6ac518-b3061jnks]
    at org.bukkit.craftbukkit.v1_7_R3.CraftServer.enablePlugins(CraftServer.java:382) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-35-gd6ac518-b3061jnks]
    at net.minecraft.server.v1_7_R3.MinecraftServer.n(MinecraftServer.java:352) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-35-gd6ac518-b3061jnks]
    at net.minecraft.server.v1_7_R3.MinecraftServer.g(MinecraftServer.java:326) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-35-gd6ac518-b3061jnks]
    at net.minecraft.server.v1_7_R3.MinecraftServer.a(MinecraftServer.java:282) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-35-gd6ac518-b3061jnks]
    at net.minecraft.server.v1_7_R3.DedicatedServer.init(DedicatedServer.java:182) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-35-gd6ac518-b3061jnks]
    at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java:436) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-35-gd6ac518-b3061jnks]
    at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:628) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-35-gd6ac518-b3061jnks]
    


    there we go...
    Code:
    [19:28:38] [Server thread/ERROR]: Could not load 'plugins\Ranks.jar' in folder 'plugins'
    org.bukkit.plugin.InvalidPluginException: java.lang.UnsupportedClassVersionError: com/test/Ranks/Ranks : Unsupported major.minor version 51.0
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:131) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:328) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:251) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at org.bukkit.craftbukkit.v1_7_R3.CraftServer.loadPlugins(CraftServer.java:355) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at org.bukkit.craftbukkit.v1_7_R3.CraftServer.<init>(CraftServer.java:317) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.PlayerList.<init>(PlayerList.java:68) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.DedicatedPlayerList.<init>(SourceFile:14) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.DedicatedServer.init(DedicatedServer.java:126) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java:436) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:628) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    Caused by: java.lang.UnsupportedClassVersionError: com/test/Ranks/Ranks : Unsupported major.minor version 51.0
        at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.6.0_29]
        at java.lang.ClassLoader.defineClassCond(Unknown Source) ~[?:1.6.0_29]
        at java.lang.ClassLoader.defineClass(Unknown Source) ~[?:1.6.0_29]
        at java.security.SecureClassLoader.defineClass(Unknown Source) ~[?:1.6.0_29]
        at java.net.URLClassLoader.defineClass(Unknown Source) ~[?:1.6.0_29]
        at java.net.URLClassLoader.access$000(Unknown Source) ~[?:1.6.0_29]
        at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.6.0_29]
        at java.security.AccessController.doPrivileged(Native Method) ~[?:1.6.0_29]
        at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.6.0_29]
        at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:77) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:62) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.6.0_29]
        at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.6.0_29]
        at java.lang.Class.forName0(Native Method) ~[?:1.6.0_29]
        at java.lang.Class.forName(Unknown Source) ~[?:1.6.0_29]
        at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:40) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:127) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        ... 9 more
    

    I'm fairly certain that there are issues within my coding references to pex or my yml setup but I'm not entirely sure what the issue may be.

    Each of the mentioned functions that throw errors are provided as such, as basic yml setups:
    Code:
        public void check()
        {
            getPlayers();
            // Check Over Each Players Ranks and Remove Accordingly
            for(String player : Players.getConfigurationSection("players").getKeys(false))
            {
                for(String pclass : Players.getConfigurationSection("players." + player + ".classes").getKeys(false))
                {
         
                    long timeIn = Players.getLong(pclass + ".date");
             
                    if(System.currentTimeMillis() > timeIn + 1209600000)//2 weeks
                    {
                        //Remove Class
                        Players.set("players." + player + ".classes." + pclass, null);
     
                        //Handle PEX
                        PermissionUser user = PermissionsEx.getUser(player);
                        user.removePermission("group."+pclass);
                        if (user.inGroup(pclass))
                        user.removeGroup(pclass);
     
                        user.addGroup("noob");
                 
                        getLogger().info("Rank Expired! Removing "+pclass+" from " + player + "...");
                        savePlayers();
                    }
         
                }
            }
        }
    
    Code:
        public void reloadPlayers()
        {
            Reader defConfigStream = null;
            if (PlayersFile == null)
            {
                PlayersFile = new File(getDataFolder(), "players.yml");
            }
            Players = YamlConfiguration.loadConfiguration(PlayersFile);
     
            // Look for defaults in the jar
     
            try
            {
                defConfigStream = new InputStreamReader(this.getResource("players.yml"), "UTF8");
            }
            catch (UnsupportedEncodingException e)
            {
                e.printStackTrace();
            }
            if (defConfigStream != null)
            {
                YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(defConfigStream);
                Players.setDefaults(defConfig);
            }
        }
    
    Code:
        // Get Player Listings
        public FileConfiguration getPlayers()
        {
            if (Players == null)
            {
                reloadPlayers();
            }
            return Players;
        }
    
    Code:
        // Save Player Listings
        public void savePlayers()
        {
            if (Players == null || PlayersFile == null)
            {
                return;
            }
            try
            {
                getPlayers().save(PlayersFile);
                getLogger().info("..Done!");
            }
            catch (IOException ex)
            {
                getLogger().log(Level.SEVERE, "Could not save config to " + PlayersFile, ex);
            }
        }
    
    I added PEX as a dependency and I have all the relevant ru.tehkode imports.

    What exactly am I doing wrong here? Thanks
     
  2. Rellac I would hook into Vault, they also have an api for permissions.
     
  3. Offline

    fireblast709

    Rellac your server is outdated compared to the API version you use.
     
    Rellac likes this.
  4. Offline

    Rellac

    Oh, I appear to have pasted the wrong error, I'm sorry!

    The issue I've been having is this:

    Code:
    [19:28:38] [Server thread/ERROR]: Could not load 'plugins\Ranks.jar' in folder 'plugins'
    org.bukkit.plugin.InvalidPluginException: java.lang.UnsupportedClassVersionError: com/test/Ranks/Ranks : Unsupported major.minor version 51.0
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:131) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:328) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:251) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at org.bukkit.craftbukkit.v1_7_R3.CraftServer.loadPlugins(CraftServer.java:355) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at org.bukkit.craftbukkit.v1_7_R3.CraftServer.<init>(CraftServer.java:317) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.PlayerList.<init>(PlayerList.java:68) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.DedicatedPlayerList.<init>(SourceFile:14) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.DedicatedServer.init(DedicatedServer.java:126) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java:436) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:628) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    Caused by: java.lang.UnsupportedClassVersionError: com/test/Ranks/Ranks : Unsupported major.minor version 51.0
        at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.6.0_29]
        at java.lang.ClassLoader.defineClassCond(Unknown Source) ~[?:1.6.0_29]
        at java.lang.ClassLoader.defineClass(Unknown Source) ~[?:1.6.0_29]
        at java.security.SecureClassLoader.defineClass(Unknown Source) ~[?:1.6.0_29]
        at java.net.URLClassLoader.defineClass(Unknown Source) ~[?:1.6.0_29]
        at java.net.URLClassLoader.access$000(Unknown Source) ~[?:1.6.0_29]
        at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.6.0_29]
        at java.security.AccessController.doPrivileged(Native Method) ~[?:1.6.0_29]
        at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.6.0_29]
        at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:77) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:62) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.6.0_29]
        at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.6.0_29]
        at java.lang.Class.forName0(Native Method) ~[?:1.6.0_29]
        at java.lang.Class.forName(Unknown Source) ~[?:1.6.0_29]
        at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:40) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:127) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        ... 9 more
    
    I'll edit the OP!


    Thanks, but I would rather just stick with PEX, seems unnecessary extra load
     
  5. Offline

    fireblast709

    Rellac o wow, apparently you are one of the few people still running their server on Java 6. Either compile your plugin as Java 6 (there is a setting in this in your IDE), or update your JRE (which should be done anyway, people are already moving to Java 8 damnit :p)
     
    Rellac likes this.
  6. Offline

    Rellac

    fireblast709 Ah, thanks a lot, this was exactly what I needed.

    Apologies for the delay, I had to unexpectedly leave my computer for a week.

    However, I seem to have come across a null pointer and I'm not sure why. Seems it's likely an issue in my logic but I don't see where. If anyone could possibly let me know what I've done wrong, it would be great:

    Code:
    [14:48:43] [Server thread/INFO]: [Ranks] Enabling Ranks v1.0
    [14:48:43] [Server thread/ERROR]: Error occurred while enabling Ranks v1.0 (Is it up to date?)
    java.lang.NullPointerException
        at com.test.Ranks.Ranks.check(Ranks.java:139) ~[?:?]
        at com.test.Ranks.Ranks.onEnable(Ranks.java:35) ~[?:?]
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:316) ~[craftbukkit-1.7.9-R02.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:324) [craftbukkit-1.7.9-R02.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:404) [craftbukkit-1.7.9-R02.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at org.bukkit.craftbukkit.v1_7_R3.CraftServer.loadPlugin(CraftServer.java:446) [craftbukkit-1.7.9-R02.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at org.bukkit.craftbukkit.v1_7_R3.CraftServer.enablePlugins(CraftServer.java:380) [craftbukkit-1.7.9-R02.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.n(MinecraftServer.java:352) [craftbukkit-1.7.9-R02.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.g(MinecraftServer.java:326) [craftbukkit-1.7.9-R02.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.a(MinecraftServer.java:282) [craftbukkit-1.7.9-R02.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.DedicatedServer.init(DedicatedServer.java:182) [craftbukkit-1.7.9-R02.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java:436) [craftbukkit-1.7.9-R02.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:628) [craftbukkit-1.7.9-R02.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    
     
  7. Offline

    fireblast709

    Rellac check if getConfigurationSection(...) returns false before using it. (also, you should name your 'Players' variable 'players' to avoid confusion between class names, since class names usually start with an uppercase letter)
     
    Rellac likes this.
  8. Offline

    Rellac

    fireblast709 Aha, thanks a lot. You meant
    Code:
            if (Players.getConfigurationSection("players") != null)
            for(String player : Players.getConfigurationSection("players").getKeys(false))
            {
                    ...
            }
    
    Yes?

    This seems to have fixed the issue, but because life is so fantastic, I seem to have come across an issue with pex:

    Code:
    [13:03:57] [Server thread/WARN]: Unexpected exception while parsing console command "rank rellac pleb 99"
    org.bukkit.command.CommandException: Unhandled exception executing command 'rank' in plugin Ranks v1.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[craftbukkit-1.7.9-R02.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:180) ~[craftbukkit-1.7.9-R02.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at org.bukkit.craftbukkit.v1_7_R3.CraftServer.dispatchCommand(CraftServer.java:701) ~[craftbukkit-1.7.9-R02.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at org.bukkit.craftbukkit.v1_7_R3.CraftServer.dispatchServerCommand(CraftServer.java:688) [craftbukkit-1.7.9-R02.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.DedicatedServer.aB(DedicatedServer.java:296) [craftbukkit-1.7.9-R02.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.DedicatedServer.v(DedicatedServer.java:261) [craftbukkit-1.7.9-R02.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.u(MinecraftServer.java:558) [craftbukkit-1.7.9-R02.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java:469) [craftbukkit-1.7.9-R02.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:628) [craftbukkit-1.7.9-R02.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    Caused by: java.lang.ClassCastException: java.util.Collections$UnmodifiableMap cannot be cast to ru.tehkode.permissions.PermissionGroup
        at com.test.Ranks.Ranks.onCommand(Ranks.java:92) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[craftbukkit-1.7.9-R02.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        ... 8 more
    
    I'm fairly certain that the issue lies with pex, as "cannot be cast to ru.tehkode.permissions.PermissionGroup", but I'm not sure why this would happen.

    I use the imports
    Code:
    import ru.tehkode.permissions.PermissionGroup;
    import ru.tehkode.permissions.PermissionUser;
    import ru.tehkode.permissions.bukkit.PermissionsEx;
    
    And the lines that handle PEX in question are:
    Code:
                    PermissionUser user = PermissionsEx.getUser(args[0]);
                    user.addPermission("group."+args[1]);
                    user.removeGroup((PermissionGroup) user.getAllGroups());
                    user.addGroup(args[1]);
    
    If anyone might know exactly what I've done wrong here, I'd be thankful. IIRC, this is fine usage, but obviously I don't RC.
     
  9. Offline

    fireblast709

    Rellac user.getAllGroups() returns a Map. To remove all groups, iterate over either the keys or values (I suppose the keys will be the String group names) and remove them one by one.
     
    Rellac likes this.
  10. Offline

    Rellac

    fireblast709 Thanks a lot, Mr. Legend.

    Just to be sure that I don't come across more issues as I go along, this is correct syntax?

    Code:
    for(PermissionGroup i:user.getGroups())
    user.removeGroup(i);
    
     
  11. Offline

    fireblast709

    Rellac if getGroups() returns something iteratable, and it's a copy (like, removing anything from the iteratable that PEX has wouldn't cause a ConcurrentModificationException), then yes.
     
Thread Status:
Not open for further replies.

Share This Page