package org.kitteh.vanish.listeners;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.block.Beacon;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.block.BrewingStand;
import org.bukkit.block.Chest;
import org.bukkit.block.Dispenser;
import org.bukkit.block.Dropper;
import org.bukkit.block.Furnace;
import org.bukkit.block.Hopper;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.FoodLevelChangeEvent;
import org.bukkit.event.player.PlayerBucketFillEvent;
import org.bukkit.event.player.PlayerChangedWorldEvent;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerPickupItemEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerShearEntityEvent;
import org.bukkit.inventory.Inventory;
import org.kitteh.vanish.Settings;
import org.kitteh.vanish.VanishPerms;
import org.kitteh.vanish.VanishPlugin;
import org.kitteh.vanish.metrics.MetricsOverlord;
public final class ListenPlayerOther implements Listener {
private final VanishPlugin plugin;
public ListenPlayerOther(VanishPlugin instance) {
this.plugin = instance;
}
@EventHandler(ignoreCancelled = true)
public void onBucketFill(PlayerBucketFillEvent event) {
if (this.plugin.getManager().isVanished(event.getPlayer()) && VanishPerms.canNotInteract(event.getPlayer())) {
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onDrop(PlayerDropItemEvent event) {
if (this.plugin.getManager().isVanished(event.getPlayer()) && VanishPerms.canNotInteract(event.getPlayer())) {
event.setCancelled(true);
}
}
@EventHandler(ignoreCancelled = true)
public void onFoodChange(FoodLevelChangeEvent event) {
if (event.getEntity() instanceof Player) {
final Player player = (Player) event.getEntity();
if (this.plugin.getManager().isVanished(player) && VanishPerms.canNotHunger(player)) {
event.setCancelled(true);
}
}
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerInteract(PlayerInteractEvent event) {
final Player player = event.getPlayer();
if (!this.plugin.chestFakeInUse(player.getName()) && !player.isSneaking() && (event.getAction() == Action.RIGHT_CLICK_BLOCK) && this.plugin.getManager().isVanished(event.getPlayer()) && VanishPerms.canReadChestsSilently(event.getPlayer())) {
final Block block = event.getClickedBlock();
Inventory inventory = null;
final BlockState blockState = block.getState();
boolean fake = false;
switch (block.getType()) {
case TRAPPED_CHEST:
case CHEST:
final Chest chest = (Chest) blockState;
inventory = this.plugin.getServer().createInventory(player, chest.getInventory().getSize());
inventory.setContents(chest.getInventory().getContents());
fake = true;
break;
case ENDER_CHEST:
if (this.plugin.getServer().getPluginManager().isPluginEnabled("EnderChestPlus") && VanishPerms.canNotInteract(player)) {
event.setCancelled(true);
return;
}
inventory = player.getEnderChest();
break;
case DISPENSER:
inventory = ((Dispenser) blockState).getInventory();
break;
case HOPPER:
inventory = ((Hopper) blockState).getInventory();
break;
case DROPPER:
inventory = ((Dropper) blockState).getInventory();
break;
case FURNACE:
inventory = ((Furnace) blockState).getInventory();
break;
case BREWING_STAND:
inventory = ((BrewingStand) blockState).getInventory();
break;
case BEACON:
inventory = ((Beacon) blockState).getInventory();
break;
}
if (inventory != null) {
event.setCancelled(true);
if (fake) {
this.plugin.chestFakeOpen(player.getName());
player.sendMessage(ChatColor.AQUA + "[VNP] Opening chest silently. Can not edit.");
}
player.openInventory(inventory);
return;
}
}
if (this.plugin.getManager().isVanished(player) && VanishPerms.canNotInteract(player)) {
event.setCancelled(true);
return;
}
if ((event.getAction() == Action.PHYSICAL) && (event.getClickedBlock().getType() == Material.SOIL)) {
if (this.plugin.getManager().isVanished(player) && VanishPerms.canNotTrample(player)) {
event.setCancelled(true);
}
}
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onPlayerPickupItem(PlayerPickupItemEvent event) {
if (this.plugin.getManager().isVanished(event.getPlayer()) && VanishPerms.canNotPickUp(event.getPlayer())) {
event.setCancelled(true);
}
}
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
final Player player = event.getPlayer();
if (this.plugin.getManager().isVanished(player)) {
this.plugin.messageStatusUpdate(ChatColor.DARK_AQUA + event.getPlayer().getName() + " has quit vanished");
}
this.plugin.getManager().playerQuit(player);
this.plugin.hooksQuit(player);
this.plugin.getManager().getAnnounceManipulator().dropDelayedAnnounce(player.getName());
if (!this.plugin.getManager().getAnnounceManipulator().playerHasQuit(player.getName()) || VanishPerms.silentQuit(player)) {
MetricsOverlord.getQuitInvisTracker().increment();
event.setQuitMessage(null);
}
this.plugin.chestFakeClose(event.getPlayer().getName());
}
@EventHandler(ignoreCancelled = true)
public void onShear(PlayerShearEntityEvent event) {
if (this.plugin.getManager().isVanished(event.getPlayer()) && VanishPerms.canNotInteract(event.getPlayer())) {
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onWorldChange(PlayerChangedWorldEvent event) {
if (Settings.getWorldChangeCheck()) {
this.plugin.getManager().playerRefresh(event.getPlayer());
}
}
}