Как сделать Список <Entity>для переменной с приведением - PullRequest
0 голосов
/ 05 января 2019

, поэтому я пытаюсь создать плагин для Minecraft, который слушает файл конфигурации, для ввода которого мобы не нацелены на игроков. Вот что у меня пока

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);
            }
        }
    }
}

Я понимаю, что не могу проверить сущность из объекта, и поэтому мне нужно создать targeted Список. Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Другой ответ гораздо сложнее, чем нужно. Попробуйте сделать это вместо:

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);
            }
        }
    }
}

Все, что я сделал, это добавил немного кода в первый оператор if:

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

Это делает так, чтобы приложение проверяло, является ли объект одним из затронутых типов, и соответствующим образом продолжает работу со слушателем.

Надеюсь, это поможет!

0 голосов
/ 06 января 2019

Вместо этого используйте класс сущности.

Например, я создал мод, который заставлял животных стареть с течением времени, заставляя их умирать (они также размножались бы самостоятельно). Для того чтобы в конфигурации можно было определить, как быстро животные стареют, я использовал класс животных :

private Class species;
private Entity entity;

public EntityAIAging(Random random, EntityAnimal ent, Class spec, EntityAgeTracker ageTracker) {
    species = spec;
    entity = ent;
    //...
}

public void updateTask() {
    // Both of these function the same:
    // Unaging animals do not age, do not die, and do not procreate
    if(HardLibAPI.animalManager.isUnaging(species)) {
        return;
    }
    if(HardLibAPI.animalManager.isUnaging(entity.getClass())) {
        return;
    }
    //...
}

Итак, вы хотели бы позвонить по номеру entity.getClass() и проверить, существует ли он в пределах List<Class> entities. Если вы хотите увидеть, как я проанализировал конфигурационный файл, чтобы найти классы, вы можете увидеть этот код здесь . Это сложно и имеет некоторую дополнительную логику для обработки незначительных опечаток.

...