/*******************************************************************************
* Copyright 2014 Tobias Welther
*
* 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 de.tobiyas.racesandclasses.traitcontainer.traitgui;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.HumanEntity;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryView;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import de.tobiyas.racesandclasses.datacontainer.traitholdercontainer.TraitHolderCombinder;
import de.tobiyas.racesandclasses.playermanagement.player.RaCPlayer;
import de.tobiyas.racesandclasses.traitcontainer.interfaces.annotations.bypasses.StaticTrait;
import de.tobiyas.racesandclasses.traitcontainer.interfaces.markerinterfaces.Trait;
public class TraitInventory extends InventoryView {
/**
* The Player this inventory belongs too
*/
private final RaCPlayer player;
/**
* The Inventory to show
*/
private final Inventory traitInventory;
/**
* This is an Inventory generated to show ALL visible Traits of a player
* in one inventory.
*
* @param player to show.
*/
public TraitInventory(RaCPlayer player) {
this.player = player;
Set<Trait> traits = TraitHolderCombinder.getAllTraitsOfPlayer(this.player);
for(Iterator<Trait> it = traits.iterator(); it.hasNext();) if(it.next() instanceof StaticTrait) it.remove();
int size = traits.size();
size = ((size / 9) + 1) * 9;
if(size < 27) size = 27;
this.traitInventory = Bukkit.createInventory(player.getPlayer(), size, "Traits of: " + this.player.getName());
fillInventory(traits);
}
/**
* Fills the Inventory with infos to all Traits.
*
* @param traits to fill with
*/
private void fillInventory(Set<Trait> traits) {
for(Trait trait : traits){
ItemStack traitStack = new ItemStack(Material.ANVIL);
ItemMeta meta = traitStack.getItemMeta();
List<String> lore = new LinkedList<String>();
meta.setDisplayName(ChatColor.LIGHT_PURPLE + trait.getDisplayName());
String traitConfig = trait.getPrettyConfiguration();
String[] words = {"No", "ConfigTotal", "Present."};
if(traitConfig != null){
words = traitConfig.split(" ");
}
lore.add("- Trait: " + trait.getName());
String currentLine = "- " + words[0];
for(int i = 1; i < words.length; i++){
String currentWord = words[i];
if(currentLine.length() + words.length + 1 > 31){
lore.add(currentLine);
currentLine = currentWord;
}else{
currentLine += " " + currentWord;
}
}
if(currentLine.length() > 0){
lore.add(currentLine);
}
meta.setLore(lore);
traitStack.setItemMeta(meta);
this.traitInventory.addItem(traitStack);
}
}
@Override
public Inventory getTopInventory() {
return traitInventory;
}
@Override
public Inventory getBottomInventory() {
return Bukkit.createInventory(player.getPlayer(), 36);
}
@Override
public HumanEntity getPlayer() {
return player.getPlayer();
}
@Override
public InventoryType getType() {
return InventoryType.CHEST;
}
}