Add BannerBuilder and FireworkBuilder

This commit is contained in:
D0gma_ 2023-08-08 17:56:15 +02:00
parent 5844f648ff
commit 7215bb2bc1
3 changed files with 148 additions and 1 deletions

@ -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. * 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 * Easy way to add localization using the ItemProvider system and the built-in ItemBuilder
* Supports custom textures (forced resource pack system, compatible with AuthMe) * 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 * Support for BaseComponents in inventory titles
* Uncloseable inventories * Uncloseable inventories
* GUI Animations * GUI Animations

@ -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<BannerBuilder> {
private List<Pattern> 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;
}
}

@ -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<FireworkBuilder> {
private List<FireworkEffect> 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;
}
}