史诗级大饼,请叫我黑饼王。

This commit is contained in:
坏黑
2018-08-23 23:59:20 +08:00
parent 600ac49622
commit 24556b9f2a
64 changed files with 2683 additions and 944 deletions

View File

@@ -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(

View File

@@ -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);
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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);
}

View File

@@ -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();
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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()));
}
});
}
}