Lobby/src/main/java/eu/univento/lobby/listeners/ItemEvents.java

130 lines
5.9 KiB
Java

/*
* 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<CustomPlayer, Integer> 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));
}
}