/** * Entity damaged by another entity event. Cancels the event and sends damager a message if either * damager or attacked player have not enabled PvP * * @param event event being handled */ @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) { if (event.getEntity() instanceof Player) { final Player attackedPlayer = (Player) event.getEntity(); final Player attacker; if (event.getDamager() instanceof Player) { attacker = (Player) event.getDamager(); } else if (event.getDamager() instanceof Projectile) { if (((Projectile) event.getDamager()).getShooter() instanceof Player) { attacker = (Player) ((Projectile) event.getDamager()).getShooter(); } else { return; } } else { return; } final World world = attacker.getWorld(); final Localisation localisation = plugin.getLocalisation(); if (PVPConfigUtils.getPlayerStatus(attacker, world, plugin)) { if (PVPConfigUtils.getPlayerStatus(attackedPlayer, world, plugin)) { LastPVPActionTimeConfigUtils.update(attacker, world, plugin); if (DebugConfigUtils.getDebugEnabled(plugin)) { attacker.sendMessage( localisation.get( LocalisationEntry.DEBUG_ATTACKED_PLAYER, new Object[] {attackedPlayer.getDisplayName(), event.getDamage()})); attackedPlayer.sendMessage( localisation.get( LocalisationEntry.DEBUG_ATTACKED_BY_PLAYER, new Object[] {attacker.getDisplayName(), event.getDamage()})); } } else { event.setCancelled(true); attacker.sendMessage( localisation.get( LocalisationEntry.MSG_ATTACK_CANCELLED_PLAYER_DOES_NOT_HAVE_PVP_ENABLED, new Object[] {attackedPlayer.getDisplayName()})); } } else { event.setCancelled(true); attacker.sendMessage( localisation.get(LocalisationEntry.MSG_ATTACK_CANCELLED_PVP_NOT_ENABLED)); } // Stop arrows bouncing back, possibly hitting you. if ((event.isCancelled()) && (event.getDamager() instanceof Projectile)) { ((Projectile) event.getDamager()).setBounce(false); } } }
/** * Sets name tag for players. If a player has PVP enabled, their name is prefixed by the value * specified in the config * * @param event event being handled */ @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void onNameTag(AsyncPlayerReceiveNameTagEvent event) { final Player playerSeen = event.getNamedPlayer(); final Object[] formatObjects = {playerSeen.getDisplayName()}; if (PVPConfigUtils.getPlayerStatus(playerSeen, playerSeen.getWorld(), plugin)) { try { event.setTag( String.format( ColorUtils.addColor( PrefixConfigUtils.getPlayerPrefix( playerSeen, playerSeen.getWorld(), plugin)) + "%s", formatObjects)); } catch (IllegalFormatException ex) { plugin.getLogger().log(Level.WARNING, "{0}Invalid prefix in config", ChatColor.RED); plugin.getLogger().log(Level.WARNING, "{0}Player tags not changed", ChatColor.RED); plugin .getLogger() .log(Level.WARNING, "{0}Edit or update your config to resolve", ChatColor.RED); } } }