/** * We listen to ProjectileLaunch events to prevent players from launching projectiles too quickly. * * @param event the event */ @EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST) public void onProjectileLaunch(final ProjectileLaunchEvent event) { /* * ____ _ _ _ _ _ _ * | _ \ _ __ ___ (_) ___ ___| |_(_) | ___ | | __ _ _ _ _ __ ___| |__ * | |_) | '__/ _ \| |/ _ \/ __| __| | |/ _ \ | | / _` | | | | '_ \ / __| '_ \ * | __/| | | (_) | | __/ (__| |_| | | __/ | |__| (_| | |_| | | | | (__| | | | * |_| |_| \___// |\___|\___|\__|_|_|\___| |_____\__,_|\__,_|_| |_|\___|_| |_| * |__/ */ // The shooter needs to be a player. if (!(event.getEntity().getShooter() instanceof Player)) return; // And the projectile must be one the following: switch (event.getEntityType()) { case ENDER_PEARL: break; case ENDER_SIGNAL: break; case EGG: break; case SNOWBALL: break; case THROWN_EXP_BOTTLE: break; case SPLASH_POTION: break; default: return; } final Player player = (Player) event.getEntity().getShooter(); // Do the actual check... if (speed.isEnabled(player)) { final long now = System.currentTimeMillis(); final Location loc = player.getLocation(); if (Combined.checkYawRate(player, loc.getYaw(), now, loc.getWorld().getName())) event.setCancelled(true); if (speed.check(player)) // If the check was positive, cancel the event. event.setCancelled(true); else if (Improbable.check(player, 1f, now)) // COmbined fighting speed. event.setCancelled(true); } }
/** * We listener to PlayerInteract events to prevent players from spamming the server with monster * eggs. * * @param event the event */ @EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST) public void onPlayerInteract(final PlayerInteractEvent event) { /* * ____ _ ___ _ _ * | _ \| | __ _ _ _ ___ _ __ |_ _|_ __ | |_ ___ _ __ __ _ ___| |_ * | |_) | |/ _` | | | |/ _ \ '__| | || '_ \| __/ _ \ '__/ _` |/ __| __| * | __/| | (_| | |_| | __/ | | || | | | || __/ | | (_| | (__| |_ * |_| |_|\__,_|\__, |\___|_| |___|_| |_|\__\___|_| \__,_|\___|\__| * |___/ */ // We are only interested by monster eggs. if (event.getAction() != Action.RIGHT_CLICK_BLOCK || event.getPlayer().getItemInHand() == null || event.getPlayer().getItemInHand().getType() != Material.MONSTER_EGG) return; final Player player = event.getPlayer(); // Do the actual check... if (speed.isEnabled(player) && speed.check(player)) // If the check was positive, cancel the event. event.setCancelled(true); }