Saber-Factions/src/main/java/com/massivecraft/factions/listeners/MenuListener.java

65 lines
2.3 KiB
Java

package com.massivecraft.factions.listeners;
import com.massivecraft.factions.util.serializable.ClickableItemStack;
import com.massivecraft.factions.util.serializable.GUIMenu;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.inventory.ItemStack;
/**
* @author Saser
*/
public class MenuListener implements Listener {
public MenuListener() {
}
@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
if (event.getView().getTitle().equals("Faction Logs")) {
event.setCancelled(true);
}
Player player = (Player) event.getWhoClicked();
GUIMenu menu = GUIMenu.getMenus().get(player.getUniqueId());
if (menu != null) {
event.setCancelled(true);
if (!menu.getName().equals(event.getView().getTitle())) {
event.getView().close();
return;
}
ItemStack item = event.getCurrentItem();
if (item == null) return;
if (event.getRawSlot() >= event.getInventory().getSize()) return;
ClickableItemStack found = menu.getMenuItems().get(event.getRawSlot());
if (found != null && found.getType() == item.getType() && found.getDurability() == item.getDurability()) {
if (found.getItemCallback() == null) {
return;
}
found.getItemCallback().accept(event);
}
}
}
@EventHandler
public void onInventoryClose(InventoryCloseEvent event) {
GUIMenu menu = GUIMenu.getMenus().remove(event.getPlayer().getUniqueId());
if (menu != null && menu.getCloseCallback() != null) {
menu.getCloseCallback().accept(event);
}
}
@EventHandler
public void onPLayerLeave(PlayerQuitEvent event) {
GUIMenu menu = GUIMenu.getMenus().remove(event.getPlayer().getUniqueId());
if (menu != null && menu.getCloseCallback() != null) {
menu.getCloseCallback().accept(new InventoryCloseEvent(event.getPlayer().getOpenInventory()));
}
}
}