Hello guys, So i've been struggling to find a way to adapt my current plugin to allow the server admin more options. At the moment i am using this Event Method to check for mob damage multiple times: Code: if(event.getDamager() instanceof Player && event.getEntity() instanceof Animals){ Player player = (Player) event.getDamager(); if(event.isCancelled()){return;} if(plugin.getWorldGuardPlugin().canBuild(player, loc) || player.hasPermission("animalprotect.bypass")){ event.setCancelled(false); if(plugin.getConfig().getBoolean("debug") == true){ player.sendMessage("DEBUG: Attacked Mob"); player.sendMessage("DEBUG: ATTACK SUCCESSFULL"); } } else{ event.setCancelled(true); if(plugin.getConfig().getBoolean("debug") == true){ player.sendMessage("DEBUG: ATTACKED Mob"); player.sendMessage("DEBUG: ATTACK FAILED"); } player.sendMessage(fail); if(plugin.getConfig().getBoolean("notify") == true){ notifyAdmin(player); } } } Now i would like to replace the "instanceof Animals" to a list that server admins can tweek for example: protect-from-player: - Animals - Villager ect. Could somebody possible give me an example of how i can do this. Thanks.
So instead of this Code: event.getEntity() instanceof Animals You need something like this: Code: typeNameList.contains(event.getEntity().getType().name()) typeNameList would be a List<String> that you get from the config. Code: List<String> typeNameList = config.getStringList("protect-from-player"); Here is the EntityType enum http://jd.bukkit.org/apidocs/
Hi, Thanks for the help but unfortunatley its now throwing this stack and for some reason and failing to see why? Stack: Code: 2012-09-14 00:06:57 [SEVERE] Could not pass event EntityDamageByEntityEvent to AnimalProtect org.bukkit.event.EventException at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:332) at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:477) at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:462) at org.bukkit.craftbukkit.event.CraftEventFactory.callEvent(CraftEventFactory.java:80) at org.bukkit.craftbukkit.event.CraftEventFactory.callEntityDamageEvent(CraftEventFactory.java:364) at org.bukkit.craftbukkit.event.CraftEventFactory.handleEntityDamageEvent(CraftEventFactory.java:386) at net.minecraft.server.EntityLiving.damageEntity(EntityLiving.java:591) at net.minecraft.server.EntityAnimal.damageEntity(SourceFile:124) at net.minecraft.server.EntityHuman.attack(EntityHuman.java:762) at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:1020) at net.minecraft.server.Packet7UseEntity.handle(SourceFile:36) at net.minecraft.server.NetworkManager.b(NetworkManager.java:281) at net.minecraft.server.NetServerHandler.d(NetServerHandler.java:109) at net.minecraft.server.ServerConnection.b(SourceFile:35) at net.minecraft.server.DedicatedServerConnection.b(SourceFile:30) at net.minecraft.server.MinecraftServer.q(MinecraftServer.java:583) at net.minecraft.server.DedicatedServer.q(DedicatedServer.java:212) at net.minecraft.server.MinecraftServer.p(MinecraftServer.java:476) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:408) at net.minecraft.server.ThreadServerApplication.run(SourceFile:539) Caused by: java.lang.NullPointerException at me.damo1995.AnimalProtect.NewDamageListeners.handAttack(NewDamageListeners.java:28) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:330) ... 20 more Class: Code: package me.damo1995.AnimalProtect; import java.util.List; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.entity.*; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageByEntityEvent; import com.sk89q.worldguard.protection.ApplicableRegionSet; import com.sk89q.worldguard.protection.managers.RegionManager; public class NewDamageListeners implements Listener { String fail = ChatColor.DARK_RED + "You cannot attack mobs here!"; public static AnimalProtect plugin; public NewDamageListeners(AnimalProtect instance) { DamageListeners.plugin = instance; } @EventHandler(priority = EventPriority.LOWEST) public void handAttack(EntityDamageByEntityEvent event){ List<String> pfp = plugin.getConfig().getStringList("protect-from-player"); //-------- Non-Hostile Mob Check --------\\ if(event.getDamager() instanceof Player && pfp.contains(event.getEntity().getType().name())){ Location loc = event.getEntity().getLocation(); RegionManager rm = plugin.getWorldGuardPlugin().getRegionManager(loc.getWorld()); @SuppressWarnings("unused") ApplicableRegionSet set = rm.getApplicableRegions(loc); Player player = (Player) event.getDamager(); if(event.isCancelled()){return;} if(plugin.getWorldGuardPlugin().canBuild(player, loc) || player.hasPermission("animalprotect.bypass")){ event.setCancelled(false); if(plugin.getConfig().getBoolean("debug") == true){ player.sendMessage("DEBUG: Attacked"); player.sendMessage("DEBUG: ATTACK SUCCESSFULL"); } } else{ event.setCancelled(true); if(plugin.getConfig().getBoolean("debug") == true){ player.sendMessage("DEBUG: ATTACKED Mob"); player.sendMessage("DEBUG: ATTACK FAILED"); } player.sendMessage(fail); if(plugin.getConfig().getBoolean("notify") == true){ plugin.notifyAdmin(player); } } } } } Thanks.
The line causing the error is: Code: List<String> pfp = plugin.getConfig().getStringList("protect-from-player"); Does protect-from-player exist in the config?
Heres your problem - Code: public NewDamageListeners(AnimalProtect instance) { DamageListeners.plugin = instance; } Try this : Code: private AnimalProtect plugin; public NewDamageListeners(AnimalProtect instance) { this.plugin = instance; }