/*
* Copyright 2015 Demigods RPG
* Copyright 2015 Alexander Chauncey
* Copyright 2015 Alex Bennett
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.demigodsrpg.gui;
// TODO This needs major reorganization to make it look nice
import com.demigodsrpg.DGData;
import com.demigodsrpg.aspect.Aspect;
import com.demigodsrpg.enchantment.CustomEnchantments;
import com.demigodsrpg.model.PlayerModel;
import com.demigodsrpg.util.InventoryGUI;
import com.demigodsrpg.util.SlotFunction;
import com.google.common.collect.ImmutableMap;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
// TODO Format this so it is actually a list and not just jumbled together
public class AspectGUI implements InventoryGUI {
public static final String INVENTORY_NAME = "Aspect Tree";
private final List<Inventory> INVENTORY_LIST;
private final ImmutableMap<Integer, String> FUNCTION_MAP;
public AspectGUI(final Player player) {
// Player model
PlayerModel model = DGData.PLAYER_R.fromPlayer(player);
// FUNCTION MAP
ImmutableMap.Builder<Integer, String> builder = ImmutableMap.builder();
builder.put(25, SlotFunction.PREVIOUS_PAGE);
builder.put(26, SlotFunction.NEXT_PAGE);
// INVENTORY LIST
INVENTORY_LIST = new ArrayList<>();
List<ItemStack> items = new ArrayList<>();
int count = 0, icount = 0;
List<Aspect> aspects = model.getPotentialAspects(true);
Iterator<Aspect> aspectIterator = aspects.iterator();
while (aspectIterator.hasNext()) {
Aspect aspect = aspectIterator.next();
ItemStack item = aspect.getItem().clone();
ItemMeta meta = item.getItemMeta();
List<String> lore = meta.getLore();
if(model.getAspects().contains(aspect.name())) {
lore.add(ChatColor.YELLOW + "You already have this aspect!");
meta.setLore(lore);
item.setItemMeta(meta);
builder.put(count, SlotFunction.LOCKED);
} else if(model.canClaim(aspect)) {
lore.add(ChatColor.GREEN + "This aspect is claimable!");
meta.setLore(lore);
item.setItemMeta(meta);
item = CustomEnchantments.enchant(item, CustomEnchantments.CLAIMABLE, 1, false);
builder.put(count, SlotFunction.CLAIM);
} else {
item.setType(Material.BARRIER);
lore.add(ChatColor.DARK_GRAY + "This aspect is currently locked.");
if (!model.hasPrereqs(aspect)) {
lore.add(ChatColor.GRAY + "You don't have the prereqs for this aspect.");
} else if (model.getLevel() < model.costForNextAspect()) {
lore.add(ChatColor.GRAY + "You need " + model.costForNextAspect() + " ascensions to claim a new aspect.");
}
meta.setLore(lore);
item.setItemMeta(meta);
builder.put(count, SlotFunction.LOCKED);
}
items.add(count, item);
count++;
if (count % 19 == 0 || !aspectIterator.hasNext()) {
Inventory inventory = Bukkit.createInventory(player, 27, INVENTORY_NAME + " " + icount);
for (int i = 0; i < items.size(); i++) {
inventory.setItem(i, items.get(i));
}
if (icount > 0) {
inventory.setItem(25, new ItemStack(Material.PAPER, 1) {
{
ItemMeta meta = getItemMeta();
meta.setDisplayName(ChatColor.GOLD + "< PREV");
setItemMeta(meta);
}
});
}
if (aspectIterator.hasNext()) {
inventory.setItem(26, new ItemStack(Material.PAPER, 1) {
{
ItemMeta meta = getItemMeta();
meta.setDisplayName(ChatColor.GOLD + "NEXT >");
setItemMeta(meta);
}
});
}
items.clear();
count = 0;
INVENTORY_LIST.add(inventory);
icount++;
}
}
FUNCTION_MAP = builder.build();
}
@Override
public Inventory getInventory(Integer... inventory) {
if (INVENTORY_LIST.size() < 1) {
return null;
}
if (inventory.length == 0) {
return INVENTORY_LIST.get(0);
}
return INVENTORY_LIST.get(inventory[0]);
}
@Override
public String getFunction(int slot) {
if (FUNCTION_MAP.containsKey(slot)) {
return FUNCTION_MAP.get(slot);
}
return SlotFunction.NO_FUNCTION;
}
}