package me.gtacraft.plugins.hub.listener;
import com.google.common.collect.Lists;
import me.gtacraft.plugins.hub.GTAHub;
import me.gtacraft.plugins.hub.special.GroundSmashController;
import me.gtacraft.plugins.hub.util.GTAItems;
import me.gtacraft.plugins.hub.util.GTAUtil;
import me.gtacraft.plugins.hub.util.ParticleEffects;
import me.vaqxine.WorldRegeneration.RegenerationAPI;
import org.bukkit.*;
import org.bukkit.block.Block;
import org.bukkit.entity.FallingBlock;
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.BlockBreakEvent;
import org.bukkit.event.entity.EntityChangeBlockEvent;
import org.bukkit.event.entity.EntityCombustEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerItemDamageEvent;
import org.bukkit.event.weather.WeatherChangeEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.util.BlockIterator;
import org.bukkit.util.Vector;
import java.util.List;
/**
* Created by Connor on 7/8/14. Designed for the GTA-Hub project.
*/
public class GTACoreListener implements Listener {
public GTACoreListener() {
Bukkit.getPluginManager().registerEvents(this, GTAHub.get());
}
private List<Player> hidePlayers = Lists.newArrayList();
@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) {
Player player = event.getPlayer();
ItemStack inHand = player.getItemInHand();
if (inHand == null || inHand.getType().equals(Material.AIR))
return;
//verify type and parse stack
if (inHand.equals(GTAItems.SERVER_SELECTOR)) {
player.performCommand("instance"); //open server selector
} else if (inHand.equals(GTAItems.SHOW_PLAYERS)) {
if (GTAUtil.getTimeLeft(player.getName()) != 0) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cYou cannot use this feature for another &e"+GTAUtil.getTimeLeft(player.getName())+" seconds&c!"));
event.setCancelled(true);
return;
}
hidePlayers.remove(player);
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "» &aPlayers are now visible!"));
for (Player p : Bukkit.getOnlinePlayers()) {
if (p.equals(player))
continue;
if (p.hasPermission("hub.bypass.hide"))
continue;
player.showPlayer(p);
ParticleEffects.FIREWORKS_SPARK.sendToPlayer(player, p.getLocation(), 0f, 0f, 0f, 0.1f, 50);
}
player.playSound(player.getLocation(), Sound.LEVEL_UP, 1, 2);
player.setItemInHand(GTAItems.HIDE_PLAYERS);
player.updateInventory();
event.setCancelled(true);
GTAUtil.addCountdownTask(player.getName(), 5);
} else if (inHand.equals(GTAItems.HIDE_PLAYERS)) {
if (GTAUtil.getTimeLeft(player.getName()) != 0) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cYou cannot use this feature for another &e"+GTAUtil.getTimeLeft(player.getName())+" seconds&c!"));
event.setCancelled(true);
return;
}
hidePlayers.add(player);
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "» &cPlayers are now hidden!"));
for (Player p : Bukkit.getOnlinePlayers()) {
if (p.equals(player))
continue;
if (p.hasPermission("hub.bypass.hide"))
continue;
player.hidePlayer(p);
ParticleEffects.FIREWORKS_SPARK.sendToPlayer(player, p.getLocation(), 0f, 1f, 0f, 0.1f, 50);
}
player.playSound(player.getLocation(), Sound.LEVEL_UP, 1, 1.7f);
player.setItemInHand(GTAItems.SHOW_PLAYERS);
player.updateInventory();
event.setCancelled(true);
GTAUtil.addCountdownTask(player.getName(), 5);
return;
} else if (inHand.equals(GTAItems.GROUND_SMASHER)) {
if (event.getClickedBlock() != null)
//GroundSmashController.handleSmash(player);
event.setCancelled(true);
}
}
@EventHandler
public void onEntityCombust(EntityCombustEvent event) {
event.setCancelled(true);
}
@EventHandler
public void onPlayerDamage(EntityDamageEvent event) {
if (!(event.getEntity() instanceof Player))
return;
/*if (event.getCause().equals(EntityDamageEvent.DamageCause.LAVA) && GroundSmashController.port_locations.contains(event.getEntity().getLocation().getBlock())) {
Player player = (Player)event.getEntity();
player.teleport(GTAHub.spawn.clone().add(0, 75, 0));
player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 30, 1));
player.setFireTicks(0);
}*/
event.setCancelled(true);
}
@EventHandler
public void onEntityChangeBlock(EntityChangeBlockEvent event) {
if (GTAHub.water_fountain == null)
return;
if (event.getEntity() instanceof FallingBlock) {
FallingBlock fb = (FallingBlock)event.getEntity();
if (GTAHub.water_fountain.handleFallingBlock(fb))
event.setCancelled(true);
}
}
@EventHandler
public void onPlayerDropItem(PlayerDropItemEvent event) {
if (!(event.getPlayer().getGameMode().equals(GameMode.CREATIVE)))
event.setCancelled(true);
}
@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
if (!(event.getWhoClicked().getGameMode().equals(GameMode.CREATIVE)))
event.setCancelled(true);
}
@EventHandler
public void onWeatherChange(WeatherChangeEvent event) {
if (!(event.getWorld().isThundering()))
event.setCancelled(true);
}
}