当前位置: 首页 > 知识库问答 >
问题:

为什么不激活“EntityDamageByEntityEvent”?

长孙嘉容
2023-03-14
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);
                    }
                }
            }
        }
    }

它应该取消比赛,这样同一队的球员就不能互相攻击,但事实并非如此。为什么?您还可以建议创建FriendlyFire函数的其他方法。

共有1个答案

袁枫涟
2023-03-14

由于您没有发布完整的源码,我将从一个简单的问题开始,许多新接触Bukkit编程的人都会做错(我有时也会遇到):您注册了事件吗?

public class YourPlugin extends JavaPlugin {

    @Override
    public void onEnable() {
        super.onEnable();
        Bukkit.getServer().getPluginManager().registerEvents(listener, this);
    }

}

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
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);
        }
    }
}
 类似资料:
  • 本文向大家介绍为什么引入非线性激活函数?相关面试题,主要包含被问及为什么引入非线性激活函数?时的应答技巧和注意事项,需要的朋友参考一下 第一,对于神经网络来说,网络的每一层相当于f(wx+b)=f(w'x),对于线性函数,其实相当于f(x)=x,那么在线性激活函数下,每一层相当于用一个矩阵去乘以x,那么多层就是反复的用矩阵去乘以输入。根据矩阵的乘法法则,多个矩阵相乘得到一个大矩阵。所以线性激励函数

  • 我在玩Keras,我在想线性激活层和无激活层之间的区别是什么?它不是有同样的行为吗?如果是这样,那么线性激活的意义是什么呢? 我指的是这两段代码之间的区别: 和

  • 当实例的试用期结束时,Navicat Monitor 需要令牌以继续监控该实例。令牌可以作为永久许可证或订阅购买。若要管理你的令牌并许可你的实例,请前往“配置”->“激活令牌密钥和许可实例”。 【注意】永久许可证和订阅方案不能在同一个 Navicat Monitor 上使用。在更改激活方法之前,你需要取消激活令牌密钥或退出你的 Navicat ID。 永久许可证 如果你购买了永久许可证,你将收到一

  • 我已经在一个小项目中使用 Openshift Online Starter 一段时间了。但是,在过去的两周里,我的系统的 pod(之前工作正常)只是拒绝启动。程序构建正常,部署正常,然后最后一个 pod 卡在“挂起”中。在控制台的“事件”选项卡中,始终重复此错误或轻微变化: 我知道,自8月6日以来,Openshift状态网站报告了“API错误级别升高”,并在我的特定服务器(us-west-2)上记

  • 我有个很基本的问题 我正在努力了解Service Worker的生命周期,或者更好地了解实际情况下初始化和更改状态的内容。 我现在有两个问题: 1-在<代码>chrome://inspect/#service-工人始终有2行ou 3行,显示所有服务工人都以相同的PID运行。为什么?为什么不止一个? 2-当我在刷新时检查我的服务人员时,我得到以下信息: #566已激活并正在运行[停止] 这是什么意思

  • 我试着运行一个没有任何激活函数的简单神经网络,并且网络不会收敛。我正在使用MSE成本函数进行MNIST分类。 然而,如果我将校正线性激活函数应用于隐藏层(输出=max(0,x),其中x是加权和),那么它会很好地收敛。 为什么消除前一层的负面输出有助于学习?