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. MySQ数据表设计

    数据表概念 数据表是数据库中的基本对象元素,以记录(行)和字段(列)组成的二维结构用于存储数据.数据表由表结构和表内容两部分组成,先建立表结构,然后才能输入数据.数据表结构设计主要包括字段名称.字段类 ...

  2. [administrator] rpmbuild

    rpmbuild 1.  rpm是什么 RPM = RPM Package Manager = Redhat Package Manager https://en.wikipedia.org/wiki ...

  3. iOS开发使用pdf切图

    把pdf资源拖到Assets.xcassets里面, 打开最右边的按钮, scales选择single scale就可以像以前一样使用了:  [UIImage imageName:@"xxx ...

  4. Servlet重写init(ServletConfig config)还是init()

    原文地址:Servlet重写init(ServletConfig config)还是init() 写一个Servlet时,有时需要我们重写该Servlet的初始化方法,然后,究竟是重写init(Ser ...

  5. JQPRINT-不错的jquery打印插件

    1.首先引用Jquery和jqprint-0.3.js(依赖于Jquery的) <script language="javascript" src="jquery- ...

  6. oracle中字符串与表数据拼接的用法--“||”

    测试过程中,经常需要批量删除或者插入.修改一些表数据或结构,使用手工复制.粘贴其实很麻烦,所以这是我们就可以使用拼接成sql语句的方法来实现操作数据.下面先讲讲oracle中拼接符 || 的用法,如下 ...

  7. IGMP协议

    IGMP报文格式: 4bit的IGMP版本(1)+4bit的IGMP类型(1-2)+8bit未用+16bit检验和(同ICMP)+32bit组地址(D类IP地址) 类型为1说明是由多播路由器发出的查询 ...

  8. mysql 内置功能目录

    mysql 内置功能 视图介绍 mysql 内置功能 视图 使用 mysql 内置功能 触发器介绍 mysql 内置功能 触发器 实验 mysql 内置功能 事务 介绍 mysql 内置功能 存储过程 ...

  9. python读、写、修改、追写excel文件

    三个工具包 python操作excel的三个工具包如下 xlrd: 对excel进行读相关操作 xlwt: 对excel进行写相关操作 xlutils: 对excel读写操作的整合 注意,只能操作.x ...

  10. Python3学习之路~5.4 os模块

    用于提供系统级别的操作 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shel ...