package com.sklm.lhb.listener;

 import org.bukkit.entity.Arrow;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent; import com.sklm.lhb.combat.Combat;
public class DamageListener implements Listener {
public DamageListener(Combat plugin) {
plugin.getServer().getPluginManager().registerEvents(this, plugin);
} @EventHandler
public void damage(EntityDamageByEntityEvent event) {
if((event.getDamager() instanceof Player)&&(event.getEntity() instanceof Player)) {
boolean fb_pvp = DamageUtil.getIsPVP("FB");
Player player = (Player) event.getDamager();
if((player.getWorld().getName()).equals("FB")){
if((event.getDamager() instanceof Player)&&(event.getEntity() instanceof Player)) {
Player player_self = (Player) event.getDamager();
boolean b = DamageUtil.isCommonGroup((Player)event.getEntity(), player_self);
String pvp_world = DamageUtil.getWorld_name();
if(b) {
event.setCancelled(true);
return ;
}else {
event.setCancelled(false);
}
}
}
if((player.getWorld().getName()).equals("ZC")) {
if((event.getDamager() instanceof Player)&&(event.getEntity() instanceof Player)) {
if(event.getDamager() instanceof Arrow) {
event.setCancelled(true);
}
event.setCancelled(true);
return ;
}else {
event.setCancelled(false);
}
}
}else {
//检测受到的伤害是否为投射物(弓箭,枪之类的伤害)
if(event.getDamager() instanceof Projectile) {
if((event.getDamager() instanceof Projectile)&&(event.getEntity() instanceof Player)) {
boolean fb_pvp = DamageUtil.getIsPVP("FB");
Player player = (Player) ((Projectile) event.getDamager()).getShooter();
if((player.getWorld().getName()).equals("FB")){
if((event.getDamager() instanceof Projectile)&&(event.getEntity() instanceof Player)) {
Player player_self = (Player) ((Projectile) event.getDamager()).getShooter();
boolean b = DamageUtil.isCommonGroup((Player)event.getEntity(), player_self);
String pvp_world = DamageUtil.getWorld_name();
if(b) {
event.setCancelled(true);
return ;
}else {
event.setCancelled(false);
}
}
}
if((player.getWorld().getName()).equals("ZC")) {
if((event.getDamager() instanceof Projectile)&&(event.getEntity() instanceof Player)) {
event.setCancelled(true);
return ;
}else {
event.setCancelled(false);
}
}
}
}
} } }

注意在检测玩家受到的伤害时候,近身类武器可以直接通过event.getDamager() instanceof Player 来判断是否受到伤害,但是在检测是否受到投掷类伤害的时候要通过event.getDamager instanceof Projectile来判断是否受到来自投掷类武器的伤害

Bukkit插件编程之检测玩家受到的伤害是来自投射类武器还是近身武器的更多相关文章

  1. Bukkit插件编程中.yml配置文件的创建和读取

    package com.sklm.config; import java.io.BufferedOutputStream; import java.io.BufferedReader; import ...

  2. 分享在winform下实现模块化插件编程-优化版

    上一篇<分享在winform下实现模块化插件编程>已经实现了模块化编程,但我认为不够完美,存在以下几个问题: 1.IAppContext中的CreatePlugInForm方法只能依据完整 ...

  3. 分享在winform下实现模块化插件编程

    其实很早之前我就已经了解了在winform下实现插件编程,原理很简单,主要实现思路就是:先定一个插件接口作为插件样式及功能的约定,然后具体的插件就去实现这个插件接口,最后宿主(应用程序本身)就利用反射 ...

  4. jQuery 插件编程精讲与技巧

    适应的读者: 1.有一定的jquery编程基础但是想在技能上有所提升的人 2.前端开发的程序员 3.对编程感兴趣的学生 为什么要学习jquery插件的编写? 为什么要学习jquery插件的编写?相信这 ...

  5. .Net插件编程模型:MEF和MAF[转载]

    .Net插件编程模型:MEF和MAF MEF和MAF都是C#下的插件编程框架,我们通过它们只需简单的配置下源代码就能轻松的实现插件编程概念,设计出可扩展的程序.这真是件美妙的事情! 今天抽了一点时间, ...

  6. 初探Delphi中的插件编程

    前言 我写Delphi程序是从MIS系统入门的,开始尝试子系统划分的时候采用的是MDI窗体的结构.随着系统功能的扩充,不断有新的子系统加入系统中,单个工程会变得非常大,每次做一点修改都要重新编译,单个 ...

  7. Chrome好用的插件:Wappalyzer 检测网站使用的技术

    Chrome好用的插件:Wappalyzer 检测网站使用的技术 Wappalyzer是一款能够分析目标网站所采用的平台架构.网站环境.服务器配置环境.javascript框架.编程语言等参数的chr ...

  8. Eclipse 基于接口编程的时候,快速跳转到实现类的方法(图文)

    Eclipse 基于接口编程的时候,要跳转到实现类很麻烦,其实Eclipse已经实现该功能. 只要按照Ctrl键,把鼠标的光标放在要跳转的方法上面,第一个是跳转到接口里面,第二个方法是跳转到实现类的位 ...

  9. js上传插件uploadify自动检测不到flash控件的问题

    [问题描述] 项目开发中,由于使用了js的一个上传插件uploadify,下载的是flash版本的,后来在谷歌浏览器上运行时经常报flash控件未安装,虽然下图是uploadify自动检测自动弹出来的 ...

随机推荐

  1. Python:if __name__ == '__main__'

    简介: __name__是当前模块名,当模块被直接运行时模块名为_main_,也就是当前的模块,当模块被导入时,模块名就不是__main__,即代码将不会执行. 关于代码if __name__ == ...

  2. 下载隐含的qq音乐

    最终按Ctrl+s .或者点击“下载”即可.格式可能为m4a

  3. 内核block机制

    内核版本:linux2.6.22.6 硬件平台:JZ2440 驱动源码 block_ipc_poll_key_int_drv.c : #include <linux/module.h> # ...

  4. session操作类

    using System;using System.Web; /// <summary> ///session操作类 /// </summary> public class a ...

  5. awk 和 sed (Stream Editor)

    1.sed pattern space(模式空间)相当于车间sed把流内容在这里处理: hold space(保留空间)相当于仓库,加工的半成品在这里临时储存(当然加工完的成品也在这里存储). h/H ...

  6. 微信公众号ID也可以修改了!

    差不多一年前,微信团队宣布个人类帐号一个自然年内可主动修改两次名称,那一天大家奔走相告纷纷修改成自己早就心仪的名字,有人猛然发现公众号名字改了,可ID还是xiaopipi(小屁屁)这可如何是好,洗不去 ...

  7. dedecms标签(tags)页面伪静态设置

    我们在创建文章的时候经常会设置一些tags,如果发表文章时关键词没添加的话tags也会自动成为文章的关键词,tags是一个不错的功能,通过关键词链接可以快速寻找到相关内容,但是标签页面的url经常会带 ...

  8. OC侧滑删除

    做侧滑的时候发现一个问题,当一个UITableView的cell有的有侧滑,有的没有,当用editActionsForRowAtIndexPath方法的时候发现有点问题,查看了下api,需要用到can ...

  9. MySQL数据库的权限问题操作及基本增删改查操作

    前面我们讲了mysql的基本内容,现在我们详细的了解一下mysql中的具体操作. what's the SQl SQL(Structured Query Language 即结构化查询语言) SQL语 ...

  10. LeetCode之有效括号

    class Solution:    def isValid(self,s):         #第一步,if 判断传入为空的情况        if s == "":      ...