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

487 lines
20 KiB
Java

package eu.univento.teamvento.listener;
import eu.univento.commons.player.Rank;
import eu.univento.core.Core;
import eu.univento.core.api.Config;
import eu.univento.core.api.events.MoveEventFilter;
import eu.univento.core.api.player.CustomPlayer;
import eu.univento.teamvento.TeamVento;
import eu.univento.teamvento.utils.Plot;
import eu.univento.teamvento.utils.PlotManager;
import eu.univento.teamvento.utils.Time;
import eu.univento.teamvento.utils.Weather;
import org.bukkit.*;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.Sign;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.*;
import org.bukkit.event.entity.*;
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
import org.bukkit.event.hanging.HangingPlaceEvent;
import org.bukkit.event.inventory.InventoryAction;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryDragEvent;
import org.bukkit.event.inventory.InventoryMoveItemEvent;
import org.bukkit.event.player.*;
import org.bukkit.event.weather.WeatherChangeEvent;
import org.bukkit.event.world.StructureGrowEvent;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.scheduler.BukkitTask;
import java.util.HashMap;
import java.util.Random;
import java.util.UUID;
/**
* @author joethei
* @version 0.3
*/
public class Events implements Listener{
public static int redstone;
private final HashMap<CustomPlayer, BukkitTask> lightningTasks = new HashMap<>();
@EventHandler
public void onWeatherChange(WeatherChangeEvent e) {
e.setCancelled(true);
}
@EventHandler
public void onEntityExplode(EntityExplodeEvent e) {
e.setCancelled(true);
}
@EventHandler
public void onBlockBreak(BlockBreakEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
if(PlotManager.getPlotByLocation(e.getBlock().getLocation()) == null) {
e.setCancelled(true);
return;
}
Plot plot = PlotManager.getPlotByLocation(e.getBlock().getLocation());
assert plot != null;
if(!plot.isOwner(p)) e.setCancelled(true);
if(!e.getBlock().getWorld().getName().equals("plots")) e.setCancelled(false);
if(p.getDatabasePlayer().isAllowed(Rank.SrDeveloper)) e.setCancelled(false);
/*
if (p.getDatabasePlayer().isAllowed(Rank.SrDeveloper)) return;
if (!e.getBlock().getWorld().getName().equalsIgnoreCase("plots")) return;
if (PlotManager.getPlotByLocation(e.getBlock().getLocation()) == null) {
e.setCancelled(true);
return;
}
if (!PlotManager.getPlotByLocation(e.getBlock().getLocation()).isOwner(p)) e.setCancelled(true);
*/
}
@EventHandler
public void onBlockPlace(BlockPlaceEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
if(PlotManager.getPlotByLocation(e.getBlockPlaced().getLocation()) == null) {
e.setCancelled(true);
return;
}
Plot plot = PlotManager.getPlotByLocation(e.getBlockPlaced().getLocation());
assert plot != null;
if(!plot.isOwner(p)) e.setCancelled(true);
if(!e.getBlockPlaced().getWorld().getName().equals("plots")) e.setCancelled(false);
if(p.getDatabasePlayer().isAllowed(Rank.SrDeveloper)) e.setCancelled(false);
/*
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
if (p.getDatabasePlayer().isAllowed(Ranks.SrDeveloper)) return;
if (!e.getBlock().getWorld().getName().equalsIgnoreCase("plots")) return;
if (PlotManager.getPlotByLocation(e.getBlock().getLocation()) == null) {
e.setCancelled(true);
return;
}
if (!PlotManager.getPlotByLocation(e.getBlock().getLocation()).isOwner(p)) e.setCancelled(true);
*/
}
@EventHandler
public void onHangingPlace(HangingPlaceEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
if (!e.getBlock().getWorld().getName().equalsIgnoreCase("plots")) return;
if (p.getDatabasePlayer().isAllowed(Rank.SrDeveloper)) return;
if (PlotManager.getPlotByLocation(e.getBlock().getLocation()) == null) e.setCancelled(true);
Plot plot = PlotManager.getPlotByLocation(e.getBlock().getLocation());
assert plot != null;
if(!plot.isOwner(p)) e.setCancelled(true);
}
@EventHandler
public void onHangingBreakByEntity(HangingBreakByEntityEvent e) {
if(e.getRemover() instanceof Projectile) {
CustomPlayer p = CustomPlayer.getPlayer((Player) ((Projectile) e.getRemover()).getShooter());
if (!e.getEntity().getWorld().getName().equalsIgnoreCase("plots")) return;
if (p.getDatabasePlayer().isAllowed(Rank.SrDeveloper)) return;
if (PlotManager.getPlotByLocation(e.getEntity().getLocation()) == null) e.setCancelled(true);
Plot plot = PlotManager.getPlotByLocation(e.getEntity().getLocation());
assert plot != null;
if(!plot.isOwner(p)) e.setCancelled(true);
}
if(e.getRemover() instanceof Player) {
CustomPlayer p = CustomPlayer.getPlayer((Player) e.getRemover());
if (!e.getEntity().getWorld().getName().equalsIgnoreCase("plots")) return;
if (p.getDatabasePlayer().isAllowed(Rank.SrDeveloper)) return;
if (PlotManager.getPlotByLocation(e.getEntity().getLocation()) == null) e.setCancelled(true);
Plot plot = PlotManager.getPlotByLocation(e.getEntity().getLocation());
assert plot != null;
if(!plot.isOwner(p)) e.setCancelled(true);
}else{
e.setCancelled(true);
}
}
@EventHandler
public void onEntityDamageByEntity(EntityDamageByEntityEvent e) {
if (e.getDamager() instanceof Player) {
CustomPlayer p = CustomPlayer.getPlayer((Player) e.getDamager());
if (!e.getEntity().getWorld().getName().equalsIgnoreCase("plots")) return;
if (p.getDatabasePlayer().isAllowed(Rank.SrDeveloper)) return;
if (PlotManager.getPlotByLocation(e.getDamager().getLocation()) == null) {
e.setCancelled(true);
return;
}
Plot plot = PlotManager.getPlotByLocation(e.getEntity().getLocation());
assert plot != null;
if (!plot.isOwner(p)) e.setCancelled(true);
}
if(e.getDamager() instanceof Projectile) {
CustomPlayer p = CustomPlayer.getPlayer((Player) ((Projectile) e.getDamager()).getShooter());
if (!e.getEntity().getWorld().getName().equalsIgnoreCase("plots")) return;
if(p.getDatabasePlayer().isAllowed(Rank.SrDeveloper)) return;
if (PlotManager.getPlotByLocation(e.getDamager().getLocation()) == null) {
e.setCancelled(true);
return;
}
Plot plot = PlotManager.getPlotByLocation(e.getEntity().getLocation());
assert plot != null;
if (!plot.isOwner(p)) e.setCancelled(true);
}
}
@EventHandler
public void onBurn(BlockBurnEvent e) {
e.setCancelled(true);
}
@EventHandler
public void onBlockIgnite(BlockIgniteEvent e) {
if (e.getCause() != BlockIgniteEvent.IgniteCause.FLINT_AND_STEEL) {
e.setCancelled(true);
return;
}
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
if (!e.getBlock().getWorld().getName().equalsIgnoreCase("plots")) return;
if (p.getDatabasePlayer().isAllowed(Rank.SrDeveloper)) return;
if (PlotManager.getPlotByLocation(e.getBlock().getLocation()) == null) e.setCancelled(true);
Plot plot = PlotManager.getPlotByLocation(e.getBlock().getLocation());
assert plot != null;
if (!plot.isOwner(p)) e.setCancelled(true);
}
@EventHandler
public void onLeaveDecay(LeavesDecayEvent e) {
e.setCancelled(true);
}
@EventHandler
public void onBlockRedstone(BlockRedstoneEvent e) {
if(e.getBlock().getWorld().getName().equalsIgnoreCase("EinfachAFK")) return;
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) {
if(e.getSpawnReason() == CreatureSpawnEvent.SpawnReason.CUSTOM) return;
if(PlotManager.getPlotByLocation(e.getEntity().getLocation()) == null) {
e.setCancelled(true);
return;
}
Plot plot = PlotManager.getPlotByLocation(e.getEntity().getLocation());
assert plot != null;
if (e.getEntity().getType() != EntityType.ITEM_FRAME && e.getEntity().getType() != EntityType.ARMOR_STAND && e.getEntity().getType() != EntityType.PAINTING) {
e.setCancelled(true);
}
}
@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)
e.setCancelled(true);
}
@EventHandler
public void onInteract(PlayerInteractEvent e) {
if (e.getAction() == Action.PHYSICAL && e.getClickedBlock().getType() == Material.SOIL)
e.setCancelled(true);
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) {
if(p.getDatabasePlayer().isAllowed(Rank.SrDeveloper)) return;
if(PlotManager.getPlotByLocation(block.getLocation()) == null) e.setCancelled(true);
Plot plot = PlotManager.getPlotByLocation(e.getClickedBlock().getLocation());
assert plot != null;
if (!plot.isOwner(p)) e.setCancelled(true);
}
}
if(e.getAction() == Action.RIGHT_CLICK_BLOCK) {
Plot plot = PlotManager.getPlotByLocation(p.getLocation());
if(plot == null) return;
if(!plot.isOwner(p)) e.setCancelled(true);
}
}
@EventHandler
public void onPlayerInteractEntity(PlayerInteractEntityEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
if (!e.getRightClicked().getWorld().getName().equalsIgnoreCase("plots"))
return;
if(e.getRightClicked().getType() == EntityType.ITEM_FRAME) {
if(p.getDatabasePlayer().isAllowed(Rank.SrDeveloper)) return;
if(PlotManager.getPlotByLocation(e.getRightClicked().getLocation()) == null) e.setCancelled(true);
Plot plot = PlotManager.getPlotByLocation(e.getRightClicked().getLocation());
assert plot != null;
if (!plot.isOwner(p)) e.setCancelled(true);
}
}
@EventHandler
public void onArmorStandManipulate(PlayerArmorStandManipulateEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
if (!e.getRightClicked().getWorld().getName().equalsIgnoreCase("plots")) return;
if(p.getDatabasePlayer().isAllowed(Rank.SrDeveloper)) return;
if(PlotManager.getPlotByLocation(e.getRightClicked().getLocation()) == null) e.setCancelled(true);
Plot plot = PlotManager.getPlotByLocation(e.getRightClicked().getLocation());
assert plot != null;
if (!plot.isOwner(p)) e.setCancelled(true);
}
@EventHandler
public void onDrop(PlayerDropItemEvent e) {
e.setCancelled(true);
}
@EventHandler
public void onPickup(PlayerPickupItemEvent e) {
e.setCancelled(true);
}
@EventHandler
public void onArrowPickup(PlayerPickupArrowEvent e) {
e.setCancelled(true);
}
@EventHandler
public void onInventoryMove(InventoryMoveItemEvent e) {
assert e.getItem() != null;
assert e.getItem().hasItemMeta();
assert e.getItem().getItemMeta().hasDisplayName();
//if(e.getItem().getItemMeta().getDisplayName().equalsIgnoreCase("§eErweiterungen")) e.setCancelled(true);
if(e.getItem().getType() == Material.WATCH) {
e.setCancelled(true);
Core.getCommons().getLoggingHandler().getTeamVento().info("Item has been moved");
}
}
@EventHandler
public void onInventoryDrag(InventoryDragEvent e) {
assert e.getCursor() != null;
assert e.getCursor().hasItemMeta();
assert e.getCursor().getItemMeta().hasDisplayName();
//if(e.getCursor().getItemMeta().getDisplayName().equalsIgnoreCase("§eErweiterungen")) e.setCancelled(true);
if(e.getCursor().getType() == Material.WATCH) {
e.setCancelled(true);
Core.getCommons().getLoggingHandler().getTeamVento().info("Item has been dragged");
}
}
@EventHandler
public void onInventoryClick(InventoryClickEvent e) {
if(e.getAction() == InventoryAction.SWAP_WITH_CURSOR) {
Core.getCommons().getLoggingHandler().getTeamVento().info("Inventory clicked: Swap with cursor");
e.setCancelled(true);
}
}
@EventHandler
public void onConsume(PlayerItemConsumeEvent e) {
e.setCancelled(true);
}
@EventHandler
public void onBucketEmpty(PlayerBucketEmptyEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
if (!e.getPlayer().getWorld().getName().equalsIgnoreCase("plots"))
return;
if(p.getDatabasePlayer().isAllowed(Rank.SrDeveloper)) return;
if(PlotManager.getPlotByLocation(e.getPlayer().getLocation()) == null) {
e.setCancelled(true);
return;
}
Plot plot = PlotManager.getPlotByLocation(e.getBlockClicked().getLocation());
assert plot != null;
if (!plot.isOwner(p)) e.setCancelled(true);
}
@EventHandler
public void onBucketFill(PlayerBucketFillEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
if (!e.getPlayer().getWorld().getName().equalsIgnoreCase("plots"))
return;
if(p.getDatabasePlayer().isAllowed(Rank.SrDeveloper)) return;
if(PlotManager.getPlotByLocation(e.getPlayer().getLocation()) == null) e.setCancelled(true);
Plot plot = PlotManager.getPlotByLocation(e.getBlockClicked().getLocation());
assert plot != null;
if (!plot.isOwner(p)) e.setCancelled(true);
}
@EventHandler
public void onBlockMove(MoveEventFilter.PlayerBlockMoveEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
//plot enter
if(PlotManager.getPlotByLocation(e.getFrom()) == null && PlotManager.getPlotByLocation(e.getTo()) != null) {
Plot plot = PlotManager.getPlotByLocation(e.getTo());
assert plot != null;
p.setPlayerTime(plot.getTime().getValue(), false);
p.setPlayerWeather(plot.getWeatherType());
p.setResourcePack(plot.getResourcePack().getUrl());
if(!plot.isOwner(p) && !plot.getOwner().equals(UUID.fromString("c35f6ece-c430-4fc0-b61e-18b55be19ee3")))
p.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 999999, 2));
if(plot.getWeather() == Weather.THUNDER) {
BukkitTask task = Bukkit.getScheduler().runTaskTimerAsynchronously(TeamVento.getInstance(), () -> {
Random random = new Random();
int r = random.nextInt(100);
if(r < 30) {
p.strikeLightning(plot.getArea().getRandomLocation());
}
}, 2L, 50L);
lightningTasks.put(p, task);
}
}
//plot leave
if(PlotManager.getPlotByLocation(e.getFrom()) != null && PlotManager.getPlotByLocation(e.getTo()) == null) {
p.setPlayerTime(Time.DAY.getValue(), false);
p.setPlayerWeather(WeatherType.CLEAR);
p.clearPotionEffects();
if(lightningTasks.containsKey(p))
lightningTasks.get(p).cancel();
lightningTasks.remove(p);
}
if(e.getTo().getY() <= -5) {
if(!PlotManager.hasPlot(p)) {
p.teleport(Config.readLocation("Build.Locs.Spawn"));
return;
}
Plot plot = PlotManager.getPlotByPlayer(p);
assert plot != null;
Location loc = plot.getSpawn();
p.teleport(new Location(Bukkit.getWorld("plots"), loc.getX(), loc.getY(), loc.getZ(), 89.0F, 6.0F));
}
Block up = p.getLocation().subtract(0.0D, 1.0D, 0.0D).getBlock();
Block down = p.getLocation().subtract(0.0D, 2.0D, 0.0D).getBlock();
if(p.getLocation().getBlock().getType() == Material.GOLD_PLATE && up.getType() == Material.COAL_BLOCK) {
Core.getCommons().getLoggingHandler().getTeamVento().info("Platte und Coal");
if(down.getType() == Material.COMMAND_CHAIN && p.getDatabasePlayer().isAllowed(Rank.Supporter)){
p.teleport(Bukkit.getWorld("EinfachAFK").getSpawnLocation());
p.setGameMode(GameMode.ADVENTURE);
}
}
if(up.getType() == Material.COAL_BLOCK && down.getType() == Material.COMMAND_CHAIN) {
Core.getCommons().getLoggingHandler().getTeamVento().info("Coal und Chain");
}
}
@EventHandler
public void onPotionSplash(PotionSplashEvent e) {
e.setCancelled(true);
}
@EventHandler
public void onBlockGrow(BlockGrowEvent e) {
if(e.getBlock().getType() != Material.CROPS)
e.setCancelled(true);
}
@EventHandler
public void onStructureGrow(StructureGrowEvent e) {
e.setCancelled(true);
}
@EventHandler
public void onMultiPlace(BlockMultiPlaceEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
if (!e.getBlockPlaced().getWorld().getName().equalsIgnoreCase("plots")) return;
if (p.getDatabasePlayer().isAllowed(Rank.SrDeveloper)) return;
if (PlotManager.getPlotByLocation(e.getBlockPlaced().getLocation()) == null) e.setCancelled(true);
Plot plot = PlotManager.getPlotByLocation(e.getBlock().getLocation());
assert plot != null;
if (!plot.isOwner(p)) e.setCancelled(true);
}
@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) {
if(e.getEntityType() != EntityType.PLAYER) return;
CustomPlayer p = CustomPlayer.getPlayer(e.getEntity().getName());
if(p.getUniqueId().toString().equals("682ebd10-3661-49ec-ba4d-4f24b761b1a7")) {
Projectile projectile = (Projectile) e.getProjectile();
projectile.setCustomNameVisible(true);
projectile.setCustomName("§cNope " + p.getDisplayName() + ", Nope");
projectile.setPassenger(projectile.getWorld().spawnEntity(projectile.getLocation(), EntityType.CHICKEN));
}
}
@EventHandler
public void onProjectileHit(ProjectileHitEvent e) {
if(e.getEntity().getPassenger() != null) {
e.getEntity().getPassenger().remove();
e.getEntity().remove();
}
}
@EventHandler
public void onProjectileLaunch(ProjectileLaunchEvent e) {
if(e.getEntityType() == EntityType.FISHING_HOOK || e.getEntityType() == EntityType.SNOWBALL) {
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());
}
}
}
}
}