diff --git a/src/main/java/me/trouper/trimalias/server/systems/builders/ItemBuilder.java b/src/main/java/me/trouper/trimalias/server/systems/builders/ItemBuilder.java new file mode 100644 index 0000000..dbb697d --- /dev/null +++ b/src/main/java/me/trouper/trimalias/server/systems/builders/ItemBuilder.java @@ -0,0 +1,103 @@ +package me.trouper.trimalias.server.systems.builders; + +import org.bukkit.Material; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +public class ItemBuilder { + + private ItemStack stack; + private ItemMeta meta; + + public ItemBuilder() { + this(new ItemStack(Material.STONE)); + } + + public ItemBuilder(ItemStack stack) { + this.stack = stack; + this.meta = this.stack.getItemMeta(); + } + + public ItemBuilder material(Material m) { + stack.setType(m); + return this; + } + + public ItemBuilder name(String s) { + meta.setDisplayName(s); + return this; + } + + public ItemBuilder lore(String s) { + List lore = meta.hasLore() ? meta.getLore() : new ArrayList<>(); + lore.add(s); + meta.setLore(lore); + return this; + } + + public ItemBuilder lore(Iterable s) { + s.forEach(this::lore); + return this; + } + + public ItemBuilder count(int c) { + stack.setAmount(c); + return this; + } + + public ItemBuilder enchant(Enchantment e, int level) { + meta.addEnchant(e,level,true); + return this; + } + + public ItemBuilder flag(ItemFlag... f) { + meta.addItemFlags(f); + return this; + } + + public ItemBuilder attribute(Attribute a, AttributeModifier am) { + meta.addAttributeModifier(a,am); + return this; + } + + public ItemBuilder unbreakable(boolean b) { + meta.setUnbreakable(b); + return this; + } + + public ItemBuilder customModelData(int d) { + meta.setCustomModelData(d); + return this; + } + + public ItemBuilder runTaskItem(Function task) { + this.stack = task.apply(build()); + return this; + } + + public ItemBuilder runTaskMeta(Function task) { + this.meta = task.apply(meta); + return this; + } + + public ItemStack build() { + stack.setItemMeta(meta); + return stack; + } + + public static ItemBuilder create() { + return new ItemBuilder(); + } + + public static ItemBuilder create(ItemStack item) { + return new ItemBuilder(item); + } +} \ No newline at end of file diff --git a/src/main/java/me/trouper/trimalias/server/systems/items/CustomItem.java b/src/main/java/me/trouper/trimalias/server/systems/items/CustomItem.java index fdc9db4..f14ecc7 100644 --- a/src/main/java/me/trouper/trimalias/server/systems/items/CustomItem.java +++ b/src/main/java/me/trouper/trimalias/server/systems/items/CustomItem.java @@ -1,15 +1,15 @@ package me.trouper.trimalias.server.systems.items; import com.google.gson.Gson; -import io.github.itzispyder.pdk.Global; -import io.github.itzispyder.pdk.plugin.builders.ItemBuilder; +import me.trouper.trimalias.server.Main; +import me.trouper.trimalias.server.systems.builders.ItemBuilder; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import java.util.Arrays; -public abstract class CustomItem implements Global { +public abstract class CustomItem implements Main { public abstract void createItem(ItemBuilder item); diff --git a/src/main/java/me/trouper/trimalias/server/systems/items/ItemManager.java b/src/main/java/me/trouper/trimalias/server/systems/items/ItemManager.java index c07d67d..22602a9 100644 --- a/src/main/java/me/trouper/trimalias/server/systems/items/ItemManager.java +++ b/src/main/java/me/trouper/trimalias/server/systems/items/ItemManager.java @@ -1,8 +1,8 @@ package me.trouper.trimalias.server.systems.items; import com.google.gson.Gson; -import io.github.itzispyder.pdk.Global; -import io.github.itzispyder.pdk.plugin.builders.ItemBuilder; +import me.trouper.trimalias.server.Main; +import me.trouper.trimalias.server.systems.builders.ItemBuilder; import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -14,19 +14,19 @@ import java.util.HashMap; import java.util.Map; import java.util.function.Supplier; -public class ItemManager { +public class ItemManager implements Main { private static final Gson gson = new Gson(); private static final Map> itemRegistry = new HashMap<>(); public static NamespacedKey registerItem(String namespace, Supplier context) { - NamespacedKey key = new NamespacedKey(Global.instance.getPlugin(), "items/" + namespace); + NamespacedKey key = new NamespacedKey(main.getPlugin(), "items/" + namespace); itemRegistry.put(key, context); return key; } public static ItemStack createItemContext(String namespace) { - NamespacedKey key = new NamespacedKey(Global.instance.getPlugin(), "items/" + namespace); + NamespacedKey key = new NamespacedKey(main.getPlugin(), "items/" + namespace); Supplier registry = itemRegistry.get(key); if (registry == null) throw new IllegalArgumentException("context not found in item registry");