Java 为什么';";EntityDamageByEntityEvent“;激活?
所以,我尝试做一个团队插件,每个团队都有一个player1和player2。 现在我想使用EntityDamageByEntityEvent添加friendyfire,但要么我的代码不起作用,要么事件没有被激活。我对插件还很陌生,所以我的代码可能有点愚蠢。 顺便说一句,“teams2”是一个包含“Team”对象的ArrayList,每个对象包含player1、player2和teamname 这就是功能:Java 为什么';";EntityDamageByEntityEvent“;激活?,java,bukkit,Java,Bukkit,所以,我尝试做一个团队插件,每个团队都有一个player1和player2。 现在我想使用EntityDamageByEntityEvent添加friendyfire,但要么我的代码不起作用,要么事件没有被激活。我对插件还很陌生,所以我的代码可能有点愚蠢。 顺便说一句,“teams2”是一个包含“Team”对象的ArrayList,每个对象包含player1、player2和teamname 这就是功能: public void onEntityDamageByEntity(EntityDama
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);
}
}
}
}
}
public void onEntityDamageByEntity(EntityDamageByEntityEvent事件){
if(((event.getEntity()instanceof Player))&((event.getDamager()instanceof Player))){
Player=(Player)event.getEntity();
Player damager=(Player)event.getDamager();
对于(int i=0;i
它应该取消比赛,这样同一队的球员就不能互相攻击,但事实并非如此。为什么?您还可以建议创建FriendlyFire函数的其他方法。由于您没有发布全部源代码,我将从一个简单的问题开始,即许多刚接触Bukkit编程的人都犯了错误(有时甚至发生在我身上):您注册了您的事件吗
public类YourPlugin扩展了JavaPlugin{
@凌驾
public void onEnable(){
super.onEnable();
Bukkit.getServer().getPluginManager().registerEvents(侦听器,this);
}
}
listener
是listener类的一个实例。因此,如果您在MainClass中的问题中发布了此代码,则应如下所示:
public类YourPlugin扩展JavaPlugin实现监听器{
@凌驾
public void onEnable(){
super.onEnable();
Bukkit.getServer().getPluginManager().registerEvents(这个,这个);
}
@事件处理程序
公共void OneTityDamageByEntity(EntityDamageByEntityEvent事件){
//你的活动
}
}
如果你有一个单独的类,它应该是这样的:
public类YourPlugin扩展了JavaPlugin{
@凌驾
public void onEnable(){
super.onEnable();
Bukkit.getServer().getPluginManager().registerEvents(新的YourListener(),这个);
}
}
公共类YourListener实现Listener{
@事件处理程序
公共void OneTityDamageByEntity(EntityDamageByEntityEvent事件){
//你的活动
}
}
将此@EventHandler
放在EntityDamageByEntyEvent
上方一行非常重要。这也可能是一个问题,为什么您的活动不起作用
我看透了你的听众,它应该工作得很好。我只是花了点时间把它收紧了一点:
@EventHandler
公共无效OneTityDamageByEntity(EntityDamageByEntityEvent e){
如果(!(e.getEntity()instanceof Player))返回;
Player=(Player)e.getEntity();
球员达马杰;
if(如getDamager()实例of Arrow){
箭头a=(箭头)e.getDamager();
如果(!(a.getShooter()玩家实例))返回;
damager=(玩家)a.getShooter();
}否则{
如果(!(如getDamager()玩家实例))返回;
达马格=(玩家)e.getDamager();
}
对于(t组:第2组){
如果((t.player1==player | t.player2==player)和&(t.player1==damager | t.player2==damager)){
e、 setCancelled(真);
}
}
}
我不知道
teams2
中存储了什么类,但我猜测它应该是Team
,所以如果您使用其他类名,您可能需要更改它,因为您想尝试我的代码 如果条件正确,是否输入了?可能是因为使用了==
而不是.equals()
?