Core/src/main/java/eu/univento/core/antihack/modules/Movement.java

91 lines
3.4 KiB
Java

/*
* Copyright (c) 2017 univento.eu - All rights reserved
* You are not allowed to use, distribute or modify this code
*/
package eu.univento.core.antihack.modules;
import eu.univento.core.api.events.MoveEventFilter;
import eu.univento.core.api.player.CustomPlayer;
import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityShootBowEvent;
import org.bukkit.event.entity.FoodLevelChangeEvent;
import org.bukkit.event.player.PlayerMoveEvent;
public class Movement implements Listener{
@EventHandler
public void onMove(PlayerMoveEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
if(p.getGameMode() == GameMode.CREATIVE) return;
if(p.getVehicle() != null) return;
if(p.getAllowFlight()) return;
double distance = e.getTo().distance(e.getFrom());
if(p.getFallDistance() == 0.0F && p.getLocation().getBlock().getRelative(BlockFace.DOWN).getType() == Material.AIR) {
if(distance > 0.6D && !p.isOnGround()) {
e.setCancelled(true);
p.teleport(e.getFrom());
p.sendMessage("Du hast Fly an");
}
}
if(distance > 0.2D && distance < 0.29D) {
if(p.getLocation().getBlock().getRelative(BlockFace.DOWN).getType() == Material.WATER) return;
if(p.getLocation().getBlock().getRelative(BlockFace.DOWN).isLiquid()) {
e.setCancelled(true);
p.teleport(e.getFrom());
p.sendMessage("Du hast Jesus an");
}
}
if(p.getFallDistance() == 0.0F && distance > 0.79D && p.isOnGround()) {
e.setCancelled(true);
p.setHealth(0.0D);
p.sendMessage("Du hast NoFall an");
}
if(e.getTo().getY() - e.getFrom().getY() == -0.125 && e.getTo().clone().subtract(0.0, 1.0, 0.0).getBlock().getType().equals(Material.AIR)) {
e.setCancelled(true);
p.teleport(e.getFrom());
p.sendMessage("Du hast Glide an");
}
}
@EventHandler
public void onShootBow(EntityShootBowEvent e) {
if(e.getEntity() instanceof Player) {
CustomPlayer p = CustomPlayer.getPlayer((Player) e.getEntity());
if(p.isSprinting()) {
e.setCancelled(true);
p.damage(2.0D);
p.setArrowsInBody(p.getArrowsInBody() + 50);
p.sendMessage("Du hast NoSlowDown an");
}
}
}
@EventHandler
public void onFoodChange(FoodLevelChangeEvent e) {
if(e.getEntity() instanceof Player) {
CustomPlayer p = CustomPlayer.getPlayer((Player) e.getEntity());
if(e.getFoodLevel() > p.getFoodLevel() && p.isSprinting()) {
e.setCancelled(true);
e.setFoodLevel(0);
p.sendMessage("Du hast NoSlowDown an");
}
}
}
@EventHandler
public void onMoveByBlock(MoveEventFilter.PlayerBlockMoveEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
double distance = e.getTo().getY() - e.getFrom().getY();
if(distance >= 0.9D) {
e.setCancelled(true);
p.teleport(e.getFrom());
p.sendMessage("Du hast Step an");
}
}
}