434 lines
19 KiB
Java
434 lines
19 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);
|
|
if(!PlotManager.getPlotByLocation(e.getBlock().getLocation()).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);
|
|
if(!PlotManager.getPlotByLocation(e.getBlockPlaced().getLocation()).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);
|
|
if (!PlotManager.getPlotByLocation(e.getBlock().getLocation()).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);
|
|
if (!PlotManager.getPlotByLocation(e.getEntity().getLocation()).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);
|
|
if (!PlotManager.getPlotByLocation(e.getEntity().getLocation()).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;
|
|
}
|
|
if (!PlotManager.getPlotByLocation(e.getEntity().getLocation()).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;
|
|
}
|
|
if(!PlotManager.getPlotByLocation(e.getEntity().getLocation()).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);
|
|
if (!PlotManager.getPlotByLocation(e.getBlock().getLocation()).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 (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);
|
|
if(!PlotManager.getPlotByLocation(block.getLocation()).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);
|
|
if(!PlotManager.getPlotByLocation(e.getRightClicked().getLocation()).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);
|
|
if(!PlotManager.getPlotByLocation(e.getRightClicked().getLocation()).isOwner(p)) e.setCancelled(true);
|
|
}
|
|
|
|
@EventHandler
|
|
public void onDrop(PlayerDropItemEvent e) {
|
|
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
|
|
if(!p.getDatabasePlayer().isAllowed(Rank.SrDeveloper))
|
|
e.setCancelled(true);
|
|
}
|
|
|
|
@EventHandler
|
|
public void onPickup(PlayerPickupItemEvent e) {
|
|
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
|
|
if(!p.getDatabasePlayer().isAllowed(Rank.SrDeveloper))
|
|
e.setCancelled(true);
|
|
}
|
|
|
|
@EventHandler
|
|
public void onArrowPickup(PlayerPickupArrowEvent e) {
|
|
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
|
|
if(!p.getDatabasePlayer().isAllowed(Rank.SrDeveloper))
|
|
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);
|
|
}
|
|
|
|
@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);
|
|
}
|
|
|
|
@EventHandler
|
|
public void onInventoryClick(InventoryClickEvent e) {
|
|
if(e.getAction() == InventoryAction.SWAP_WITH_CURSOR) {
|
|
Core.getCommons().getLoggingHandler().getTeamVento().info("Inventory clicked: Swap with cursor");
|
|
}
|
|
}
|
|
|
|
@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;
|
|
}
|
|
if(!PlotManager.getPlotByLocation(e.getPlayer().getLocation()).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);
|
|
if(!PlotManager.getPlotByLocation(e.getPlayer().getLocation()).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());
|
|
if(!plot.isOwner(p) && !plot.getOwner().equals(UUID.fromString("83007140-8306-4791-b341-e6fef1a23e8a")))
|
|
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);
|
|
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);
|
|
if (!PlotManager.getPlotByLocation(e.getBlockPlaced().getLocation()).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")) {
|
|
e.setCancelled(true);
|
|
p.sendMessage("§cNein " + p.getDisplayName());
|
|
}
|
|
}
|
|
|
|
@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());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |