TeamVento/src/main/java/eu/univento/teamvento/listener/Events.java

452 lines
17 KiB
Java
Raw Normal View History

2018-01-15 12:27:22 +01:00
/*
* Copyright (c) 2018 univento.eu - All rights reserved
* You are not allowed to use, distribute or modify this code
*/
2016-04-30 07:38:37 +02:00
package eu.univento.teamvento.listener;
2016-07-09 13:19:56 +02:00
import eu.univento.core.api.events.MoveEventFilter;
2016-04-30 07:38:37 +02:00
import eu.univento.core.api.player.CustomPlayer;
2016-07-09 13:19:56 +02:00
import eu.univento.teamvento.TeamVento;
2017-06-04 13:47:12 +02:00
import eu.univento.teamvento.plot.Plot;
import eu.univento.teamvento.plot.PlotManager;
import eu.univento.teamvento.plot.Time;
import eu.univento.teamvento.plot.Weather;
2018-01-15 12:27:22 +01:00
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.WeatherType;
2016-07-09 13:19:56 +02:00
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.Sign;
2017-06-04 13:47:12 +02:00
import org.bukkit.entity.*;
2016-04-30 07:38:37 +02:00
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
2016-07-09 13:19:56 +02:00
import org.bukkit.event.block.*;
import org.bukkit.event.entity.*;
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
import org.bukkit.event.hanging.HangingPlaceEvent;
2018-01-15 12:27:22 +01:00
import org.bukkit.event.inventory.InventoryClickEvent;
2016-07-09 13:19:56 +02:00
import org.bukkit.event.player.*;
2016-04-30 07:38:37 +02:00
import org.bukkit.event.weather.WeatherChangeEvent;
2016-07-09 13:19:56 +02:00
import org.bukkit.event.world.StructureGrowEvent;
2017-06-04 13:47:12 +02:00
import org.bukkit.inventory.ItemStack;
2018-01-15 12:27:22 +01:00
import org.bukkit.inventory.PlayerInventory;
2016-07-09 13:19:56 +02:00
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
2017-06-04 13:47:12 +02:00
import org.bukkit.scheduler.BukkitRunnable;
2016-07-09 13:19:56 +02:00
import org.bukkit.scheduler.BukkitTask;
2017-06-04 13:47:12 +02:00
import org.bukkit.util.EulerAngle;
import org.bukkit.util.Vector;
2016-07-09 13:19:56 +02:00
import java.util.HashMap;
import java.util.Random;
2017-06-04 13:47:12 +02:00
import java.util.Set;
2016-07-09 13:19:56 +02:00
import java.util.UUID;
2016-04-30 07:38:37 +02:00
/**
* @author joethei
2018-01-15 12:27:22 +01:00
* @version 1.0
2016-04-30 07:38:37 +02:00
*/
2017-06-04 13:47:12 +02:00
public class Events implements Listener {
2016-04-30 07:38:37 +02:00
2017-06-04 13:47:12 +02:00
public static int redstone = 0;
private Random random = new Random();
2016-07-09 13:19:56 +02:00
2016-08-03 00:28:53 +02:00
private final HashMap<CustomPlayer, BukkitTask> lightningTasks = new HashMap<>();
2016-07-09 13:19:56 +02:00
2016-04-30 07:38:37 +02:00
@EventHandler
public void onWeatherChange(WeatherChangeEvent e) {
e.setCancelled(true);
}
@EventHandler
public void onEntityExplode(EntityExplodeEvent e) {
2016-07-09 13:19:56 +02:00
e.setCancelled(true);
2016-04-30 07:38:37 +02:00
}
@EventHandler
public void onBlockBreak(BlockBreakEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
2017-06-04 13:47:12 +02:00
if (!PlotManager.isAllowedToBuild(p, e.getBlock().getLocation())) e.setCancelled(true);
2016-07-09 13:19:56 +02:00
}
@EventHandler
public void onBlockPlace(BlockPlaceEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
2017-06-04 13:47:12 +02:00
if (!PlotManager.isAllowedToBuild(p, e.getBlock().getLocation())) e.setCancelled(true);
2016-07-09 13:19:56 +02:00
}
@EventHandler
public void onHangingPlace(HangingPlaceEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
2017-06-04 13:47:12 +02:00
if (!PlotManager.isAllowedToBuild(p, e.getEntity().getLocation())) e.setCancelled(true);
2016-07-09 13:19:56 +02:00
}
@EventHandler
public void onHangingBreakByEntity(HangingBreakByEntityEvent e) {
2017-06-04 13:47:12 +02:00
if (e.getRemover() instanceof Projectile) {
if (((Projectile) e.getRemover()).getShooter() instanceof Player) {
2016-11-24 20:00:03 +01:00
CustomPlayer p = CustomPlayer.getPlayer((Player) ((Projectile) e.getRemover()).getShooter());
2017-06-04 13:47:12 +02:00
if (!PlotManager.isAllowedToBuild(p, e.getEntity().getLocation())) e.setCancelled(true);
} else {
2016-11-24 20:00:03 +01:00
e.setCancelled(true);
}
2016-07-09 13:19:56 +02:00
}
2017-06-04 13:47:12 +02:00
if (e.getRemover() instanceof Player) {
2016-07-09 13:19:56 +02:00
CustomPlayer p = CustomPlayer.getPlayer((Player) e.getRemover());
2017-06-04 13:47:12 +02:00
if (!PlotManager.isAllowedToBuild(p, e.getEntity().getLocation())) e.setCancelled(true);
} else {
2016-07-09 13:19:56 +02:00
e.setCancelled(true);
}
}
@EventHandler
public void onEntityDamageByEntity(EntityDamageByEntityEvent e) {
if (e.getDamager() instanceof Player) {
CustomPlayer p = CustomPlayer.getPlayer((Player) e.getDamager());
2017-06-04 13:47:12 +02:00
if (!PlotManager.isAllowedToBuild(p, e.getEntity().getLocation())) e.setCancelled(true);
2016-07-09 13:19:56 +02:00
}
2017-06-04 13:47:12 +02:00
if (e.getDamager() instanceof Projectile) {
if (((Projectile) e.getDamager()).getShooter() instanceof Player) {
2016-11-24 20:00:03 +01:00
CustomPlayer p = CustomPlayer.getPlayer((Player) ((Projectile) e.getDamager()).getShooter());
2017-06-04 13:47:12 +02:00
if (!PlotManager.isAllowedToBuild(p, e.getEntity().getLocation())) e.setCancelled(true);
} else {
2016-11-24 20:00:03 +01:00
e.setCancelled(true);
}
2016-07-09 13:19:56 +02:00
}
}
@EventHandler
public void onBurn(BlockBurnEvent e) {
e.setCancelled(true);
}
@EventHandler
public void onBlockIgnite(BlockIgniteEvent e) {
if (e.getCause() != BlockIgniteEvent.IgniteCause.FLINT_AND_STEEL && e.getCause() != BlockIgniteEvent.IgniteCause.FIREBALL) {
2016-07-09 13:19:56 +02:00
e.setCancelled(true);
return;
}
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
2017-06-04 13:47:12 +02:00
if (!PlotManager.isAllowedToBuild(p, e.getBlock().getLocation())) e.setCancelled(true);
2016-07-09 13:19:56 +02:00
}
@EventHandler
public void onLeaveDecay(LeavesDecayEvent e) {
e.setCancelled(true);
}
@EventHandler
public void onBlockRedstone(BlockRedstoneEvent e) {
2017-06-04 13:47:12 +02:00
if (e.getBlock().getWorld().getName().equalsIgnoreCase("world")) return;
2016-07-09 13:19:56 +02:00
redstone++;
if (redstone > 100) {
e.getBlock().setType(Material.SIGN_POST);
Sign sign = (Sign) e.getBlock().getState();
sign.setLine(0, "Redstone");
sign.setLine(1, "Clocks");
sign.setLine(2, "sind");
sign.setLine(3, "verboten");
sign.update();
redstone = 0;
}
}
@EventHandler
public void onCreatureSpawn(CreatureSpawnEvent e) {
2017-06-04 13:47:12 +02:00
//if(e.getSpawnReason() != CreatureSpawnEvent.SpawnReason.CUSTOM) e.setCancelled(true);
//if(e.getSpawnReason() != CreatureSpawnEvent.SpawnReason.SPAWNER_EGG) e.setCancelled(true);
e.getEntity().setAI(false);
e.getEntity().setSilent(true);
if (e.getEntity().getWorld().getName().equalsIgnoreCase("world")) return;
Plot plot = PlotManager.getPlotByLocation(e.getEntity().getLocation());
assert plot != null;
2016-07-09 13:19:56 +02:00
if (e.getEntity().getType() != EntityType.ITEM_FRAME && e.getEntity().getType() != EntityType.ARMOR_STAND && e.getEntity().getType() != EntityType.PAINTING) {
e.setCancelled(true);
2016-04-30 07:38:37 +02:00
}
2016-07-09 13:19:56 +02:00
}
2017-06-04 13:47:12 +02:00
@EventHandler
public void onEntityDeath(EntityDeathEvent e) {
e.getDrops().clear();
e.setDroppedExp(0);
}
2016-07-09 13:19:56 +02:00
@EventHandler
public void onBlockFromTo(BlockFromToEvent e) {
Material type = e.getBlock().getType();
if (type == Material.WATER || type == Material.STATIONARY_WATER || type == Material.LAVA || type == Material.STATIONARY_LAVA)
2016-04-30 07:38:37 +02:00
e.setCancelled(true);
2016-07-09 13:19:56 +02:00
}
@EventHandler
2017-06-04 13:47:12 +02:00
public void onPistonExtend(BlockPistonExtendEvent e) {
if (e.getBlock().getWorld().getName().equalsIgnoreCase("world")) return;
e.setCancelled(true);
}
@EventHandler
public void onPistonRetract(BlockPistonRetractEvent e) {
if (e.getBlock().getWorld().getName().equalsIgnoreCase("world")) return;
e.setCancelled(true);
}
2016-07-09 13:19:56 +02:00
@EventHandler
public void onInteract(PlayerInteractEvent e) {
2016-08-03 00:28:53 +02:00
if (e.getAction() == Action.PHYSICAL && e.getClickedBlock().getType() == Material.SOIL)
e.setCancelled(true);
2016-07-09 13:19:56 +02:00
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
if (e.getAction() == Action.LEFT_CLICK_BLOCK) {
Block block = e.getClickedBlock().getRelative(BlockFace.UP);
if (!e.getPlayer().getWorld().getName().equalsIgnoreCase("plots")) return;
if (block.getType() == Material.FIRE) {
2017-06-04 13:47:12 +02:00
if (!PlotManager.isAllowedToBuild(p, e.getClickedBlock().getLocation())) e.setCancelled(true);
2016-07-09 13:19:56 +02:00
}
}
2017-06-04 13:47:12 +02:00
if (e.getAction() == Action.RIGHT_CLICK_BLOCK) {
if (!PlotManager.isAllowedToBuild(p, e.getClickedBlock().getLocation())) e.setCancelled(true);
2016-04-30 07:38:37 +02:00
}
}
@EventHandler
2016-07-09 13:19:56 +02:00
public void onPlayerInteractEntity(PlayerInteractEntityEvent e) {
2016-04-30 07:38:37 +02:00
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
2017-06-04 13:47:12 +02:00
if (e.getRightClicked().getType() == EntityType.ITEM_FRAME) {
if (!PlotManager.isAllowedToBuild(p, e.getRightClicked().getLocation())) e.setCancelled(true);
2016-07-09 13:19:56 +02:00
}
}
@EventHandler
public void onArmorStandManipulate(PlayerArmorStandManipulateEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
2017-06-04 13:47:12 +02:00
if (!PlotManager.isAllowedToBuild(p, e.getRightClicked().getLocation())) e.setCancelled(true);
2016-07-09 13:19:56 +02:00
}
2017-06-04 13:47:12 +02:00
2016-07-09 13:19:56 +02:00
@EventHandler
public void onDrop(PlayerDropItemEvent e) {
e.setCancelled(true);
2016-07-09 13:19:56 +02:00
}
@EventHandler
public void onPickup(PlayerPickupItemEvent e) {
e.setCancelled(true);
2016-07-09 13:19:56 +02:00
}
@EventHandler
public void onArrowPickup(PlayerPickupArrowEvent e) {
e.setCancelled(true);
2016-07-09 13:19:56 +02:00
}
@EventHandler
public void onInventoryClick(InventoryClickEvent e) {
2017-06-04 13:47:12 +02:00
if (e.getClickedInventory() instanceof PlayerInventory) {
if (e.getSlot() == 8 || e.getHotbarButton() == 8) {
e.setCancelled(true);
}
}
2016-07-09 13:19:56 +02:00
}
2016-08-03 00:28:53 +02:00
@EventHandler
public void onSwapHands(PlayerSwapHandItemsEvent e) {
2017-06-04 13:47:12 +02:00
if (e.getPlayer().getInventory().getHeldItemSlot() == 8) {
e.setCancelled(true);
2016-08-03 00:28:53 +02:00
}
}
2016-07-09 13:19:56 +02:00
@EventHandler
public void onConsume(PlayerItemConsumeEvent e) {
e.setCancelled(true);
}
@EventHandler
public void onBucketEmpty(PlayerBucketEmptyEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
2017-06-04 13:47:12 +02:00
if (!PlotManager.isAllowedToBuild(p, e.getBlockClicked().getLocation())) e.setCancelled(true);
2016-07-09 13:19:56 +02:00
}
@EventHandler
public void onBucketFill(PlayerBucketFillEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
2017-06-04 13:47:12 +02:00
if (!PlotManager.isAllowedToBuild(p, e.getBlockClicked().getLocation())) e.setCancelled(true);
2016-07-09 13:19:56 +02:00
}
@EventHandler
public void onBlockMove(MoveEventFilter.PlayerBlockMoveEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
//plot enter
2018-01-15 12:27:22 +01:00
if (!PlotManager.isPlot(e.getFrom()) && PlotManager.isPlot(e.getTo())) {
2016-07-09 13:19:56 +02:00
Plot plot = PlotManager.getPlotByLocation(e.getTo());
assert plot != null;
p.setPlayerTime(plot.getTime().getValue(), false);
p.setPlayerWeather(plot.getWeatherType());
2017-06-04 13:47:12 +02:00
if (!plot.isOwner(p) && !plot.getOwner().equals(UUID.fromString("c35f6ece-c430-4fc0-b61e-18b55be19ee3")))
2016-07-09 13:19:56 +02:00
p.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 999999, 2));
2017-06-04 13:47:12 +02:00
if (plot.getWeather() == Weather.THUNDER) {
2016-07-09 13:19:56 +02:00
BukkitTask task = Bukkit.getScheduler().runTaskTimerAsynchronously(TeamVento.getInstance(), () -> {
Random random = new Random();
int r = random.nextInt(100);
2017-06-04 13:47:12 +02:00
if (r < 30) {
2016-07-09 13:19:56 +02:00
p.strikeLightning(plot.getArea().getRandomLocation());
}
}, 2L, 50L);
lightningTasks.put(p, task);
2016-04-30 07:38:37 +02:00
}
}
2016-07-09 13:19:56 +02:00
//plot leave
2018-01-15 12:27:22 +01:00
if (PlotManager.isPlot(e.getFrom()) && !PlotManager.isPlot(e.getTo())) {
2016-07-09 13:19:56 +02:00
p.setPlayerTime(Time.DAY.getValue(), false);
p.setPlayerWeather(WeatherType.CLEAR);
p.clearPotionEffects();
2017-06-04 13:47:12 +02:00
if (lightningTasks.containsKey(p))
2016-07-09 13:19:56 +02:00
lightningTasks.get(p).cancel();
2017-06-04 13:47:12 +02:00
lightningTasks.remove(p);
2016-07-09 13:19:56 +02:00
}
}
@EventHandler
public void onTeleport(PlayerTeleportEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
//plot enter
2018-01-15 12:27:22 +01:00
if (!PlotManager.isPlot(e.getFrom()) && PlotManager.isPlot(e.getTo())) {
Plot plot = PlotManager.getPlotByLocation(e.getTo());
assert plot != null;
p.setPlayerTime(plot.getTime().getValue(), false);
p.setPlayerWeather(plot.getWeatherType());
2017-06-04 13:47:12 +02:00
if (!plot.isOwner(p) && !plot.getOwner().equals(UUID.fromString("c35f6ece-c430-4fc0-b61e-18b55be19ee3")))
p.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 999999, 2));
2017-06-04 13:47:12 +02:00
if (plot.getWeather() == Weather.THUNDER) {
BukkitTask task = Bukkit.getScheduler().runTaskTimerAsynchronously(TeamVento.getInstance(), () -> {
Random random = new Random();
int r = random.nextInt(100);
2017-06-04 13:47:12 +02:00
if (r < 30) {
p.strikeLightning(plot.getArea().getRandomLocation());
}
}, 2L, 50L);
lightningTasks.put(p, task);
}
}
//plot leave
2018-01-15 12:27:22 +01:00
if (PlotManager.isPlot(e.getFrom()) && !PlotManager.isPlot(e.getTo())) {
p.setPlayerTime(Time.DAY.getValue(), false);
p.setPlayerWeather(WeatherType.CLEAR);
p.clearPotionEffects();
2017-06-04 13:47:12 +02:00
if (lightningTasks.containsKey(p))
lightningTasks.get(p).cancel();
lightningTasks.remove(p);
}
}
2016-07-09 13:19:56 +02:00
@EventHandler
public void onPotionSplash(PotionSplashEvent e) {
e.setCancelled(true);
}
@EventHandler
public void onBlockGrow(BlockGrowEvent e) {
2017-06-04 13:47:12 +02:00
if (e.getBlock().getType() != Material.CROPS)
2016-07-09 13:19:56 +02:00
e.setCancelled(true);
}
@EventHandler
public void onStructureGrow(StructureGrowEvent e) {
e.setCancelled(true);
}
@EventHandler
public void onMultiPlace(BlockMultiPlaceEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
2017-06-04 13:47:12 +02:00
if (!PlotManager.isAllowedToBuild(p, e.getBlockPlaced().getLocation())) e.setCancelled(true);
2016-07-09 13:19:56 +02:00
}
@EventHandler
public void onEntityDamage(EntityDamageEvent e) {
if (!e.getEntity().getWorld().getName().equalsIgnoreCase("plots")) return;
e.setCancelled(true);
}
@EventHandler
public void onPlayerLeashEntity(PlayerLeashEntityEvent e) {
e.setCancelled(true);
}
@EventHandler
public void onEntityShootBow(EntityShootBowEvent e) {
2017-06-04 13:47:12 +02:00
if (e.getEntityType() != EntityType.PLAYER) return;
2016-07-09 13:19:56 +02:00
CustomPlayer p = CustomPlayer.getPlayer(e.getEntity().getName());
2018-01-15 12:27:22 +01:00
assert p != null;
2017-06-04 13:47:12 +02:00
if (p.getUniqueId().toString().equals("682ebd10-3661-49ec-ba4d-4f24b761b1a7")) {
Projectile projectile = (Projectile) e.getProjectile();
projectile.setCustomNameVisible(true);
projectile.setCustomName("§cNope " + p.getDisplayName() + ", Nope");
2017-06-04 13:47:12 +02:00
projectile.setGravity(false);
projectile.setGlowing(true);
projectile.setBounce(false);
Bukkit.getScheduler().scheduleSyncDelayedTask(TeamVento.getInstance(), projectile::remove,3 * 20L);
}
if(p.getUniqueId().toString().equals("c35f6ece-c430-4fc0-b61e-18b55be19ee3")) {
e.setCancelled(true);
for(int i = 0; i < 100; i++) {
p.getWorld().spawnArrow(p.getEyeLocation(), new Vector(poop(), (random.nextInt(1200) - 200) / 1000, poop()), 1.2F, 12);
}
}
}
2017-06-04 13:47:12 +02:00
private double poop() {
return random.nextBoolean() ? random.nextDouble() : -random.nextDouble();
}
@EventHandler
public void onProjectileHit(ProjectileHitEvent e) {
2017-06-04 13:47:12 +02:00
if (e.getEntity().getPassenger() != null) {
e.getEntity().getPassenger().remove();
e.getEntity().remove();
2016-07-09 13:19:56 +02:00
}
}
@EventHandler
public void onProjectileLaunch(ProjectileLaunchEvent e) {
2017-06-04 13:47:12 +02:00
if (e.getEntityType() == EntityType.FISHING_HOOK || e.getEntityType() == EntityType.SNOWBALL) {
2016-07-09 13:19:56 +02:00
if (e.getEntity().getShooter() instanceof Player) {
CustomPlayer p = CustomPlayer.getPlayer((Player) e.getEntity().getShooter());
if (p.getUniqueId().toString().equals("682ebd10-3661-49ec-ba4d-4f24b761b1a7")) {
e.setCancelled(true);
p.sendMessage("§cNein " + p.getDisplayName());
}
}
2016-04-30 07:38:37 +02:00
}
}
2017-06-04 13:47:12 +02:00
@EventHandler
public void onPlayerInteract(PlayerInteractEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
if(e.getItem() == null || e.getItem().getType() != Material.STICK) return;
if(p.getLocation().clone().add(0, -1, 0).getBlock().getType() != Material.GRASS) return;
final Block target = p.getTargetBlock((Set<Material>) null, 50);
if(target == null) return;
new BukkitRunnable() {
Location loc = p.getLocation();
int i = 0;
@Override
public void run() {
final ArmorStand armorStand = (ArmorStand) loc.getWorld().spawnEntity(loc.clone().add(random.nextDouble() * 2 -1, -1, random.nextDouble() * 2 -1), EntityType.ARMOR_STAND);
armorStand.setVisible(true);
armorStand.setGravity(false);
armorStand.setArms(true);
armorStand.setHeadPose(new EulerAngle(Math.toRadians(random.nextInt(360)), Math.toRadians(random.nextInt(360)), Math.toRadians(random.nextInt(360))));
armorStand.setHelmet(new ItemStack(Material.GRASS));
Bukkit.getScheduler().runTaskLater(TeamVento.getInstance(), armorStand::remove, 40L);
i++;
if(i > 50) {
loc.getWorld().createExplosion(loc, 3);
for(Entity entity : loc.getWorld().getNearbyEntities(loc, 8, 8, 8)) {
if(entity instanceof LivingEntity) entity.setVelocity(new Vector(0, 2, 0));
}
cancel();
}
}
};
}
2016-04-30 07:38:37 +02:00
}