Including PermissionsEx api

Discussion in 'Archived: Plugin Requests' started by Proctor, Dec 23, 2011.

  1. Offline

    Proctor

    HI guys, i 'm writing (not my first) plugin, but first time i need to include PermissionEx api,
    to get the prefix.
    I googled for 5 hours but only find things like on the githup site from PermissionEx.
    My problem: i includet permissionEx libary like the bukkit snapshot, eclipse don't give any error,
    but when i run my plugin an error occured, that he dont find the PermissioneEx classes, so pls help me that i include it right. ( dont permissions ex too in main folder from server, too if this work: no)
    error:
    Code:
    2011-12-23 09:39:46 [SEVERE] Could not load 'plugins\blocknet-usersystem.jar' in folder 'plugins':
    java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:175)
        at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:215)
        at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:136)
        at org.bukkit.craftbukkit.CraftServer.loadPlugins(CraftServer.java:151)
        at org.bukkit.craftbukkit.CraftServer.<init>(CraftServer.java:127)
        at net.minecraft.server.ServerConfigurationManager.<init>(ServerConfigurationManager.java:52)
        at net.minecraft.server.MinecraftServer.init(MinecraftServer.java:145)
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:399)
        at net.minecraft.server.ThreadServerApplication.run(SourceFile:457)
    Caused by: java.lang.NoClassDefFoundError: ru/tehkode/permissions/bukkit/PermissionsEx
        at me.Proctor.usersystem.usersystemEntityListener.<init>(usersystemEntityListener.java:19)
        at me.Proctor.usersystem.usersystem.<init>(usersystem.java:13)
        ... 13 more
    Caused by: java.lang.ClassNotFoundException: ru.tehkode.permissions.bukkit.PermissionsEx
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:36)
        at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:24)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 15 more
    My main class:
    Code:
    package me.Proctor.usersystem;
    
    import java.util.logging.Logger;
    
    import org.bukkit.Bukkit;
    import org.bukkit.event.Event;
    import org.bukkit.plugin.PluginManager;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class usersystem extends JavaPlugin {
        int i = 1;
        boolean vote_sun, vote_day, vote_jail;
        private final usersystemEntityListener entityListener = new usersystemEntityListener(this);
        Logger log = Logger.getLogger("Minecraft");
    
        public void onEnable(){
            if(Bukkit.getServer().getPluginManager().isPluginEnabled("PermissionsEx")){
                log.info("[blocknet-Usersystem] version " + this.getDescription().getVersion() + "has been enabled.");
                log.info("[blocknet-Usersystem] (c) Aron Heinecke");
                PluginManager pm = this.getServer().getPluginManager();
                pm.registerEvent(Event.Type.ENTITY_DAMAGE, entityListener, Event.Priority.Normal, this);
            }
        }
    
        public void onDisable(){
            log.info("[blocknet-Usersystem] has been disabled.");
        }
    }
    
    my entitylistener:
    Code:
    package me.Proctor.usersystem;
    
    import java.util.logging.Logger;
    
    import me.Proctor.usersystem.usersystem;
    
    import org.bukkit.entity.Entity;
    import org.bukkit.entity.Player;
    import org.bukkit.entity.Projectile;
    import org.bukkit.event.entity.EntityDamageByEntityEvent;
    import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
    import org.bukkit.event.entity.EntityListener;
    
    import ru.tehkode.permissions.PermissionManager;
    import ru.tehkode.permissions.bukkit.PermissionsEx;
    
    public class usersystemEntityListener extends EntityListener{
    
        PermissionManager permissions = PermissionsEx.getPermissionManager();
        public usersystemEntityListener (usersystem instance) {
            plugin = instance;
        }
        public static usersystem plugin;
    
        Logger log = Logger.getLogger("Minecraft");
        public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
            log.info("[blocknet-Usersystem] Detected Entity Damage");
            Entity p1 = event.getDamager();
            Entity p2 = event.getEntity();
            if ((p1 == null) || (!(p1 instanceof Player)) || (p2 == null) || (!(p2 instanceof Player))){
                log.info("[blocknet-Usersystem] Attack = no player");
                return; // attacker no player / entity no player//
            }
            if (event.getCause() == DamageCause.PROJECTILE) {
                p1 = ((Projectile) p1).getShooter();
                log.info("[blocknet-Usersystem] Attack = projektile");
            }
            if ( permissions.getUser((Player) p1).getOwnPrefix().equals(permissions.getUser((Player) p2).getOwnPrefix())  ) {
                ((Player) p1).sendMessage("Kein Teamkill!");
                ((Player) p2).sendMessage("Kein Teamkill!");
                event.setCancelled(true);
            }
        }
    }
    note: permission Ex is installed and works fine, so it's really could be only, an including mistake (doesn't do the compiler do an referenced libary into to the .jar file too?)
     
  2. Probably something wrong here : usersystemEntityListener.java:19

    But you have pasted your main two times so I can't see what's wrong :)
     
  3. Offline

    Proctor

    sry, changed it
     
  4. Someone with more PermissionEx knowledge has to answer this. You've just done the same as the example they give.


    https://github.com/t3hk0d3/PermissionsEx/wiki/Native-API-example

    EDIT: Ahhh... You asign the entitiy listener before your on enable. That way it initialises the listener before PermissionEx is started.

    Change
    Code:
    private final usersystemEntityListener entityListener = new usersystemEntityListener(this);
    
    to
    Code:
    private final usersystemEntityListener entityListener;
    
    and place this in your onEnable after the check if PermissionEx is loaded.
    Code:
    entityListener = new usersystemEntityListener(this);
    
     
    Proctor likes this.
  5. Offline

    Proctor

    ok, but now he say's i've to remove final from
    private final usersystemEntityListener entityListener;
    when i do
    entityListener = new usersystemEntityListener(this);

    Code:
    package me.Proctor.usersystem;
    
    import java.util.logging.Logger;
    
    import org.bukkit.Bukkit;
    import org.bukkit.event.Event;
    import org.bukkit.plugin.PluginManager;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class usersystem extends JavaPlugin {
        int i = 1;
        boolean vote_sun, vote_day, vote_jail;
        private final usersystemEntityListener entityListener; //eclipse wants that i remove here final
        Logger log = Logger.getLogger("Minecraft");
    
        public void onEnable(){
            if(Bukkit.getServer().getPluginManager().isPluginEnabled("PermissionsEx")){
                entityListener = new usersystemEntityListener(this);
                log.info("[blocknet-Usersystem] version " + this.getDescription().getVersion() + "has been enabled.");
                log.info("[blocknet-Usersystem] (c) Aron Heinecke");
                PluginManager pm = this.getServer().getPluginManager();
                pm.registerEvent(Event.Type.ENTITY_DAMAGE, entityListener, Event.Priority.Normal, this);
            }
        }
    
        public void onDisable(){
            log.info("[blocknet-Usersystem] has been disabled.");
        }
    }
    
    and thanks for fast help :)
     
  6. Strange. But then again. I'm not that good in Java at the moment. But for the moment you can just remove the final statement I think.
     
  7. Offline

    Proctor

    i removed final, now, it gives no error, but at time nothing does work from the code too :D so no error, but a nothing making plugin till yet, but thx for help i'll try now more
    Code:
    package me.Proctor.usersystem;
    
    import java.util.logging.Logger;
    
    import org.bukkit.Bukkit;
    import org.bukkit.event.Event;
    import org.bukkit.plugin.PluginManager;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class usersystem extends JavaPlugin {
        int i = 1;
        boolean vote_sun, vote_day, vote_jail;
        private usersystemEntityListener entityListener;
        Logger log = Logger.getLogger("Minecraft");
    
        public void onEnable(){
            if(Bukkit.getServer().getPluginManager().isPluginEnabled("PermissionsEx")){
                entityListener = new usersystemEntityListener(this);
                log.info("[blocknet-Usersystem] version " + this.getDescription().getVersion() + "has been enabled.");
                log.info("[blocknet-Usersystem] (c) Aron Heinecke");
                PluginManager pm = this.getServer().getPluginManager();
                pm.registerEvent(Event.Type.ENTITY_DAMAGE, entityListener, Event.Priority.Normal, this);
            }
        }
    
        public void onDisable(){
            log.info("[blocknet-Usersystem] has been disabled.");
        }
    }
    
    so, it looks like : it's not true (or better i hope: when he enables the plugin, permEx is loading) so if(Bukkit.getServer().getPluginManager().isPluginEnabled("PermissionsEx")) = false->plugin does nothing...
     
  8. You've forgotten the @override above your onEntityDamageByEntity. Maybe that's why it doesn't output anything.
     
  9. Offline

    Proctor

    is that right?:
    Code:
    package me.Proctor.usersystem;
    
    import java.util.logging.Logger;
    
    import me.Proctor.usersystem.usersystem;
    
    import org.bukkit.entity.Entity;
    import org.bukkit.entity.Player;
    import org.bukkit.entity.Projectile;
    import org.bukkit.event.entity.EntityDamageByEntityEvent;
    import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
    import org.bukkit.event.entity.EntityListener;
    
    import ru.tehkode.permissions.PermissionManager;
    import ru.tehkode.permissions.bukkit.PermissionsEx;
    
    public class usersystemEntityListener extends EntityListener{
    
        PermissionManager permissions = PermissionsEx.getPermissionManager();
        public usersystemEntityListener (usersystem instance) {
            plugin = instance;
        }
        public static usersystem plugin;
    
        Logger log = Logger.getLogger("Minecraft");
        @Override
        public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
            log.info("[blocknet-Usersystem] Detected Entity Damage");
            Entity p1 = event.getDamager();
            Entity p2 = event.getEntity();
            if ((p1 == null) || (!(p1 instanceof Player)) || (p2 == null) || (!(p2 instanceof Player))){
                log.info("[blocknet-Usersystem] Attack = no player");
                return; // attacker no player / entity no player//
            }
            if (event.getCause() == DamageCause.PROJECTILE) {
                p1 = ((Projectile) p1).getShooter();
                log.info("[blocknet-Usersystem] Attack = projektile");
            }
            if ( permissions.getUser((Player) p1).getOwnPrefix().equals(permissions.getUser((Player) p2).getOwnPrefix())  ) {
                ((Player) p1).sendMessage("Kein Teamkill!");
                ((Player) p2).sendMessage("Kein Teamkill!");
                event.setCancelled(true);
            }
        }
    }
    cause he says to @Ovveride:
    "The method onEntityDamageByEntity(EntityDamageByEntityEvent) of type usersystemEntityListener must override or implement a supertype method"
    (cause this error i don't used till yet @Override..) (and didnt need before, caue i didnt used any api ..[only bukkit])
     
  10. Proctor likes this.
  11. Offline

    Proctor

    so i've to do :
    Code:
    onEntityDamage(EntityDamageEvent event)
    but how then i ask only if there is a entity damager, cause in source of bukkit api , they say it's for entity got damage by no source..
    (and when this is the wrong event: he must say that he have intialised..:
    Code:
    package me.Proctor.usersystem;
    
    import java.util.logging.Logger;
    
    import org.bukkit.Bukkit;
    import org.bukkit.event.Event;
    import org.bukkit.plugin.PluginManager;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class usersystem extends JavaPlugin {
        int i = 1;
        boolean vote_sun, vote_day, vote_jail;
        private usersystemEntityListener entityListener;
        Logger log = Logger.getLogger("Minecraft");
    
        public void onEnable(){
            if(Bukkit.getServer().getPluginManager().isPluginEnabled("PermissionsEx")){
                entityListener = new usersystemEntityListener(this);
                log.info("[blocknet-Usersystem] version " + this.getDescription().getVersion() + "has been enabled.");  // here he should say in log, that he 've been initialised..
                log.info("[blocknet-Usersystem] (c) Aron Heinecke");
                PluginManager pm = this.getServer().getPluginManager();
                pm.registerEvent(Event.Type.ENTITY_DAMAGE, entityListener, Event.Priority.Normal, this);
            }
        }
    
        public void onDisable(){
            log.info("[blocknet-Usersystem] has been disabled.");
        }
    }
    
    i seen onEntityDamagedByEntity by a other plugin, with the same declaration..

    ok, i seen,m that i could get the damager on other way, so-> onEntityDamage, i'll try this now, but i dont understand, why my plugin didnt saying his log
    Code:
    log.info("[blocknet-Usersystem] version " + this.getDescription().getVersion() + "has been enabled.");
                log.info("[blocknet-Usersystem] (c) Aron Heinecke")
    text..
    #Edit
    should i know do it like this? : (cause i seen it gives EntityDamagEvent for import, but not event.type.ENTITY_DAMAGE_BY_ENTITY)
    Code:
     public void onEntityDamage(EntityDamageEvent event) {
            log.info("[blocknet-Usersystem] Detected Entity Damage");
    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 22, 2016
  12. Well.. I'm not at home so I can't see how I've done the onEntityDamage.

    A good thing to do in your onEnable is place an else statement on your check if PermissionsEx is loaded. That way you can output the message that it isn't loaded. Did you also placed the dependency in your plugins yml file?
     
  13. Offline

    Proctor

    no, could you pls say me what i've to add in the file?
    Code:
    name: blocknet-usersystem
    main: me.Proctor.usersystem.usersystem
    version: 0.1
    & he doesnt find PermissionsEx (main:
    Code:
    package me.Proctor.usersystem;
    
    import java.util.logging.Logger;
    
    import org.bukkit.Bukkit;
    import org.bukkit.event.Event;
    import org.bukkit.plugin.PluginManager;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class usersystem extends JavaPlugin {
        int i = 1;
        boolean vote_sun, vote_day, vote_jail;
        private usersystemEntityListener entityListener;
        Logger log = Logger.getLogger("Minecraft");
        
        public void onEnable(){
            if(Bukkit.getServer().getPluginManager().isPluginEnabled("PermissionsEx")){
                log.info("[blocknet-Usersystem] version " + this.getDescription().getVersion() + "has been enabled.");
                log.info("[blocknet-Usersystem] (c) Aron Heinecke");
                entityListener = new usersystemEntityListener(this);
                PluginManager pm = this.getServer().getPluginManager();
                pm.registerEvent(Event.Type.ENTITY_DAMAGE, entityListener, Event.Priority.Normal, this);
            }
            else {
                log.info("[blocknet-Usersystem] didnt find PermissionsEx; version " + this.getDescription().getVersion());
            }
        }
    
        public void onDisable(){
            log.info("[blocknet-Usersystem] has been disabled.");
        }
    }
    
    )
     
  14. Add this line to your plugin.yml.

    depend: [PermissionsEx]
     
    Proctor likes this.
  15. Offline

    Proctor

    ty, i'll try again :)

    that's it, ty, now i've to look after my "hit-event", cause at time it didn't work, but i think i could figure it out,
    really thanks for your help

    hm, one question i have:
    i want that my plugin have an array:
    team1 team2
    team4 team5
    team3 team5
    that's which team's are together with others->hit-event-> setCancelled(true);
    should i use .yml file, or string array? (and how)

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 22, 2016
  16. Sorry. Absolutely the wrong person to ask :) I'm struggling with Java too on those parts. Just get familiar with the different arrays java has (Set, (Hash)Map, arrays etc.) and find out what's best for your wishes.

    PS: No problem. As beginning plugin developer I could at least others out right?!

    By the way. This is what I do to see entities damage.

    Code:
        @Override
        public void onEntityDamage(EntityDamageEvent event) {
            if (event.isCancelled()) {
                return;
            }
    
            EntityDamageByEntityEvent damageEvent = null;
    
            if (event instanceof EntityDamageByEntityEvent) {
                damageEvent = (EntityDamageByEntityEvent) event;
            }
    
            if (damageEvent == null) {
                return;
            }
    
            if (damageEvent.getDamager() instanceof Player && event.getEntity() instanceof Player) {
                Player src = (Player) damageEvent.getDamager();
                Player tgt = (Player) damageEvent.getEntity();
            }
    
    Skipped most boring stuff... But this is what you want to do. src = source and tgt = target.

    Edit: Edited so it is PVP only :)

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 22, 2016
  17. Offline

    Proctor

    ty, that works great
     
  18. Glad I could help!
     

Share This Page