TeamVento/src/main/java/eu/univento/teamvento/listener/MenuEvents.java

271 lines
13 KiB
Java

/*
* Copyright (c) 2018 univento.eu - All rights reserved
* You are not allowed to use, distribute or modify this code
*/
package eu.univento.teamvento.listener;
import eu.univento.commons.player.rank.Rank;
import eu.univento.commons.player.uuid.UUIDFetcher;
import eu.univento.core.Core;
import eu.univento.core.api.gui.AnvilGUI;
import eu.univento.core.api.gui.inventory.InventoryGUI;
import eu.univento.core.api.gui.inventory.PagedInventoryGUI;
import eu.univento.core.api.items.ItemBuilder;
import eu.univento.core.api.player.CustomPlayer;
import eu.univento.teamvento.TeamVento;
import eu.univento.teamvento.plot.*;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.WeatherType;
import org.bukkit.block.Biome;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.SkullMeta;
import java.util.Map;
/**
* @author joethei
* @version 1.0
*/
public class MenuEvents implements Listener{
@EventHandler
public void onInteract(PlayerInteractEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
InventoryManager inventoryManager = new InventoryManager(p);
if(e.getAction() == Action.RIGHT_CLICK_BLOCK || e.getAction() == Action.RIGHT_CLICK_AIR) {
if(p.getItemInHand().getType() == Material.WATCH && p.getItemInHand().getItemMeta().getDisplayName().equals("§eErweiterungen")) {
if(p.getDatabasePlayer().getRank() == Rank.Player) p.openInventory(inventoryManager.getPlayerInventory());
else {
InventoryGUI gui = new InventoryGUI(p, 27, "§eErweiterungen");
gui.addItem(0, new ItemBuilder(Material.SKULL_ITEM).durability((short) 3).skullOwner("MHF_Apple").name("§eKöpfe").build(), customPlayer -> {
customPlayer.closeInventory();
InventoryGUI headsMainGui = new InventoryGUI(customPlayer, 9, "§eKöpfe");
headsMainGui.addItem(0, new ItemBuilder(Material.SKULL_ITEM).durability((short) 3).skullOwner("MHF_Chest").name("§eBlöcke").build(), player -> {
player.closeInventory();
PagedInventoryGUI pagedInventoryGUI = new PagedInventoryGUI(player, "§eBlöcke");
for(Map.Entry<String, String> entry : Core.getHeadDB().getBlocks().entrySet()) {
pagedInventoryGUI.addItem(new ItemBuilder(Material.SKULL_ITEM).durability((short) 3).skullUrl(entry.getValue()).name(entry.getKey()).build(), clickedPlayer -> {
clickedPlayer.closeInventory();
clickedPlayer.getInventory().addItem(new ItemBuilder(Material.SKULL_ITEM).durability((short) 3).skullUrl(entry.getValue()).name(entry.getKey()).build());
});
}
pagedInventoryGUI.open();
});
headsMainGui.open();
});
gui.open();
}
}
}
}
@EventHandler
public void onInventoryClick(InventoryClickEvent e) {
CustomPlayer p = CustomPlayer.getPlayer((Player) e.getWhoClicked());
InventoryManager inventoryManager = new InventoryManager(p);
if(e.isShiftClick() && e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("§eErweiterungen")) e.setCancelled(true);
if(!PlotManager.hasPlot(p)) return;
if(e.getCurrentItem() == null) return;
if(!e.getCurrentItem().hasItemMeta()) return;
if(!e.getCurrentItem().getItemMeta().hasDisplayName()) return;
Plot plot = PlotManager.getPlotByPlayer(p);
assert plot != null;
if(e.getInventory().getName().equals(inventoryManager.getPlayerInventory().getName())) {
e.setCancelled(true);
if(e.getCurrentItem().getType() == Material.BED) {
p.closeInventory();
Location loc = plot.getSpawn();
p.teleport(new Location(Bukkit.getWorld("plots"), loc.getX(), loc.getY(), loc.getZ(), 89.0F, 6.0F));
}
if(e.getCurrentItem().getItemMeta().getDisplayName().equals("§eGrundstück zurücksetzen")) {
p.setFlying(true);
PlotManager.resetPlot(plot);
p.closeInventory();
}
if(e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("§eFertig")) {
p.closeInventory();
p.openInventory(inventoryManager.getReadyInventory());
}
if(e.getCurrentItem().getItemMeta().getDisplayName().equals("§eBiom ändern")) {
p.closeInventory();
p.openInventory(inventoryManager.getBiomeInventory());
}
if(e.getCurrentItem().getItemMeta().getDisplayName().equals("§eWetter ändern")) {
p.closeInventory();
p.openInventory(inventoryManager.getWeatherInventory());
}
if(e.getCurrentItem().getType() == Material.WATCH) {
p.closeInventory();
p.openInventory(inventoryManager.getTimeInventory());
}
if(e.getCurrentItem().getType() == Material.LADDER) {
p.closeInventory();
p.openInventory(inventoryManager.getSettingsInventory());
}
if(e.getCurrentItem().getType() == Material.MINECART) {
p.closeInventory();
Bukkit.getScheduler().runTaskAsynchronously(TeamVento.getInstance(), () -> {
/*
PageInventory inventory = new PageInventory("§eTeleport", p, true);
ArrayList<ItemStack> items = new ArrayList<>();
for(Plot plots : PlotManager.getPlots()) {
String name = NameFetcher.getRequest(plot.getOwner());
items.add(new ItemBuilder(p, Material.SKULL_ITEM).durability((short) 3).skullOwner(name).name("§e" + plots.getName()).lore("§evon " + name).build());
}
inventory.setPages(items);
inventory.openInventory();
*/
});
}
}
if(e.getInventory().getName().equals(inventoryManager.getReadyInventory().getName())) {
if(e.getCurrentItem().getItemMeta().getDisplayName().equals("Ja")) {
p.closeInventory();
plot.setReady();
p.getInventory().remove(p.getInventory().getItem(8));
Core.getOnlinePlayers().stream().filter(player -> player.getDatabasePlayer().isAllowed(Rank.Builder)).forEach(player -> player.sendMessage("§a[Plot]§e" + p.getName() + " ist fertig"));
}
if(e.getCurrentItem().getItemMeta().getDisplayName().equals("Nein"))
p.closeInventory();
}
if(e.getInventory().getName().equals(inventoryManager.getBiomeInventory().getName())) {
e.setCancelled(true);
if(e.getCurrentItem().getType() == Material.WATER_LILY) {
p.closeInventory();
plot.setBiome(Biome.SWAMPLAND);
}
if(e.getCurrentItem().getType() == Material.DEAD_BUSH) {
p.closeInventory();
plot.setBiome(Biome.DESERT);
}
if(e.getCurrentItem().getItemMeta().getDisplayName().equals("§eWald")) {
p.closeInventory();
plot.setBiome(Biome.FOREST);
}
if(e.getCurrentItem().getItemMeta().getDisplayName().equals("§eFlachland")) {
p.closeInventory();
plot.setBiome(Biome.PLAINS);
}
if(e.getCurrentItem().getItemMeta().getDisplayName().equals("§eTaiga")) {
p.closeInventory();
plot.setBiome(Biome.TAIGA);
}
if(e.getCurrentItem().getItemMeta().getDisplayName().equals("§eTundra")) {
p.closeInventory();
plot.setBiome(Biome.TAIGA_COLD);
}
if(e.getCurrentItem().getType() == Material.STAINED_CLAY) {
p.closeInventory();
plot.setBiome(Biome.MESA);
}
if(e.getCurrentItem().getItemMeta().getDisplayName().equals("§eDschungel")) {
p.closeInventory();
plot.setBiome(Biome.JUNGLE);
}
}
if(e.getInventory().getName().equals(inventoryManager.getTimeInventory().getName())) {
e.setCancelled(true);
if(e.getCurrentItem().getType() == Material.MILK_BUCKET) {
p.closeInventory();
plot.setTime(Time.MORNING);
if(plot.isInPlot(p.getLocation())) p.setPlayerTime(Time.MORNING.getValue(), false);
}
if(e.getCurrentItem().getType() == Material.DOUBLE_PLANT) {
p.closeInventory();
plot.setTime(Time.DAY);
if(plot.isInPlot(p.getLocation()))p.setPlayerTime(Time.DAY.getValue(), false);
}
if(e.getCurrentItem().getType() == Material.BEETROOT_SOUP) {
p.closeInventory();
plot.setTime(Time.EVENING);
if(plot.isInPlot(p.getLocation()))p.setPlayerTime(Time.EVENING.getValue(), false);
}
if(e.getCurrentItem().getType() == Material.COAL) {
p.closeInventory();
plot.setTime(Time.NIGHT);
if(plot.isInPlot(p.getLocation()))p.setPlayerTime(Time.NIGHT.getValue(), false);
}
}
if(e.getInventory().getName().equals(inventoryManager.getWeatherInventory().getName())) {
e.setCancelled(true);
if(e.getCurrentItem().getType() == Material.DOUBLE_PLANT) {
p.closeInventory();
plot.setWeather(Weather.CLEAR);
if(plot.isInPlot(p.getLocation()))p.setPlayerWeather(WeatherType.CLEAR);
}
if(e.getCurrentItem().getType() == Material.WATER_BUCKET) {
p.closeInventory();
plot.setWeather(Weather.DOWNFALL);
if(plot.isInPlot(p.getLocation()))p.setPlayerWeather(WeatherType.DOWNFALL);
}
if(e.getCurrentItem().getType() == Material.BLAZE_ROD) {
p.closeInventory();
plot.setWeather(Weather.THUNDER);
if(plot.isInPlot(p.getLocation()))p.setPlayerWeather(WeatherType.DOWNFALL);
}
}
if(e.getInventory().getName().equals(inventoryManager.getSettingsInventory().getName())) {
e.setCancelled(true);
if(e.getCurrentItem().getType() == Material.SIGN) {
AnvilGUI gui = new AnvilGUI(p, event -> {
if(event.getSlot() == AnvilGUI.AnvilSlot.OUTPUT) {
event.setWillClose(true);
event.setWillDestroy(true);
plot.setName(event.getName());
}else{
event.setWillDestroy(true);
event.setWillClose(true);
}
});
ItemStack name = new ItemStack(Material.SIGN);
ItemMeta nameMeta = name.getItemMeta();
nameMeta.setDisplayName(plot.getName() == null ? "§cunbennantes Plot" : plot.getName());
name.setItemMeta(nameMeta);
gui.setSlot(AnvilGUI.AnvilSlot.INPUT_RIGHT, name);
gui.open();
}
if(e.getCurrentItem().getType() == Material.NAME_TAG) {
AnvilGUI gui = new AnvilGUI(p, event -> {
if(event.getSlot() == AnvilGUI.AnvilSlot.OUTPUT) {
event.setWillClose(true);
event.setWillDestroy(true);
plot.setContact(event.getName());
}else{
event.setWillDestroy(true);
event.setWillClose(true);
}
});
ItemStack name = new ItemStack(Material.NAME_TAG);
ItemMeta nameMeta = name.getItemMeta();
nameMeta.setDisplayName(plot.getContact() == null ? "§cKontaktdaten" : plot.getContact());
name.setItemMeta(nameMeta);
gui.setSlot(AnvilGUI.AnvilSlot.INPUT_RIGHT, name);
gui.open();
}
}
if(e.getInventory().getName().equals("§eTeleport")) {
if(e.getCurrentItem().getType() == Material.SKULL_ITEM) {
SkullMeta skull = (SkullMeta) e.getCurrentItem().getItemMeta();
Bukkit.getScheduler().runTaskAsynchronously(TeamVento.getInstance(), () -> {
Plot tpPlot = PlotManager.getPlotByOwner(UUIDFetcher.getRequest(skull.getOwner()).toString());
assert tpPlot != null;
Location loc = tpPlot.getSpawn();
Bukkit.getScheduler().runTask(TeamVento.getInstance(), () -> p.teleport(new Location(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ(), 89.0F, 6.0F)));
});
}
}
}
}