1. package com.sklm.lhb.listener;
  2.  
  3. import org.bukkit.entity.Arrow;
  4. import org.bukkit.entity.Player;
  5. import org.bukkit.entity.Projectile;
  6. import org.bukkit.event.EventHandler;
  7. import org.bukkit.event.Listener;
  8. import org.bukkit.event.entity.EntityDamageByEntityEvent;
  9.  
  10. import com.sklm.lhb.combat.Combat;
  11. public class DamageListener implements Listener {
  12. public DamageListener(Combat plugin) {
  13. plugin.getServer().getPluginManager().registerEvents(this, plugin);
  14. }
  15.  
  16. @EventHandler
  17. public void damage(EntityDamageByEntityEvent event) {
  18. if((event.getDamager() instanceof Player)&&(event.getEntity() instanceof Player)) {
  19. boolean fb_pvp = DamageUtil.getIsPVP("FB");
  20. Player player = (Player) event.getDamager();
  21. if((player.getWorld().getName()).equals("FB")){
  22. if((event.getDamager() instanceof Player)&&(event.getEntity() instanceof Player)) {
  23. Player player_self = (Player) event.getDamager();
  24. boolean b = DamageUtil.isCommonGroup((Player)event.getEntity(), player_self);
  25. String pvp_world = DamageUtil.getWorld_name();
  26. if(b) {
  27. event.setCancelled(true);
  28. return ;
  29. }else {
  30. event.setCancelled(false);
  31. }
  32. }
  33. }
  34. if((player.getWorld().getName()).equals("ZC")) {
  35. if((event.getDamager() instanceof Player)&&(event.getEntity() instanceof Player)) {
  36. if(event.getDamager() instanceof Arrow) {
  37. event.setCancelled(true);
  38. }
  39. event.setCancelled(true);
  40. return ;
  41. }else {
  42. event.setCancelled(false);
  43. }
  44. }
  45. }else {
  46. //检测受到的伤害是否为投射物(弓箭,枪之类的伤害)
  47. if(event.getDamager() instanceof Projectile) {
  48. if((event.getDamager() instanceof Projectile)&&(event.getEntity() instanceof Player)) {
  49. boolean fb_pvp = DamageUtil.getIsPVP("FB");
  50. Player player = (Player) ((Projectile) event.getDamager()).getShooter();
  51. if((player.getWorld().getName()).equals("FB")){
  52. if((event.getDamager() instanceof Projectile)&&(event.getEntity() instanceof Player)) {
  53. Player player_self = (Player) ((Projectile) event.getDamager()).getShooter();
  54. boolean b = DamageUtil.isCommonGroup((Player)event.getEntity(), player_self);
  55. String pvp_world = DamageUtil.getWorld_name();
  56. if(b) {
  57. event.setCancelled(true);
  58. return ;
  59. }else {
  60. event.setCancelled(false);
  61. }
  62. }
  63. }
  64. if((player.getWorld().getName()).equals("ZC")) {
  65. if((event.getDamager() instanceof Projectile)&&(event.getEntity() instanceof Player)) {
  66. event.setCancelled(true);
  67. return ;
  68. }else {
  69. event.setCancelled(false);
  70. }
  71. }
  72. }
  73. }
  74. }
  75.  
  76. }
  77.  
  78. }

注意在检测玩家受到的伤害时候,近身类武器可以直接通过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. 图的遍历算法:DFS、BFS

    在图的基本算法中,最初需要接触的就是图的遍历算法,根据访问节点的顺序,可分为深度优先搜索(DFS)和广度优先搜索(BFS). DFS(深度优先搜索)算法 Depth-First-Search 深度优先 ...

  2. 内部排序->交换排序->起泡排序

    文字描述 首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序(L.r[1].key>L.r[2].key),则将两个记录交换位置,然后比较第二个记录和第三个记录的关键字.依次类推,直 ...

  3. ORACLE DIRECTORY目录管理步骤

    ORACLE DIRECTORY目录管理步骤 ORACLE的 DIRECTORY在数据库中是个目录的路径,需要在操作系统中有相应的目录与之对应:ORACLE目录的作用就是让ORACLE数据库和操作系统 ...

  4. Java之旅_面向对象_封装

    参考并摘自:http://www.runoob.com/java/java-encapsulation.html 在面向对象的程序设计方法中,封装(英语 :Encapsulation)是指一种将函数接 ...

  5. 用uart实现printf函数

    硬件:JZ2440 实现功能:用putchr()函数实现printf() start.s nand.c uart.c uart.h my_stdio.c my_stdio.h main.c start ...

  6. InnoDB Lock

    众所周知innodb的锁是行级锁,这样说也没有问题,只是还可以细分而已.推荐阅读何登成大牛的博客http://hedengcheng.com/?p=771 innodb的锁有三种算法,分别如下: Re ...

  7. MySQL 5.6 Index Condition Pushdown

    ICP(index condition pushdown)是mysql利用索引(二级索引)元组和筛字段在索引中的where条件从表中提取数据记录的一种优化操作.ICP的思想是:存储引擎在访问索引的时候 ...

  8. DNS服务基础原理介绍

    FQDN 全称域名 localhost(主机名或者是别名).localdomain(域名)    FQDN=主机名.域名 根域               . 顶级域名       .com   .n ...

  9. wx事件处理二

    wxPython首先在触发对象中查找匹配事件类型的被绑定的处理器函数,如果找到,刚相应方法被执行.如果没找到,wxPython将检查该事件是否传送到了上一级的容器,如果是,父窗口被检查,如此一级级向上 ...

  10. 解决ScrollView中包含ListView,导致ListView显示不全

    ScrollView 中包含 ListView 的问题 : ScrollView和ListView会冲突,会导致ListView显示不全 <?xml version="1.0" ...