如何使用强制转换

时间:2019-01-05 06:49:52

标签: java minecraft bukkit

所以我正在尝试制作一个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 :(得分:0)

另一个答案是比需要的复杂得多。尝试改为执行此操作:

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())

这使得应用程序可以检查实体是否为受影响的类型之一,并相应地继续进行侦听器。

希望这会有所帮助!

答案 1 :(得分:-1)

改为使用实体类。

例如,我创建了一个使动物随年龄增长而使其死亡的mod(它们也将自行繁殖)。为了让配置确定动物的衰老速度,我使用了the animal class

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中。如果要查看如何解析配置文件以查找类,则可以看到该代码here。它很复杂,并具有一些其他逻辑来处理较小的拼写错误。