Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Inside of the DamageEvent
- /*
- * Head Movement
- */
- // Check if the detection is enabled in this world
- HeadMovement:
- if (getOwner().inWorld(world, DetectionType.HEAD_MOVEMENT)) {
- double rotation = attacker.getEyeLocation().getYaw();
- double pitch = attacker.getEyeLocation().getPitch();
- double differenceRotation = Math.abs(stats.getRotation() - rotation);
- double differencePitch = stats.getPitch() - pitch;
- // just for debug messages
- String stringRot = differenceRotation + "";
- if (stringRot.length() > 5) {
- stringRot = stringRot.substring(0, 6);
- }
- String stringPitch = differencePitch + "";
- if (stringPitch.length() > 5) {
- stringPitch = stringPitch.substring(0, 6);
- }
- // Check if the difference between last two damages is <= 650
- if (difference <= 650) {
- // Check if the head is moving up or down too quickly
- if (differencePitch >= 13) {
- if (difference <= 501) {
- stats.setHeadDangerLevel(stats.getHeadDangerLevel() + 50);
- }
- stats.setHeadDangerLevel(stats.getHeadDangerLevel() + 101);
- } else if (differencePitch >= 10) {
- if (difference <= 501) {
- stats.setHeadDangerLevel(stats.getHeadDangerLevel() + 45);
- }
- stats.setHeadDangerLevel(stats.getHeadDangerLevel() + 54);
- }
- // Check if the attacked mob has moved since the last time (if the player hits the same mob again)
- // to prevent false positives with mobs that are stuck somewhere
- if (lastMob != null && lastMob.equals(mob)) {
- double distance = mob.getLocation().distance(lastMob.getLocation());
- if (distance <= 0.05 && attacker.getLocation().distance(mob.getLocation()) <= 1.0) {
- stats.setHeadDangerLevel(stats.getHeadDangerLevel() - 27);
- // debug message
- getOwner().castToAdmins(stats, "[combat] " + ChatColor.GREEN + "(head#) enemy has not moved enough " + stringRot + ", " + stringPitch + ", DL " + ChatColor.YELLOW + stats.getHeadDangerLevel());
- break HeadMovement;
- }
- }
- // Check if the players head is snapping horizontally
- if (differenceRotation > 116 && differenceRotation < 270) {
- stats.setHeadDangerLevel(stats.getHeadDangerLevel() + 109);
- if (difference <= 501) {
- stats.setHeadDangerLevel(stats.getHeadDangerLevel() + 59);
- }
- if (differenceRotation > 150) {
- stats.setHeadDangerLevel(stats.getHeadDangerLevel() + 59);
- }
- } else {
- stats.setHeadDangerLevel(stats.getHeadDangerLevel() - 70);
- // debug
- getOwner().castToAdmins(stats, "[combat] " + ChatColor.GREEN + "(head#) " + stringRot + ", " + stringPitch + ", DL " + ChatColor.YELLOW + stats.getHeadDangerLevel());
- }
- // debug
- if (stats.getHeadDangerLevel() >= 150) {
- getOwner().castToAdmins(stats, "[combat] (head!) " + stringRot + ", " + stringPitch + ", DL " + ChatColor.YELLOW + stats.getHeadDangerLevel());
- }
- // get value from config
- int maxLevel = (int) NoCheat.getVal("head_level").getValue();
- // prevent dealing damage if the danger level is too high
- if (stats.getHeadDangerLevel() > maxLevel) {
- getOwner().alert(attacker, attacker.getName() + ": Weird head movement", null, AlertPriority.LOW, stats.getCombatDangerLevel(), DetectionType.HEAD_MOVEMENT);
- if (stats.shouldBlock()) {
- stats.addCombatDangerLevel(19);
- event.setCancelled(true);
- if (stats.getCombatDangerLevel() > 350) {
- // prevent the player from dealing damage for 1000 milliseconds
- stats.setBlockDamage(1000);
- }
- if (stats.getCombatDangerLevel() > 1500) {
- addBanDangerLevel(stats, 10, 2);
- }
- }
- stats.setHeadDangerLevel(maxLevel - 100);
- }
- } else {
- stats.setHeadDangerLevel(stats.getHeadDangerLevel() - 40);
- if (difference > 7000) {
- stats.setHeadDangerLevel(stats.getHeadDangerLevel() - 40);
- }
- getOwner().castToAdmins(stats, "[combat] " + ChatColor.GREEN + "(head#) " + stringRot + ", " + stringPitch + ", DL " + ChatColor.YELLOW + stats.getHeadDangerLevel());
- }
- stats.setRotation(rotation);
- stats.setPitch(pitch);
- }
Advertisement
Add Comment
Please, Sign In to add comment