史诗级大饼,请叫我黑饼王。
This commit is contained in:
@@ -7,6 +7,9 @@ import org.bukkit.inventory.ItemStack;
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedList;
|
||||
|
||||
/**
|
||||
* @author sky
|
||||
*/
|
||||
public class InventoryUtil {
|
||||
|
||||
public final static LinkedList<Integer> SLOT_OF_CENTENTS = new LinkedList<>(Arrays.asList(
|
||||
|
||||
@@ -34,6 +34,9 @@ import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
/**
|
||||
* @author sky
|
||||
*/
|
||||
public class ItemUtils {
|
||||
|
||||
private static FileConfiguration itemdir = null;
|
||||
@@ -418,11 +421,11 @@ public class ItemUtils {
|
||||
meta.setLore(asString(section.getStringList("lore"), papiPlayer));
|
||||
}
|
||||
// 附魔
|
||||
if (section.contains("enchants")) {
|
||||
for (String preEnchant : section.getConfigurationSection("enchants").getKeys(false)) {
|
||||
if (section.contains("enchant")) {
|
||||
for (String preEnchant : section.getConfigurationSection("enchant").getKeys(false)) {
|
||||
Enchantment enchant = asEnchantment(preEnchant);
|
||||
if (enchant != null) {
|
||||
meta.addEnchant(enchant, section.getInt("enchants." + preEnchant), true);
|
||||
meta.addEnchant(enchant, section.getInt("enchant." + preEnchant), true);
|
||||
} else {
|
||||
TLocale.Logger.error("ITEM-UTILS.FAIL-LOAD-ENCHANTS", preEnchant);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,176 @@
|
||||
package me.skymc.taboolib.inventory.builder;
|
||||
|
||||
import com.ilummc.tlib.resources.TLocale;
|
||||
import me.skymc.taboolib.TabooLib;
|
||||
import me.skymc.taboolib.string.ArrayUtils;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.banner.Pattern;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.*;
|
||||
import org.bukkit.potion.PotionData;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author sky
|
||||
* @Since 2018-08-22 11:37
|
||||
* @BuilderVersion 1.0
|
||||
*/
|
||||
public class ItemBuilder {
|
||||
|
||||
private ItemStack itemStack;
|
||||
private ItemMeta itemMeta;
|
||||
|
||||
public ItemBuilder(Material material) {
|
||||
this(material, 1, 0);
|
||||
}
|
||||
|
||||
public ItemBuilder(Material material, int amount) {
|
||||
this(material, amount, 0);
|
||||
}
|
||||
|
||||
public ItemBuilder(Material material, int amount, int damage) {
|
||||
itemStack = new ItemStack(material, amount, (short) damage);
|
||||
itemMeta = itemStack.getItemMeta();
|
||||
}
|
||||
|
||||
public ItemBuilder material(int id) {
|
||||
itemStack.setType(Material.getMaterial(id));
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder material(String material) {
|
||||
itemStack.setType(Material.getMaterial(material));
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder material(Material material) {
|
||||
itemStack.setType(material);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder amount(int amount) {
|
||||
itemStack.setAmount(amount);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder damage(int damage) {
|
||||
itemStack.setDurability((short) damage);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder name(String name) {
|
||||
itemMeta.setDisplayName(name);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder lore(List<String> lore) {
|
||||
itemMeta.setLore(lore);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder lore(String... lore) {
|
||||
itemMeta.setLore(ArrayUtils.asList(lore));
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder flags(ItemFlag... flags) {
|
||||
itemMeta.addItemFlags(flags);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder enchant(Enchantment enchantment, int level) {
|
||||
return enchant(enchantment, level, false);
|
||||
}
|
||||
|
||||
public ItemBuilder enchant(Enchantment enchantment, int level, boolean bypass) {
|
||||
itemMeta.addEnchant(enchantment, level, bypass);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder shiny() {
|
||||
return enchant(Enchantment.LURE, 1, true).flags(ItemFlag.values());
|
||||
}
|
||||
|
||||
public ItemBuilder color(Color color) {
|
||||
if (itemMeta instanceof LeatherArmorMeta) {
|
||||
((LeatherArmorMeta) itemMeta).setColor(color);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder banner(Pattern... patterns) {
|
||||
if (itemMeta instanceof BannerMeta) {
|
||||
Arrays.stream(patterns).forEach(pattern -> ((BannerMeta) itemMeta).addPattern(pattern));
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder potionData(PotionData potionData) {
|
||||
if (itemMeta instanceof PotionMeta) {
|
||||
((PotionMeta) itemMeta).setBasePotionData(potionData);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder potionColor(Color color) {
|
||||
if (itemMeta instanceof PotionMeta) {
|
||||
((PotionMeta) itemMeta).setColor(color);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder potionEffect(PotionEffect potionEffect) {
|
||||
if (itemMeta instanceof PotionMeta) {
|
||||
((PotionMeta) itemMeta).addCustomEffect(potionEffect, false);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder potionEffect(PotionEffect potionEffect, boolean b) {
|
||||
if (itemMeta instanceof PotionMeta) {
|
||||
((PotionMeta) itemMeta).addCustomEffect(potionEffect, b);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder eggType(EntityType entityType) {
|
||||
if (itemMeta instanceof SpawnEggMeta) {
|
||||
((SpawnEggMeta) itemMeta).setSpawnedType(entityType);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder unbreakable(boolean value) {
|
||||
if (TabooLib.getVersionNumber() >= 12000) {
|
||||
itemMeta.setUnbreakable(value);
|
||||
} else {
|
||||
itemMeta.spigot().setUnbreakable(value);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder colored() {
|
||||
if (itemMeta.hasDisplayName()) {
|
||||
itemMeta.setDisplayName(TLocale.Translate.setColored(itemMeta.getDisplayName()));
|
||||
}
|
||||
if (itemMeta.hasLore()) {
|
||||
itemMeta.setLore(TLocale.Translate.setColored(itemMeta.getLore()));
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemStack build() {
|
||||
ItemStack buildItem = itemStack.clone();
|
||||
if (itemMeta != null) {
|
||||
buildItem.setItemMeta(itemMeta.clone());
|
||||
}
|
||||
return buildItem;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
package me.skymc.taboolib.inventory.builder;
|
||||
|
||||
import me.skymc.taboolib.inventory.builder.menu.MenuBuilderCallable;
|
||||
import me.skymc.taboolib.inventory.builder.menu.MenuBuilderHolder;
|
||||
import me.skymc.taboolib.inventory.builder.menu.MenuBuilderItem;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* @Author sky
|
||||
* @Since 2018-08-22 13:40
|
||||
* @BuilderVersion 1.0
|
||||
*/
|
||||
public class MenuBuilder {
|
||||
|
||||
private boolean lock;
|
||||
private String name;
|
||||
private int rows = 9;
|
||||
|
||||
private HashMap<Integer, MenuBuilderItem> items = new HashMap<>();
|
||||
|
||||
public MenuBuilder() {
|
||||
this(true);
|
||||
}
|
||||
|
||||
public MenuBuilder(boolean lock) {
|
||||
this.lock = lock;
|
||||
}
|
||||
|
||||
public MenuBuilder lock(boolean lock) {
|
||||
this.lock = lock;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MenuBuilder name(String name) {
|
||||
this.name = name;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MenuBuilder rows(int rows) {
|
||||
this.rows = rows * 9;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MenuBuilder item(ItemStack itemStack, int... slots) {
|
||||
Arrays.stream(slots).forEach(slot -> items.put(slot, new MenuBuilderItem(itemStack, null)));
|
||||
return this;
|
||||
}
|
||||
|
||||
public MenuBuilder item(ItemStack itemStack, MenuBuilderCallable callable, int... slots) {
|
||||
Arrays.stream(slots).forEach(slot -> items.put(slot, new MenuBuilderItem(itemStack, callable)));
|
||||
return this;
|
||||
}
|
||||
|
||||
public Inventory build() {
|
||||
Inventory inventory = Bukkit.createInventory(new MenuBuilderHolder(lock, items), rows, name);
|
||||
items.forEach((key, value) -> inventory.setItem(key, value.getItemStack()));
|
||||
return inventory;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package me.skymc.taboolib.inventory.builder.menu;
|
||||
|
||||
/**
|
||||
* @Author sky
|
||||
* @Since 2018-08-22 15:41
|
||||
*/
|
||||
public interface MenuBuilderCallable {
|
||||
|
||||
void call(MenuBuilderEvent event);
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package me.skymc.taboolib.inventory.builder.menu;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
/**
|
||||
* @Author sky
|
||||
* @Since 2018-08-22 15:44
|
||||
*/
|
||||
public class MenuBuilderEvent {
|
||||
|
||||
private final InventoryClickEvent parentEvent;
|
||||
private final Player player;
|
||||
private final ItemStack clickItem;
|
||||
private final int clickSlot;
|
||||
|
||||
public MenuBuilderEvent(InventoryClickEvent parentEvent, Player player, ItemStack clickItem, int clickSlot) {
|
||||
this.parentEvent = parentEvent;
|
||||
this.player = player;
|
||||
this.clickItem = clickItem;
|
||||
this.clickSlot = clickSlot;
|
||||
}
|
||||
|
||||
public InventoryClickEvent getParentEvent() {
|
||||
return parentEvent;
|
||||
}
|
||||
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
public ItemStack getClickItem() {
|
||||
return clickItem;
|
||||
}
|
||||
|
||||
public int getClickSlot() {
|
||||
return clickSlot;
|
||||
}
|
||||
|
||||
public void setCancelled(boolean canceled) {
|
||||
parentEvent.setCancelled(canceled);
|
||||
}
|
||||
|
||||
public boolean isCancelled() {
|
||||
return parentEvent.isCancelled();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package me.skymc.taboolib.inventory.builder.menu;
|
||||
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.InventoryHolder;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* @author sky
|
||||
* @Since 2018-08-22 13:40
|
||||
*/
|
||||
public class MenuBuilderHolder implements InventoryHolder {
|
||||
|
||||
private final boolean lock;
|
||||
private final HashMap<Integer, MenuBuilderItem> items;
|
||||
|
||||
public MenuBuilderHolder(boolean lock, HashMap<Integer, MenuBuilderItem> items) {
|
||||
this.lock = lock;
|
||||
this.items = items;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Inventory getInventory() {
|
||||
return null;
|
||||
}
|
||||
|
||||
// *********************************
|
||||
//
|
||||
// Getter and Setter
|
||||
//
|
||||
// *********************************
|
||||
|
||||
public boolean isLock() {
|
||||
return lock;
|
||||
}
|
||||
|
||||
public HashMap<Integer, MenuBuilderItem> getItems() {
|
||||
return items;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package me.skymc.taboolib.inventory.builder.menu;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
/**
|
||||
* @Author sky
|
||||
* @Since 2018-08-22 15:36
|
||||
*/
|
||||
public class MenuBuilderItem {
|
||||
|
||||
private final ItemStack itemStack;
|
||||
private final MenuBuilderCallable callable;
|
||||
|
||||
public MenuBuilderItem(ItemStack itemStack, MenuBuilderCallable callable) {
|
||||
this.itemStack = itemStack;
|
||||
this.callable = callable;
|
||||
}
|
||||
|
||||
public ItemStack getItemStack() {
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
public MenuBuilderCallable getCallable() {
|
||||
return callable;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package me.skymc.taboolib.inventory.builder.menu;
|
||||
|
||||
import me.skymc.taboolib.listener.TListener;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.InventoryAction;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* @Author sky
|
||||
* @Since 2018-08-22 13:40
|
||||
*/
|
||||
@TListener
|
||||
public class MenuBuilderListener implements Listener {
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||
public void onClick(InventoryClickEvent e) {
|
||||
if (!(e.getInventory().getHolder() instanceof MenuBuilderHolder)) {
|
||||
return;
|
||||
}
|
||||
MenuBuilderHolder holder = (MenuBuilderHolder) e.getInventory().getHolder();
|
||||
if (holder.isLock() || e.getAction() == InventoryAction.COLLECT_TO_CURSOR) {
|
||||
e.setCancelled(true);
|
||||
}
|
||||
Optional.ofNullable(holder.getItems().get(e.getRawSlot())).ifPresent(item -> {
|
||||
if (item.getCallable() != null) {
|
||||
item.getCallable().call(new MenuBuilderEvent(e, (Player) e.getWhoClicked(), e.getCurrentItem(), e.getRawSlot()));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user