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.InventoryClickEvent; import org.bukkit.event.player.*; import org.bukkit.event.weather.WeatherChangeEvent; import org.bukkit.event.world.StructureGrowEvent; import org.bukkit.inventory.PlayerInventory; 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 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.isAllowedToBuild(p, e.getBlock().getLocation())) e.setCancelled(true); } @EventHandler public void onBlockPlace(BlockPlaceEvent e) { CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); if(!PlotManager.isAllowedToBuild(p, e.getBlock().getLocation())) e.setCancelled(true); } @EventHandler public void onHangingPlace(HangingPlaceEvent e) { CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); if(!PlotManager.isAllowedToBuild(p, e.getEntity().getLocation())) e.setCancelled(true); } @EventHandler public void onHangingBreakByEntity(HangingBreakByEntityEvent e) { if(e.getRemover() instanceof Projectile) { if(((Projectile) e.getRemover()).getShooter() instanceof Player) { CustomPlayer p = CustomPlayer.getPlayer((Player) ((Projectile) e.getRemover()).getShooter()); if(!PlotManager.isAllowedToBuild(p, e.getEntity().getLocation())) e.setCancelled(true); }else { e.setCancelled(true); } } if(e.getRemover() instanceof Player) { CustomPlayer p = CustomPlayer.getPlayer((Player) e.getRemover()); if(!PlotManager.isAllowedToBuild(p, e.getEntity().getLocation())) 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(!PlotManager.isAllowedToBuild(p, e.getEntity().getLocation())) e.setCancelled(true); } if(e.getDamager() instanceof Projectile) { if(((Projectile) e.getDamager()).getShooter() instanceof Player) { CustomPlayer p = CustomPlayer.getPlayer((Player) ((Projectile) e.getDamager()).getShooter()); if(!PlotManager.isAllowedToBuild(p, e.getEntity().getLocation())) e.setCancelled(true); }else { 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.getCause() != BlockIgniteEvent.IgniteCause.FIREBALL) { e.setCancelled(true); return; } CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); if(!PlotManager.isAllowedToBuild(p, e.getBlock().getLocation())) 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 onPiston(BlockPistonEvent e) { 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(!PlotManager.isAllowedToBuild(p, e.getClickedBlock().getLocation())) e.setCancelled(true); } } if(e.getAction() == Action.RIGHT_CLICK_BLOCK) { if(!PlotManager.isAllowedToBuild(p, e.getClickedBlock().getLocation())) e.setCancelled(true); } } @EventHandler public void onPlayerInteractEntity(PlayerInteractEntityEvent e) { CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); if(e.getRightClicked().getType() == EntityType.ITEM_FRAME) { if(!PlotManager.isAllowedToBuild(p, e.getRightClicked().getLocation())) e.setCancelled(true); } } @EventHandler public void onArmorStandManipulate(PlayerArmorStandManipulateEvent e) { CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); if(!PlotManager.isAllowedToBuild(p, e.getRightClicked().getLocation())) 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 onInventoryClick(InventoryClickEvent e) { if(e.getClickedInventory() instanceof PlayerInventory) { if(e.getSlot() == 8 || e.getHotbarButton() == 8) { e.setCancelled(true); } } } @EventHandler public void onSwapHands(PlayerSwapHandItemsEvent e) { if(e.getPlayer().getInventory().getHeldItemSlot() == 8) { 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(!PlotManager.isAllowedToBuild(p, e.getBlockClicked().getLocation())) e.setCancelled(true); } @EventHandler public void onBucketFill(PlayerBucketFillEvent e) { CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); if(!PlotManager.isAllowedToBuild(p, e.getBlockClicked().getLocation())) 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()); 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 onTeleport(PlayerTeleportEvent 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()); 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); } } @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(!PlotManager.isAllowedToBuild(p, e.getBlockPlaced().getLocation())) 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()); } } } } }