1. 程式人生 > >Bukkit插件編程之檢測玩家受到的傷害是來自投射類武器還是近身武器

Bukkit插件編程之檢測玩家受到的傷害是來自投射類武器還是近身武器

void geb common play ack 是否 mon get 檢測

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

註意在檢測玩家受到的傷害時候,近身類武器可以直接通過event.getDamager() instanceof Player 來判斷是否受到傷害,但是在檢測是否受到投擲類傷害的時候要通過event.getDamager instanceof Projectile來判斷是否受到來自投擲類武器的傷害

Bukkit插件編程之檢測玩家受到的傷害是來自投射類武器還是近身武器