Mob List Check

Discussion in 'Plugin Development' started by damo1995, Sep 9, 2012.

Thread Status:
Not open for further replies.
  1. 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.
     
  2. 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/
     
  3. 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.
     
  4. Offline

    Mitizmitiz

    The line causing the error is:

    Code:
    List<String> pfp = plugin.getConfig().getStringList("protect-from-player");
    Does protect-from-player exist in the config?
     
  5. In the config I have this:

    Code:
    
    protect-from-player:
         - Animals
    
     
  6. Offline

    Mitizmitiz

    Heres your problem -
    Code:
    public NewDamageListeners(AnimalProtect instance) {
        DamageListeners.plugin = instance;
    }
    
    Try this :
    Code:
    private AnimalProtect plugin;
     
    public NewDamageListeners(AnimalProtect instance) {
      this.plugin = instance;
    }
     
Thread Status:
Not open for further replies.

Share This Page