所以我正在尝试制作一个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
列为清单。我该怎么办?
答案 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。它很复杂,并具有一些其他逻辑来处理较小的拼写错误。