- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
所以,我正在尝试做一个团队插件,其中每个团队都有一个 player1 和 player2。现在我想使用 EntityDamageByEntityEvent 添加 friendyfire,但要么我的代码不起作用,要么事件没有被激活。我对插件很陌生,所以我的代码可能有点愚蠢。顺便说一句,“teams2”是一个包含“Team”对象的 ArrayList,每个对象都包含 player1、player2 和团队名称。
这是函数:
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
if (((event.getEntity() instanceof Player)) && ((event.getDamager() instanceof Player))) {
Player player = (Player)event.getEntity();
Player damager = (Player)event.getDamager();
for(int i = 0; i < teams2.size(); i++){
if((teams2.get(i).player1 == player || teams2.get(i).player2 == player) && (teams2.get(i).player1 == damager || teams2.get(i).player2 == damager)){
event.setCancelled(true);
}
}
}
else if (((event.getEntity() instanceof Arrow)) && ((event.getDamager() instanceof Player))) {
Entity arrow = event.getEntity();
if ((((Projectile)arrow).getShooter() instanceof Player)) {
Player player = (Player)arrow;
Player damager = (Player)event.getDamager();
for(int i = 0; i < teams2.size(); i++){
if((teams2.get(i).player1 == player || teams2.get(i).player2 == player) && (teams2.get(i).player1 == damager || teams2.get(i).player2 == damager)){
event.setCancelled(true);
}
}
}
}
}
应该取消 Activity ,让同队的玩家之间不能互相攻击,但事实并非如此。为什么?您还可以建议其他方法来创建 FriendlyFire 函数。
最佳答案
由于您没有发布完整的源代码,我将从一个简单的问题开始,这个问题是许多 Bukkit 编程新手都做错的(有时甚至发生在我身上):您注册了您的事件吗?
public class YourPlugin extends JavaPlugin {
@Override
public void onEnable() {
super.onEnable();
Bukkit.getServer().getPluginManager().registerEvents(listener, this);
}
}
listener
是您的 Listener 类的一个实例。因此,如果您在 MainClass 的问题中发布了这段代码,它应该如下所示:
public class YourPlugin extends JavaPlugin implements Listener {
@Override
public void onEnable() {
super.onEnable();
Bukkit.getServer().getPluginManager().registerEvents(this, this);
}
@EventHandler
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
//your event
}
}
如果你有一个单独的类,它应该是这样的:
public class YourPlugin extends JavaPlugin {
@Override
public void onEnable() {
super.onEnable();
Bukkit.getServer().getPluginManager().registerEvents(new YourListener(), this);
}
}
public class YourListener implements Listener {
@EventHandler
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
//your event
}
}
将此 @EventHandler
放在 EntityDamageByEntntyEvent
上方一行非常重要。这也可能是您的 Activity 无法进行的原因。
我查看了您的监听器,它应该可以正常工作。我只是花时间把它收紧了一点:
@EventHandler
public void onEntityDamageByEntity(EntityDamageByEntityEvent e) {
if (!(e.getEntity() instanceof Player)) return;
Player player = (Player) e.getEntity();
Player damager;
if (e.getDamager() instanceof Arrow) {
Arrow a = (Arrow) e.getDamager();
if (!(a.getShooter() instanceof Player)) return;
damager = (Player) a.getShooter();
} else {
if (!(e.getDamager() instanceof Player)) return;
damager = (Player) e.getDamager();
}
for (Team t : teams2) {
if ((t.player1 == player || t.player2 == player) && (t.player1 == damager || t.player2 == damager)) {
e.setCancelled(true);
}
}
}
我不知道 teams2
中存储的是什么类,但我大胆猜测它会是 Team
,所以如果您使用其他类,您可能必须更改它类名,因为你想尝试我的代码。
关于java - 为什么 "EntityDamageByEntityEvent"没有被激活?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56466485/
所以,我正在尝试做一个团队插件,其中每个团队都有一个 player1 和 player2。现在我想使用 EntityDamageByEntityEvent 添加 friendyfire,但要么我的代码
我正在创建一个 PvP 插件,但我无法继续,因为我有一个无法解决的恼人的 Actor 问题。我正在尝试获取最后一个伤害原因,即伤害者,检查伤害者是否使用了箭头,将“箭头”转换为<射手。但它不断地在我的
我是一名优秀的程序员,十分优秀!