Search code examples
javaminecraftbukkit

How to make a List<Entity> on a variable with a cast


so I am trying to make a Minecraft plugin that listens to the configuration file for input of which mobs to not target players. Here is what I have so far

public class ZombieListener implements Listener {
    private final List<String> entities;
    public ZombieListener(List<String> entities){
        this.entities = entities;
    }
    @EventHandler
    public void onEntityTargetEvent(EntityTargetLivingEntityEvent event) {
        if (event.getTarget() event.getTarget() instanceof Player ) {
            final Player targeted = (Player) event.getTarget();
            if (targeted.hasPermission("dont.target.me") && entities.contains(targeted)){
                event.setCancelled(true);
            }
        }
    }
}

I realise that I can't check for an entity from an object and therefore I need to make targeted a List. How should I do this?


Solution

  • The other answer is way more complex than it needs to be. Try to do this instead:

    public class ZombieListener implements Listener {
    
        private final List<String> entities;
    
        public ZombieListener(List<String> entities){
            this.entities = entities;
        }
    
        @EventHandler
        public void onEntityTargetEvent(EntityTargetLivingEntityEvent event) {
            if (event.getTarget() instanceof Player && entities.contains(event.getEntityType().getName())) {
                final Player targeted = (Player) event.getTarget();
                if (targeted.hasPermission("dont.target.me") && entities.contains(targeted)) {
                    event.setCancelled(true);
                }
            }
        }
    }
    

    All I did was add a small bit of code in the first if-statement:

    entities.contains(event.getEntityType().getName())
    

    This makes it so the application checks if the entity is one of the affected types, and carries on with the listener accordingly.

    Hope this helps!