Bukkit插件编程之检测玩家受到的伤害是来自投射类武器还是近身武器
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插件编程之检测玩家受到的伤害是来自投射类武器还是近身武器的更多相关文章
- Bukkit插件编程中.yml配置文件的创建和读取
package com.sklm.config; import java.io.BufferedOutputStream; import java.io.BufferedReader; import ...
- 分享在winform下实现模块化插件编程-优化版
上一篇<分享在winform下实现模块化插件编程>已经实现了模块化编程,但我认为不够完美,存在以下几个问题: 1.IAppContext中的CreatePlugInForm方法只能依据完整 ...
- 分享在winform下实现模块化插件编程
其实很早之前我就已经了解了在winform下实现插件编程,原理很简单,主要实现思路就是:先定一个插件接口作为插件样式及功能的约定,然后具体的插件就去实现这个插件接口,最后宿主(应用程序本身)就利用反射 ...
- jQuery 插件编程精讲与技巧
适应的读者: 1.有一定的jquery编程基础但是想在技能上有所提升的人 2.前端开发的程序员 3.对编程感兴趣的学生 为什么要学习jquery插件的编写? 为什么要学习jquery插件的编写?相信这 ...
- .Net插件编程模型:MEF和MAF[转载]
.Net插件编程模型:MEF和MAF MEF和MAF都是C#下的插件编程框架,我们通过它们只需简单的配置下源代码就能轻松的实现插件编程概念,设计出可扩展的程序.这真是件美妙的事情! 今天抽了一点时间, ...
- 初探Delphi中的插件编程
前言 我写Delphi程序是从MIS系统入门的,开始尝试子系统划分的时候采用的是MDI窗体的结构.随着系统功能的扩充,不断有新的子系统加入系统中,单个工程会变得非常大,每次做一点修改都要重新编译,单个 ...
- Chrome好用的插件:Wappalyzer 检测网站使用的技术
Chrome好用的插件:Wappalyzer 检测网站使用的技术 Wappalyzer是一款能够分析目标网站所采用的平台架构.网站环境.服务器配置环境.javascript框架.编程语言等参数的chr ...
- Eclipse 基于接口编程的时候,快速跳转到实现类的方法(图文)
Eclipse 基于接口编程的时候,要跳转到实现类很麻烦,其实Eclipse已经实现该功能. 只要按照Ctrl键,把鼠标的光标放在要跳转的方法上面,第一个是跳转到接口里面,第二个方法是跳转到实现类的位 ...
- js上传插件uploadify自动检测不到flash控件的问题
[问题描述] 项目开发中,由于使用了js的一个上传插件uploadify,下载的是flash版本的,后来在谷歌浏览器上运行时经常报flash控件未安装,虽然下图是uploadify自动检测自动弹出来的 ...
随机推荐
- iOS开发尺寸记录
https://kapeli.com/cheat_sheets/iOS_Design.docset/Contents/Resources/Documents/index https://help.ap ...
- 创建本地SVN版本库以及将SVN导入GIT
创建本地SVN 通常SVN作为一种服务,是在服务器上架设,供用户通过网络访问使用.但如果只是自己日常使用,完全可以架设在本机上,不需要启动后台程序,通过文件的方式访问即可. 建立本地SVN非常简单,一 ...
- 于dm-0 dm-1
dm是device mapper的意思,dm-0, dm-1的实体可以通过下面几个命令看出,lvm会把每个lv连接到一个/dev/dm-x的设备档,这个设备档并不是一个真正的磁盘,所以不会有分区表存在 ...
- XDCTF网络安全大赛——Web100
打开网址 http://game1.xdctf.com:8083/f16c3b1ed800fc78e605/index.php 网页中显示了一张图片,图片名为hackkey.png: 还有一段文字: ...
- [knowledge] netmap
900MHz的单核处理10GB的包收/发. netmap has been implemented in FreeBSD and Linux and Gbit/s network adapters. ...
- OLTP/OLAP
原文地址:https://www.cnblogs.com/hhandbibi/p/7118740.html 数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction p ...
- JavaScript学习笔记--语言工具的了解
基础学习,快速入门资料:网站 https://www.liaoxuefeng.com ,http://www.runoob.com/js/js-tutorial.html 笔记: 编程工具:SubLi ...
- Python网络爬虫第三弹《爬取get请求的页面数据》
一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib. ...
- 【JMeter】【性能测试】响应信息不明确的接口做关联
1:做接口关联的时候,发现接口响应没有可以利用的信息.如下图只返回了一个成功的标识,这样的接口如何与之关联? 通过抓包观察后续的修改功能,发现需要传入一个id和一个title.但是前面的接口没有返回, ...
- LeetCode-37.Sudok Solver
Write a program to solve a Sudoku puzzle by filling the empty cells. A sudoku solution must satisfy ...