package be.isach.ultracosmetics.menu.menus;
import be.isach.ultracosmetics.UltraCosmetics;
import be.isach.ultracosmetics.UltraCosmeticsData;
import be.isach.ultracosmetics.config.MessageManager;
import be.isach.ultracosmetics.config.SettingsManager;
import be.isach.ultracosmetics.cosmetics.Category;
import be.isach.ultracosmetics.cosmetics.Cosmetic;
import be.isach.ultracosmetics.cosmetics.type.GadgetType;
import be.isach.ultracosmetics.menu.ClickRunnable;
import be.isach.ultracosmetics.menu.CosmeticMenu;
import be.isach.ultracosmetics.player.UltraPlayer;
import be.isach.ultracosmetics.util.ItemFactory;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.material.MaterialData;
import java.util.ArrayList;
import java.util.List;
/**
* Gadget {@link be.isach.ultracosmetics.menu.Menu Menu}.
*
* @author iSach
* @since 07-23-2016
*/
public class MenuGadgets extends CosmeticMenu<GadgetType> {
public MenuGadgets(UltraCosmetics ultraCosmetics) {
super(ultraCosmetics, Category.GADGETS);
}
@Override
protected void putItems(Inventory inventory, UltraPlayer player, int page) {
putToggleGadgetsItems(inventory, player);
}
private void putToggleGadgetsItems(Inventory inventory, UltraPlayer player) {
int slot = inventory.getSize() - (getCategory().hasGoBackArrow() ? 5 : 6);
MaterialData materialData;
boolean toggle;
if (player.hasGadgetsEnabled()) {
materialData = ItemFactory.createFromConfig("Categories.Gadgets-Item.When-Enabled");
toggle = false;
} else {
materialData = ItemFactory.createFromConfig("Categories.Gadgets-Item.When-Disabled");
toggle = true;
}
String msg = MessageManager.getMessage((toggle ? "Enable" : "Disable") + "-Gadgets");
ClickRunnable run = data -> {
player.setGadgetsEnabled(!player.hasGadgetsEnabled());
putToggleGadgetsItems(inventory, player);
};
putItem(inventory, slot, ItemFactory.create(materialData.getItemType(), materialData.getData(), msg), run);
}
@Override
protected ItemStack filterItem(ItemStack itemStack, GadgetType gadgetType, UltraPlayer player) {
ItemMeta itemMeta = itemStack.getItemMeta();
if (UltraCosmeticsData.get().isAmmoEnabled() && gadgetType.requiresAmmo()) {
List<String> loreList = new ArrayList<>();
if (itemMeta.hasLore()) {
loreList = itemMeta.getLore();
}
loreList.add("");
int ammo = player.getAmmo(gadgetType.toString().toLowerCase());
loreList.add(MessageManager.getMessage("Ammo").replace("%ammo%", "" + ammo));
loreList.add(MessageManager.getMessage("Right-Click-Buy-Ammo"));
if (SettingsManager.getConfig().getBoolean("Ammo-System-For-Gadgets.Show-Ammo-In-Menu-As-Item-Amount")
&& !(player.getCurrentGadget() != null
&& player.getCurrentGadget().getType() == gadgetType)) {
itemStack.setAmount(Math.max(1, Math.min(64, ammo)));
}
itemMeta.setLore(loreList);
}
itemStack.setItemMeta(itemMeta);
return itemStack;
}
@Override
public List<GadgetType> enabled() {
return GadgetType.enabled();
}
@Override
protected void toggleOn(UltraPlayer ultraPlayer, GadgetType gadgetType, UltraCosmetics ultraCosmetics) {
gadgetType.equip(ultraPlayer, ultraCosmetics);
}
@Override
protected void toggleOff(UltraPlayer ultraPlayer) {
ultraPlayer.removeGadget();
}
@Override
protected Cosmetic getCosmetic(UltraPlayer ultraPlayer) {
return ultraPlayer.getCurrentGadget();
}
}