/*******************************************************************************
* This file is part of ASkyBlock.
*
* ASkyBlock is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* ASkyBlock is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with ASkyBlock. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
package com.wasteofplastic.askyblock.panels;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import com.wasteofplastic.askyblock.ASkyBlock;
import com.wasteofplastic.askyblock.Settings;
import com.wasteofplastic.askyblock.schematics.Schematic;
import com.wasteofplastic.askyblock.util.Util;
import com.wasteofplastic.askyblock.util.VaultHelper;
public class SchematicsPanel implements Listener {
private ASkyBlock plugin;
private HashMap<UUID, List<SPItem>> schematicItems = new HashMap<UUID, List<SPItem>>();
/**
* @param plugin
*/
public SchematicsPanel(ASkyBlock plugin) {
this.plugin = plugin;
}
/**
* Returns a customized panel of available Schematics for the player
*
* @param player
* @return custom Inventory object or null if there are no valid schematics for this player
*/
public Inventory getPanel(Player player) {
// Go through the available schematics for this player
int slot = 0;
List<SPItem> items = new ArrayList<SPItem>();
List<Schematic> availableSchems = plugin.getIslandCmd().getSchematics(player, false);
// Add an info icon
//items.add(new SPItem(Material.MAP,"Choose your island", "Pick from the selection...",slot++));
// Generate additional available schematics
for (Schematic schematic : availableSchems) {
if (schematic.isVisible()) {
items.add(new SPItem(schematic, slot++));
}
}
//plugin.getLogger().info("DEBUG: there are " + items.size() + " in the panel");
// Now create the inventory panel
if (items.size() > 0) {
// Save the items for later retrieval when the player clicks on them
schematicItems.put(player.getUniqueId(), items);
// Make sure size is a multiple of 9
int size = items.size() + 8;
size -= (size % 9);
Inventory newPanel = Bukkit.createInventory(null, size, plugin.myLocale(player.getUniqueId()).schematicsTitle);
// Fill the inventory and return
for (SPItem i : items) {
newPanel.setItem(i.getSlot(), i.getItem());
}
return newPanel;
} else {
Util.sendMessage(player, ChatColor.RED + plugin.myLocale().errorCommandNotReady);
}
return null;
}
/**
* Handles when the schematics panel is actually clicked
* @param event
*/
@EventHandler(priority = EventPriority.LOWEST)
public void onInventoryClick(InventoryClickEvent event) {
Player player = (Player) event.getWhoClicked(); // The player that
// clicked the item
Inventory inventory = event.getInventory(); // The inventory that was clicked in
if (inventory.getName() == null) {
return;
}
int slot = event.getRawSlot();
// Check this is the right panel
if (!inventory.getName().equals(plugin.myLocale(player.getUniqueId()).schematicsTitle)) {
return;
}
if (slot == -999) {
player.closeInventory();
inventory.clear();
schematicItems.remove(player.getUniqueId());
event.setCancelled(true);
return;
}
if (event.getClick().equals(ClickType.SHIFT_RIGHT)) {
event.setCancelled(true);
player.closeInventory();
inventory.clear();
schematicItems.remove(player.getUniqueId());
player.updateInventory();
return;
}
// Get the list of items for this player
List<SPItem> thisPanel = schematicItems.get(player.getUniqueId());
if (thisPanel == null) {
player.closeInventory();
inventory.clear();
schematicItems.remove(player.getUniqueId());
event.setCancelled(true);
return;
}
if (slot >= 0 && slot < thisPanel.size()) {
event.setCancelled(true);
// plugin.getLogger().info("DEBUG: slot is " + slot);
player.closeInventory(); // Closes the inventory
inventory.clear();
// Get the item clicked
SPItem item = thisPanel.get(slot);
// Check cost
if (item.getCost() > 0) {
if (Settings.useEconomy && VaultHelper.setupEconomy() && !VaultHelper.econ.has(player, item.getCost())) {
// Too expensive
Util.sendMessage(player, ChatColor.RED + plugin.myLocale(player.getUniqueId()).minishopYouCannotAfford.replace("[description]", item.getName()));
} else {
// Do something
if (Settings.useEconomy && VaultHelper.setupEconomy()) {
VaultHelper.econ.withdrawPlayer(player, item.getCost());
}
player.performCommand(Settings.ISLANDCOMMAND + " make " + item.getHeading());
}
} else {
player.performCommand(Settings.ISLANDCOMMAND + " make " + item.getHeading());
}
schematicItems.remove(player.getUniqueId());
thisPanel.clear();
}
return;
}
}