/* * Copyright (c) 2018 univento.eu - All rights reserved * You are not allowed to use, distribute or modify this code */ package eu.univento.lobby.listeners; import eu.univento.commons.player.rank.Rank; import eu.univento.commons.server.ServerType; import eu.univento.core.Core; import eu.univento.core.api.Config; import eu.univento.core.api.gui.inventory.InventoryGUI; import eu.univento.core.api.items.ItemBuilder; import eu.univento.core.api.player.CustomPlayer; import eu.univento.lobby.Lobby; import org.bukkit.*; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; import java.util.HashMap; /** * some item events * @author joethei * @version 1.0 */ public class ItemEvents implements Listener { private HashMap forcefield = new HashMap<>(); @EventHandler public void onInteract(PlayerInteractEvent e) { CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); if (e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) { ItemStack item = p.getItemInHand(); if (item.getType() == Material.NAME_TAG) { if (p.getDatabasePlayer().isAllowed(Rank.VIP)) { if (p.getDatabasePlayer().getSettings().isNicked()) { p.getDatabasePlayer().getSettings().setNickStatus(false); //p.sendMessage(p.getMessages().PREFIX() + p.getMessages().Lobby_AUTONICK_OFF()); } else { p.getDatabasePlayer().getSettings().setNickStatus(true); //p.sendMessage(p.getMessages().PREFIX() + p.getMessages().Lobby_AUTONICK_ON()); } } } if (item.getType() == Material.EYE_OF_ENDER) { if (p.getDatabasePlayer().isAllowed(Rank.VIP)) { if (forcefield.containsKey(p)) { Bukkit.getScheduler().cancelTask(forcefield.get(p)); forcefield.remove(p); //p.sendMessage(p.getMessages().PREFIX() + p.getMessages().Lobby_FORCEFIELD_OFF()); } else { forcefield.put(p, force(p)); //p.sendMessage(p.getMessages().PREFIX() + p.getMessages().Lobby_FORCEFIELD_ON()); } } e.setCancelled(true); } if(item.getType() == Material.COMPASS) { e.setCancelled(true); InventoryGUI gui = new InventoryGUI(p, 9, "§aNavigator"); gui.addItem(2, new ItemBuilder(Material.ENCHANTMENT_TABLE).name("§cBalance").build(), player -> { player.closeInventory(); //CloudProxy.getInstance().sendPlayer(p.getUniqueId(), CloudNetAPI.getInstance().getServerInfos("Free4All").get(0)); player.connectToServer(ServerType.SECRET_GAME_FREE4ALL); player.teleport(Config.readLocation("Lobby.Locs.FFA")); }); gui.addItem(4, new ItemBuilder(Material.FLOWER_POT_ITEM).name("§aBauserver").build(), player -> { player.closeInventory(); //CloudProxy.getInstance().sendPlayer(p.getUniqueId(), Core.getCloudNetAPI().getServerInfos("TeamVento").get(0)); player.connectToServer(ServerType.TEAM_BUILD); player.teleport(Config.readLocation("Lobby.Locs.Build")); }); gui.addItem(6, new ItemBuilder(Material.BOOK).name("§bDevelopment").build(), player -> { player.closeInventory(); //CloudProxy.getInstance().sendPlayer(p.getUniqueId(), Core.getCloudNetAPI().getServerInfos("TrashGames").get(0)); player.connectToServer(ServerType.SECRET_GAME_TRASHGAMES); player.teleport(Config.readLocation("Lobby.Locs.TrashGames")); }); gui.open(); } } } private int force(CustomPlayer p) { return Bukkit.getScheduler().scheduleSyncRepeatingTask(Lobby.getInstance(), () -> { if (forcefield.containsKey(p)) { playEffect(p.getLocation(), Effect.ENDER_SIGNAL, true); Core.getOnlinePlayers().stream().filter(players -> !p.getName().equals(players.getName()) && p.getLocation().distance(players.getLocation()) <= 5 && !Parkour.getPlayers().contains(players) && !PlayerHider.getSilentlobby().contains(p)).forEach(players -> { int aX = p.getLocation().getBlockX(); int aY = p.getLocation().getBlockY(); int aZ = p.getLocation().getBlockZ(); int bX = p.getLocation().getBlockX(); int bY = p.getLocation().getBlockY(); int bZ = p.getLocation().getBlockZ(); int x = aX - bX; int y = aY - bY; int z = aZ - bZ; Vector v = new Vector(x, y, z).normalize(); v.multiply(2.0D); v.setY(1.5D); players.setVelocity(v); players.playEffect(p.getEyeLocation(), Effect.SMOKE, 3); players.playSound(players.getLocation(), Sound.ENTITY_FIREWORK_BLAST, 3.0F, 3.0F); }); } }, 0L, 5L); } private void playEffect(Location loc, Effect effect, boolean v) { for (int i = 0; i <= 8; i += ((!v) && (i == 3) ? 2 : 1)) Core.getOnlinePlayers().stream().filter(p -> p.getDatabasePlayer().getSettings().hasEffectsEnabled()).forEach(p -> p.playEffect(loc, effect, 1.0F)); } }