diff --git a/SpigotCore_Main/src/de/steamwar/inventory/BannerBuilder.java b/SpigotCore_Main/src/de/steamwar/inventory/BannerBuilder.java new file mode 100644 index 0000000..f546f3b --- /dev/null +++ b/SpigotCore_Main/src/de/steamwar/inventory/BannerBuilder.java @@ -0,0 +1,196 @@ +package de.steamwar.inventory; + +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.bukkit.inventory.meta.ItemMeta; + +import java.util.List; + +public class BannerBuilder { + + public static ItemStack createCross(DyeColor baseColor, DyeColor color) { + return new BannerBuilder(baseColor).addCross(color).build(); + } + + public static ItemStack createDiagonalCross(DyeColor baseColor, DyeColor color) { + return new BannerBuilder(baseColor).addDiagonalCross(color).build(); + } + + public static ItemStack createNumber(DyeColor baseColor, DyeColor color, int number) { + BannerBuilder builder = new BannerBuilder(baseColor); + switch (number) { + case 0: + builder.addZero(color); + break; + case 1: + builder.addOne(color); + break; + case 2: + builder.addTwo(color); + break; + case 3: + builder.addThree(color); + break; + case 4: + builder.addFour(color); + break; + case 5: + builder.addFive(color); + break; + case 6: + builder.addSix(color); + break; + case 7: + builder.addSeven(color); + break; + case 8: + builder.addEight(color); + break; + case 9: + builder.addNine(color); + break; + default: + throw new IllegalArgumentException("Number must be between 0 and 9"); + } + return builder.build(); + } + + private final BannerMeta meta; + private final ItemStack itemStack; + private final DyeColor baseColor; + + public BannerBuilder(DyeColor baseColor) { + this.baseColor = baseColor; + itemStack = new ItemStack(Material.valueOf(baseColor.name() + "_BANNER")); + meta = (BannerMeta) itemStack.getItemMeta(); + } + + public BannerBuilder addPattern(DyeColor color, PatternType patternType) { + meta.addPattern(new Pattern(color, patternType)); + return this; + } + + public BannerBuilder addCross(DyeColor color) { + addPattern(color, PatternType.STRAIGHT_CROSS); + addPattern(baseColor, PatternType.STRIPE_BOTTOM); + addPattern(baseColor, PatternType.STRIPE_TOP); + addPattern(baseColor, PatternType.STRIPE_LEFT); + return addPattern(baseColor, PatternType.STRIPE_RIGHT); + } + + public BannerBuilder addDiagonalCross(DyeColor color) { + addPattern(color, PatternType.CROSS); + addPattern(baseColor, PatternType.STRIPE_BOTTOM); + addPattern(baseColor, PatternType.STRIPE_TOP); + addPattern(baseColor, PatternType.STRIPE_LEFT); + return addPattern(baseColor, PatternType.STRIPE_RIGHT); + } + + public BannerBuilder addOne(DyeColor color) { + addPattern(color, PatternType.STRIPE_CENTER); + addPattern(color, PatternType.SQUARE_TOP_LEFT); + addPattern(baseColor, PatternType.CURLY_BORDER); + addPattern(color, PatternType.STRIPE_BOTTOM); + return addPattern(baseColor, PatternType.BORDER); + } + + public BannerBuilder addTwo(DyeColor color) { + addPattern(color, PatternType.STRIPE_TOP); + addPattern(baseColor, PatternType.CIRCLE_MIDDLE); + addPattern(color, PatternType.STRIPE_BOTTOM); + addPattern(color, PatternType.STRIPE_DOWNLEFT); + return addPattern(baseColor, PatternType.BORDER); + } + + public BannerBuilder addThree(DyeColor color) { + addPattern(color, PatternType.STRIPE_BOTTOM); + addPattern(color, PatternType.STRIPE_MIDDLE); + addPattern(color, PatternType.STRIPE_TOP); + addPattern(baseColor, PatternType.CURLY_BORDER); + addPattern(color, PatternType.STRIPE_RIGHT); + return addPattern(baseColor, PatternType.BORDER); + } + + public BannerBuilder addFour(DyeColor color) { + addPattern(color, PatternType.STRIPE_LEFT); + addPattern(baseColor, PatternType.STRIPE_BOTTOM); + addPattern(color, PatternType.STRIPE_RIGHT); + addPattern(color, PatternType.STRIPE_MIDDLE); + return addPattern(baseColor, PatternType.BORDER); + } + + public BannerBuilder addFive(DyeColor color) { + addPattern(color, PatternType.STRIPE_BOTTOM); + addPattern(baseColor, PatternType.RHOMBUS_MIDDLE); + addPattern(color, PatternType.STRIPE_TOP); + addPattern(color, PatternType.STRIPE_DOWNRIGHT); + return addPattern(baseColor, PatternType.BORDER); + } + + public BannerBuilder addSix(DyeColor color) { + addPattern(color, PatternType.STRIPE_BOTTOM); + addPattern(color, PatternType.STRIPE_RIGHT); + addPattern(baseColor, PatternType.HALF_HORIZONTAL); + addPattern(color, PatternType.STRIPE_MIDDLE); + addPattern(color, PatternType.STRIPE_TOP); + addPattern(color, PatternType.STRIPE_LEFT); + return addPattern(baseColor, PatternType.BORDER); + } + + public BannerBuilder addSeven(DyeColor color) { + addPattern(color, PatternType.STRIPE_DOWNLEFT); + addPattern(color, PatternType.STRIPE_TOP); + return addPattern(baseColor, PatternType.BORDER); + } + + public BannerBuilder addEight(DyeColor color) { + addPattern(color, PatternType.STRIPE_TOP); + addPattern(color, PatternType.STRIPE_LEFT); + addPattern(color, PatternType.STRIPE_MIDDLE); + addPattern(color, PatternType.STRIPE_BOTTOM); + addPattern(color, PatternType.STRIPE_RIGHT); + return addPattern(baseColor, PatternType.BORDER); + } + + public BannerBuilder addNine(DyeColor color) { + addPattern(color, PatternType.STRIPE_LEFT); + addPattern(baseColor, PatternType.HALF_HORIZONTAL_MIRROR); + addPattern(color, PatternType.STRIPE_MIDDLE); + addPattern(color, PatternType.STRIPE_TOP); + addPattern(color, PatternType.STRIPE_RIGHT); + addPattern(color, PatternType.STRIPE_BOTTOM); + return addPattern(baseColor, PatternType.BORDER); + } + + public BannerBuilder addZero(DyeColor color) { + addPattern(color, PatternType.STRIPE_BOTTOM); + addPattern(color, PatternType.STRIPE_LEFT); + addPattern(color, PatternType.STRIPE_TOP); + addPattern(color, PatternType.STRIPE_RIGHT); + addPattern(color, PatternType.STRIPE_DOWNLEFT); + return addPattern(baseColor, PatternType.BORDER); + } + + public ItemMeta getMeta() { + return meta; + } + + public BannerBuilder setDisplayName(String name) { + meta.setDisplayName(name); + return this; + } + + public BannerBuilder setLore(List lore) { + meta.setLore(lore); + return this; + } + + public ItemStack build() { + itemStack.setItemMeta(meta); + return itemStack; + } +}