From 7215bb2bc1ca85f535cf72851d06905ce53fb0dd Mon Sep 17 00:00:00 2001 From: D0gma_ Date: Tue, 8 Aug 2023 17:56:15 +0200 Subject: [PATCH] Add BannerBuilder and FireworkBuilder --- README.md | 2 +- .../invui/item/builder/BannerBuilder.java | 74 +++++++++++++++++++ .../invui/item/builder/FireworkBuilder.java | 73 ++++++++++++++++++ 3 files changed, 148 insertions(+), 1 deletion(-) create mode 100644 invui-core/src/main/java/xyz/xenondevs/invui/item/builder/BannerBuilder.java create mode 100644 invui-core/src/main/java/xyz/xenondevs/invui/item/builder/FireworkBuilder.java diff --git a/README.md b/README.md index b1ab139..877a275 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Supports all versions from 1.14.0 to 1.20.1. * VirtualInventory: Store real items inside GUIs, customize maximum stack size per slot, etc. * Easy way to add localization using the ItemProvider system and the built-in ItemBuilder * Supports custom textures (forced resource pack system, compatible with AuthMe) -* Advanced ItemBuilder (Normal, Potion, Skull) with BaseComponent support +* Advanced ItemBuilder (Normal, Potion, Skull, Banner, Firework) with BaseComponent support * Support for BaseComponents in inventory titles * Uncloseable inventories * GUI Animations diff --git a/invui-core/src/main/java/xyz/xenondevs/invui/item/builder/BannerBuilder.java b/invui-core/src/main/java/xyz/xenondevs/invui/item/builder/BannerBuilder.java new file mode 100644 index 0000000..170d90d --- /dev/null +++ b/invui-core/src/main/java/xyz/xenondevs/invui/item/builder/BannerBuilder.java @@ -0,0 +1,74 @@ +package xyz.xenondevs.invui.item.builder; + +import java.util.ArrayList; +import java.util.List; +import org.bukkit.DyeColor; +import org.bukkit.Material; +import org.bukkit.block.banner.Pattern; +import org.bukkit.block.banner.PatternType; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.BannerMeta; +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public final class BannerBuilder extends AbstractItemBuilder { + + private List patterns = new ArrayList<>(); + + public BannerBuilder(@NotNull Material material) { + super(material); + } + + public BannerBuilder(@NotNull Material material, int amount) { + super(material, amount); + } + + public BannerBuilder(@NotNull ItemStack base) { + super(base); + } + + @Contract("_ -> this") + public @NotNull BannerBuilder addPattern(@NotNull Pattern pattern) { + patterns.add(pattern); + return this; + } + + @Contract("_, _ -> this") + public @NotNull BannerBuilder addPattern(@NotNull DyeColor color, @NotNull PatternType type) { + patterns.add(new Pattern(color, type)); + return this; + } + + @Contract("_ -> this") + public @NotNull BannerBuilder setPatterns(@NotNull List<@NotNull Pattern> patterns) { + this.patterns = patterns; + return this; + } + + @Contract("-> this") + public @NotNull BannerBuilder clearPatterns() { + patterns.clear(); + return this; + } + + @Contract(value = "_ -> new", pure = true) + @Override + public @NotNull ItemStack get(@Nullable String lang) { + ItemStack item = super.get(lang); + BannerMeta meta = (BannerMeta) item.getItemMeta(); + + meta.setPatterns(patterns); + + item.setItemMeta(meta); + return item; + } + + @Override + public @NotNull BannerBuilder clone() { + BannerBuilder builder = super.clone(); + builder.patterns = new ArrayList<>(patterns); + return builder; + } + +} diff --git a/invui-core/src/main/java/xyz/xenondevs/invui/item/builder/FireworkBuilder.java b/invui-core/src/main/java/xyz/xenondevs/invui/item/builder/FireworkBuilder.java new file mode 100644 index 0000000..62f8cf4 --- /dev/null +++ b/invui-core/src/main/java/xyz/xenondevs/invui/item/builder/FireworkBuilder.java @@ -0,0 +1,73 @@ +package xyz.xenondevs.invui.item.builder; + +import java.util.ArrayList; +import java.util.List; +import org.bukkit.FireworkEffect; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.FireworkMeta; +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public final class FireworkBuilder extends AbstractItemBuilder { + + private List effects = new ArrayList<>(); + + public FireworkBuilder() { + super(Material.FIREWORK_ROCKET); + } + + public FireworkBuilder(int amount) { + super(Material.FIREWORK_ROCKET, amount); + } + + public FireworkBuilder(@NotNull ItemStack base) { + super(base); + } + + @Contract("_ -> this") + public @NotNull FireworkBuilder addFireworkEffect(@NotNull FireworkEffect effect) { + effects.add(effect); + return this; + } + + @Contract("_ -> this") + public @NotNull FireworkBuilder addFireworkEffect(@NotNull FireworkEffect.Builder builder) { + effects.add(builder.build()); + return this; + } + + @Contract("_ -> this") + public @NotNull FireworkBuilder setFireworkEffects(@NotNull List<@NotNull FireworkEffect> effects) { + this.effects = effects; + return this; + } + + @Contract("-> this") + public @NotNull FireworkBuilder clearFireworkEffects() { + effects.clear(); + return this; + } + + @Contract(value = "_ -> new", pure = true) + @Override + public @NotNull ItemStack get(@Nullable String lang) { + ItemStack item = super.get(lang); + FireworkMeta meta = (FireworkMeta) item.getItemMeta(); + + meta.clearEffects(); + meta.addEffects(effects); + + item.setItemMeta(meta); + return item; + } + + @Override + public @NotNull FireworkBuilder clone() { + FireworkBuilder builder = super.clone(); + builder.effects = new ArrayList<>(effects); + return builder; + } + +}