bentobox/src/main/java/world/bentobox/bentobox/api/panels/PanelItem.java

190 lines
5.1 KiB
Java

package world.bentobox.bentobox.api.panels;
import java.util.List;
import java.util.Optional;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import world.bentobox.bentobox.api.panels.builders.PanelItemBuilder;
import world.bentobox.bentobox.api.user.User;
/**
* Represents an item in a {@link Panel}
* @author tastybento
*
*/
public class PanelItem {
/**
* @return an empty PanelItem
*/
public static PanelItem empty() {
return new PanelItemBuilder().build();
}
private ItemStack icon;
private ClickHandler clickHandler;
private List<String> description;
private String name;
private boolean glow;
private ItemMeta meta;
private final String playerHeadName;
private boolean invisible;
public PanelItem(PanelItemBuilder builtItem) {
this.icon = builtItem.getIcon();
this.icon.setAmount(builtItem.getAmount());
this.playerHeadName = builtItem.getPlayerHeadName();
// Get the meta
meta = icon.getItemMeta();
if (meta != null) {
// Set flags to neaten up the view
meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
meta.addItemFlags(ItemFlag.HIDE_DESTROYS);
meta.addItemFlags(ItemFlag.HIDE_PLACED_ON);
meta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
meta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS);
icon.setItemMeta(meta);
}
this.clickHandler = builtItem.getClickHandler();
// Create the final item
setName(builtItem.getName());
setDescription(builtItem.getDescription());
setGlow(builtItem.isGlow());
setInvisible(builtItem.isInvisible());
}
/**
* @return the icon itemstack
*/
public ItemStack getItem() {
return icon;
}
public List<String> getDescription() {
return description;
}
public void setDescription(List<String> description) {
this.description = description;
if (meta != null) {
meta.setLore(description);
icon.setItemMeta(meta);
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
if (meta != null) {
meta.setDisplayName(name);
meta.setLocalizedName(name); //Localized name cannot be overridden by the player using an anvils
icon.setItemMeta(meta);
}
}
public boolean isInvisible() {
return invisible;
}
public void setInvisible(boolean invisible) {
this.invisible = invisible;
if (meta != null) {
if (invisible) {
meta.addEnchant(Enchantment.VANISHING_CURSE, 1, true);
meta.removeItemFlags(ItemFlag.HIDE_ENCHANTS);
} else {
meta.removeEnchant(Enchantment.VANISHING_CURSE);
meta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
}
icon.setItemMeta(meta);
}
}
public Optional<ClickHandler> getClickHandler() {
return Optional.ofNullable(clickHandler);
}
/**
* @param clickHandler the clickHandler to set
* @since 1.6.0
*/
public void setClickHandler(ClickHandler clickHandler) {
this.clickHandler = clickHandler;
}
public boolean isGlow() {
return glow;
}
public void setGlow(boolean glow) {
this.glow = glow;
if (meta != null) {
meta.addEnchant(Enchantment.ARROW_DAMAGE, 0, glow);
icon.setItemMeta(meta);
}
}
/**
* @return the playerHead
*/
public boolean isPlayerHead() {
return playerHeadName != null && !playerHeadName.isEmpty();
}
/**
* @return the playerHeadName
* @since 1.9.0
*/
public String getPlayerHeadName() {
return playerHeadName;
}
/**
* Click handler interface
*
*/
public interface ClickHandler {
/**
* This is executed when the icon is clicked
* @param panel - the panel that is being clicked
* @param user - the User
* @param clickType - the click type
* @param slot - the slot that was clicked
* @return true if the click event should be cancelled
*/
boolean onClick(Panel panel, User user, ClickType clickType, int slot);
}
public void setHead(ItemStack itemStack) {
// update amount before replacing.
itemStack.setAmount(this.icon.getAmount());
this.icon = itemStack;
// Get the meta
meta = icon.getItemMeta();
if (meta != null) {
// Set flags to neaten up the view
meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
meta.addItemFlags(ItemFlag.HIDE_DESTROYS);
meta.addItemFlags(ItemFlag.HIDE_PLACED_ON);
meta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
icon.setItemMeta(meta);
}
// Create the final item
setName(name);
setDescription(description);
setGlow(glow);
}
}