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?)
Probably something wrong here : usersystemEntityListener.java:19 But you have pasted your main two times so I can't see what's wrong
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);
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
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.
i removed final, now, it gives no error, but at time nothing does work from the code too 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...
You've forgotten the @override above your onEntityDamageByEntity. Maybe that's why it doesn't output anything.
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])
Ahh.. That's because onEntityDamageByEntity doesn't excist. You probably want onEntityDamage and then check what the source is. See this page. http://jd.bukkit.org/doxygen/de/d38/classorg_1_1bukkit_1_1event_1_1entity_1_1EntityListener.html
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.
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?
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."); } } )
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.
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.