mirror of
https://github.com/funkemunky/KauriV3.git
synced 2026-06-07 16:42:17 +00:00
241 lines
6.8 KiB
Java
241 lines
6.8 KiB
Java
package dev.brighten.ac.utils;
|
|
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.ChatColor;
|
|
import org.bukkit.Color;
|
|
import org.bukkit.Material;
|
|
import org.bukkit.enchantments.Enchantment;
|
|
import org.bukkit.inventory.ItemStack;
|
|
import org.bukkit.inventory.meta.ItemMeta;
|
|
import org.bukkit.inventory.meta.LeatherArmorMeta;
|
|
import org.bukkit.inventory.meta.SkullMeta;
|
|
import org.bukkit.material.MaterialData;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
import java.util.stream.Collectors;
|
|
|
|
/**
|
|
* This is a chainable builder for {@link ItemStack}s in {@link Bukkit} <br>
|
|
* Example Usage:<br>
|
|
* {@code ItemStack is = new ItemBuilder(Material.LEATHER_HELMET).amount(2).data(4).durability(4).enchantment(Enchantment.ARROW_INFINITE).enchantment(Enchantment.LUCK, 2).name(ChatColor.RED + "the name").lore(ChatColor.GREEN + "line 1").lore(ChatColor.BLUE + "line 2").color(Color.MAROON).build();
|
|
*
|
|
* @author MiniDigger, edited by Alexandeh
|
|
* @version 1.3
|
|
*/
|
|
public class ItemBuilder {
|
|
private final ItemStack is;
|
|
/**
|
|
* Inits the builder with the given {@link Material}
|
|
*
|
|
* @param mat the {@link Material} to start the builder from
|
|
* @since 1.0
|
|
*/
|
|
public ItemBuilder(Material mat) {
|
|
is = new ItemStack(mat);
|
|
}
|
|
|
|
/**
|
|
* Inits the builder with the given {@link ItemStack}
|
|
*
|
|
* @param is the {@link ItemStack} to start the builder from
|
|
* @since 1.0
|
|
*/
|
|
public ItemBuilder(ItemStack is) {
|
|
this.is = is;
|
|
}
|
|
|
|
/**
|
|
* Changes the amount of the {@link ItemStack}
|
|
*
|
|
* @param amount the new amount to set
|
|
* @return this builder for chaining
|
|
* @since 1.0
|
|
*/
|
|
public ItemBuilder amount(int amount) {
|
|
is.setAmount(amount);
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Changes the display name of the {@link ItemStack}
|
|
*
|
|
* @param name the new display name to set
|
|
* @return this builder for chaining
|
|
* @since 1.0
|
|
*/
|
|
public ItemBuilder name(String name) {
|
|
ItemMeta meta = is.getItemMeta();
|
|
meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', name));
|
|
is.setItemMeta(meta);
|
|
return this;
|
|
}
|
|
|
|
public ItemBuilder owner(String name) {
|
|
final SkullMeta meta = (SkullMeta) is.getItemMeta();
|
|
meta.setOwner(name);
|
|
is.setItemMeta(meta);
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Adds a new line to the lore of the {@link ItemStack}
|
|
*
|
|
* @param name the new line to add
|
|
* @return this builder for chaining
|
|
* @since 1.0
|
|
*/
|
|
public ItemBuilder lore(String name) {
|
|
ItemMeta meta = is.getItemMeta();
|
|
List<String> lore = meta.getLore();
|
|
if (lore == null) {
|
|
lore = new ArrayList<>();
|
|
}
|
|
lore.add(name);
|
|
meta.setLore(lore);
|
|
is.setItemMeta(meta);
|
|
return this;
|
|
}
|
|
|
|
public ItemBuilder lore(String... lore) {
|
|
ItemMeta meta = is.getItemMeta();
|
|
List<String> lores = Arrays.stream(lore)
|
|
.map(s -> ChatColor.translateAlternateColorCodes('&', s))
|
|
.collect(Collectors.toList());
|
|
meta.setLore(lores);
|
|
is.setItemMeta(meta);
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* sets the lore of the {@link ItemStack}
|
|
*
|
|
* @param lore the loret o set
|
|
* @return this builder for chaining
|
|
* @since 1.2
|
|
*/
|
|
public ItemBuilder lore(List<String> lore) {
|
|
ItemMeta meta = is.getItemMeta();
|
|
meta.setLore(lore);
|
|
is.setItemMeta(meta);
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Changes the durability of the {@link ItemStack}
|
|
*
|
|
* @param durability the new durability to set
|
|
* @return this builder for chaining
|
|
* @since 1.0
|
|
*/
|
|
public ItemBuilder durability(int durability) {
|
|
is.setDurability((short) durability);
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Changes the data of the {@link ItemStack}
|
|
*
|
|
* @param data the new data to set
|
|
* @return this builder for chaining
|
|
* @since 1.0
|
|
*/
|
|
@SuppressWarnings("deprecation")
|
|
public ItemBuilder data(int data) {
|
|
is.setData(new MaterialData(is.getType(), (byte) data));
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Adds an {@link Enchantment} with the given level to the {@link ItemStack}
|
|
*
|
|
* @param enchantment the enchantment to add
|
|
* @param level the level of the enchantment
|
|
* @return this builder for chaining
|
|
* @since 1.0
|
|
*/
|
|
public ItemBuilder enchantment(Enchantment enchantment, int level) {
|
|
is.addUnsafeEnchantment(enchantment, level);
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Adds an {@link Enchantment} with the level 1 to the {@link ItemStack}
|
|
*
|
|
* @param enchantment the enchantment to add
|
|
* @return this builder for chaining
|
|
* @since 1.0
|
|
*/
|
|
public ItemBuilder enchantment(Enchantment enchantment) {
|
|
is.addUnsafeEnchantment(enchantment, 1);
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Changes the {@link Material} of the {@link ItemStack}
|
|
*
|
|
* @param material the new material to set
|
|
* @return this builder for chaining
|
|
* @since 1.0
|
|
*/
|
|
public ItemBuilder type(Material material) {
|
|
is.setType(material);
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Clears the lore of the {@link ItemStack}
|
|
*
|
|
* @return this builder for chaining
|
|
* @since 1.0
|
|
*/
|
|
public ItemBuilder clearLore() {
|
|
ItemMeta meta = is.getItemMeta();
|
|
meta.setLore(new ArrayList<>());
|
|
is.setItemMeta(meta);
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Clears the list of {@link Enchantment}s of the {@link ItemStack}
|
|
*
|
|
* @return this builder for chaining
|
|
* @since 1.0
|
|
*/
|
|
public ItemBuilder clearEnchantments() {
|
|
is.getEnchantments().keySet().forEach(e -> is.removeEnchantment(e));
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Sets the {@link Color} of a part of leather armor
|
|
*
|
|
* @param color the {@link Color} to use
|
|
* @return this builder for chaining
|
|
* @since 1.1
|
|
*/
|
|
public ItemBuilder color(Color color) {
|
|
if (is.getType() == XMaterial.LEATHER_BOOTS.parseMaterial()
|
|
|| is.getType() == XMaterial.LEATHER_CHESTPLATE .parseMaterial()
|
|
|| is.getType() == XMaterial.LEATHER_HELMET.parseMaterial()
|
|
|| is.getType() == XMaterial.LEATHER_LEGGINGS.parseMaterial()) {
|
|
LeatherArmorMeta meta = (LeatherArmorMeta) is.getItemMeta();
|
|
meta.setColor(color);
|
|
is.setItemMeta(meta);
|
|
return this;
|
|
} else {
|
|
throw new IllegalArgumentException("color() only applicable for leather armor!");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Builds the {@link ItemStack}
|
|
*
|
|
* @return the created {@link ItemStack}
|
|
* @since 1.0
|
|
*/
|
|
public ItemStack build() {
|
|
return is;
|
|
}
|
|
} |