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. AndrewNG Deep learning课程笔记

    神经网络基础 Deep learning就是深层神经网络 神经网络的结构如下, 这是两层神经网络,输入层一般不算在内,分别是hidden layer和output layer hidden layer ...

  2. pip list 和 pip freeze

    https://blog.csdn.net/vitaminc4/article/details/76576956 Pip’s documentation statespip     descripti ...

  3. Servlet (二)ServletContext

    package cn.sasa.serv; import java.io.IOException; import javax.servlet.ServletContext; import javax. ...

  4. codechef Sum of Cubes 图论

    正解:图论+数学 解题报告: 先放个传送门QwQ 然后放下题目大意?就说给定简单图,无自环或重边,然后求(∑e[i][j])k,i,j∈S,S为点集的子集 然后因为k的取值只有[1,3],所以这里分类 ...

  5. 【Python全栈-后端开发】Django入门基础

    Django基础知识 一. 什么是web框架? 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的 ...

  6. <<Sklearn 与 TensorFlow 机器学习实用指南>>

    地址 https://github.com/apachecn/hands-on-ml-zh 目录结构 零.前言 第一部分 机器学习基础 一.机器学习概览 二.一个完整的机器学习项目 三.分类 四.训练 ...

  7. caffe 测试时间报错 Aborted at unix time

    今天测试时间报错,具体如下图: 在网上查了一下,大概的原因是由于程序中使用了随机函数造成的,后来检查了一下prototxt中有可能含有随机数的地方,去掉之后就可以了,包括shuffle:true,以及 ...

  8. IE报错:[vuex] vuex requires a Promise polyfill in this browser.

    使用的是vue2.0版本 IE报错提醒: 导致原因:使用了 ES6 中用来传递异步消息的的Promise,而IE的浏览器不支持 解决办法: 1.安装babel-polyfill模块,babel-plo ...

  9. 程序------>数据结构

    一程序概念: 1.对身边的任何一个事物进行认知和分类,从而得到一些信息: 2.在得到的信息基础之上建立了概念模型: 3.根据概念模型将我们生活中的实际问题转换成计算机能理解的形式: 4.用户通过人机交 ...

  10. 【托业】【新东方全真模拟】01~02-----P5~6

    12.precisely precise precision preciseness 114. 116. favorable adj.赞同的; 称赞的; 有利的; 讨人喜欢的; favor n.好感; ...