diff --git a/src/main/java/com/songoda/ultimatekits/UltimateKits.java b/src/main/java/com/songoda/ultimatekits/UltimateKits.java index 200f291..0bc4e6a 100644 --- a/src/main/java/com/songoda/ultimatekits/UltimateKits.java +++ b/src/main/java/com/songoda/ultimatekits/UltimateKits.java @@ -10,6 +10,7 @@ import com.songoda.core.database.DatabaseConnector; import com.songoda.core.gui.GuiManager; import com.songoda.core.hooks.EconomyManager; import com.songoda.core.hooks.HologramManager; +import com.songoda.core.utils.TextUtils; import com.songoda.ultimatekits.commands.*; import com.songoda.ultimatekits.conversion.Convert; import com.songoda.ultimatekits.database.DataManager; @@ -36,6 +37,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; +import org.bukkit.ChatColor; public class UltimateKits extends SongodaPlugin { private static UltimateKits INSTANCE; @@ -73,7 +75,7 @@ public class UltimateKits extends SongodaPlugin { try { this.itemSerializer = new ItemSerializer(); } catch (NoSuchMethodException | SecurityException | ClassNotFoundException e) { - console.sendMessage(Methods.formatText("&cCould not load the serialization class! Please report this error.")); + console.sendMessage(ChatColor.RED + "Could not load the serialization class! Please report this error."); e.printStackTrace(); } } @@ -325,50 +327,45 @@ public class UltimateKits extends SongodaPlugin { case "{TITLE}": String title = kit.getTitle(); if (title == null) { - lines.add(Methods.formatText("&5" + Methods.formatText(kit.getName(), true))); + lines.add(ChatColor.DARK_PURPLE + TextUtils.formatText(kit.getName(), true)); } else { - lines.add(Methods.formatText("&5" + Methods.formatText(title))); + lines.add(ChatColor.DARK_PURPLE + TextUtils.formatText(title)); } break; case "{RIGHT-CLICK}": if (kitType == KitType.CRATE) { - lines.add(Methods.formatText(getLocale().getMessage("interface.hologram.crate") - .getMessage())); + lines.add(getLocale().getMessage("interface.hologram.crate").getMessage()); break; } if (kit.getLink() != null) { - lines.add(Methods.formatText(getLocale().getMessage("interface.hologram.buylink") - .getMessage())); + lines.add(getLocale().getMessage("interface.hologram.buylink").getMessage()); break; } if (kit.getPrice() != 0) { - lines.add(Methods.formatText(getLocale().getMessage("interface.hologram.buyeco") + lines.add(getLocale().getMessage("interface.hologram.buyeco") .processPlaceholder("price", kit.getPrice() != 0 ? Methods.formatEconomy(kit.getPrice()) : getLocale().getMessage("general.type.free").getMessage()) - .getMessage())); + .getMessage()); } break; case "{LEFT-CLICK}": if (kitType == KitType.CLAIM) { - lines.add(Methods.formatText(getLocale().getMessage("interface.hologram.daily") - .getMessage())); + lines.add(getLocale().getMessage("interface.hologram.daily").getMessage()); break; } if (kit.getLink() == null && kit.getPrice() == 0) { - lines.add(Methods.formatText(getLocale().getMessage("interface.hologram.previewonly") - .getMessage())); + lines.add(getLocale().getMessage("interface.hologram.previewonly").getMessage()); } else { - lines.add(Methods.formatText(getLocale().getMessage("interface.hologram.preview") - .getMessage())); + lines.add(getLocale().getMessage("interface.hologram.preview").getMessage()); } break; default: - lines.add(Methods.formatText(o)); + lines.add(ChatColor.translateAlternateColorCodes('&', o)); break; } } - + return lines; } diff --git a/src/main/java/com/songoda/ultimatekits/commands/CommandEdit.java b/src/main/java/com/songoda/ultimatekits/commands/CommandEdit.java index adb0eb1..d6c7196 100644 --- a/src/main/java/com/songoda/ultimatekits/commands/CommandEdit.java +++ b/src/main/java/com/songoda/ultimatekits/commands/CommandEdit.java @@ -3,7 +3,7 @@ package com.songoda.ultimatekits.commands; import com.songoda.core.commands.AbstractCommand; import com.songoda.core.gui.GuiManager; import com.songoda.ultimatekits.UltimateKits; -import com.songoda.ultimatekits.gui.GUIBlockEditor; +import com.songoda.ultimatekits.gui.BlockEditorGui; import com.songoda.ultimatekits.gui.GUIKitEditor; import com.songoda.ultimatekits.kit.Kit; import com.songoda.ultimatekits.kit.KitBlockData; @@ -26,17 +26,17 @@ public class CommandEdit extends AbstractCommand { @Override protected ReturnType runCommand(CommandSender sender, String... args) { - Player player = (Player) sender; - Block block = player.getTargetBlock(null, 200); - KitBlockData kitBlockData = instance.getKitManager().getKit(block.getLocation()); if (args.length > 1) return ReturnType.SYNTAX_ERROR; + final Player player = (Player) sender; if (args.length == 0) { + Block block = player.getTargetBlock(null, 200); + KitBlockData kitBlockData = instance.getKitManager().getKit(block.getLocation()); if (kitBlockData == null) { - instance.getLocale().newMessage("&8This block does not contain a kit.").sendPrefixedMessage(player); + instance.getLocale().newMessage("command.kit.nokitatblock").sendPrefixedMessage(player); return ReturnType.FAILURE; } - new GUIBlockEditor(instance, player, block.getLocation()); + guiManager.showGUI(player, new BlockEditorGui(instance, kitBlockData)); } else { String kitStr = args[0].toLowerCase().trim(); if (instance.getKitManager().getKit(kitStr) == null) { @@ -54,7 +54,7 @@ public class CommandEdit extends AbstractCommand { if (!(sender instanceof Player)) return null; List tab = new ArrayList<>(); - if (args.length == 2) { + if (args.length == 1) { for (Kit kit : UltimateKits.getInstance().getKitManager().getKits()) tab.add(kit.getName()); return tab; diff --git a/src/main/java/com/songoda/ultimatekits/commands/CommandKit.java b/src/main/java/com/songoda/ultimatekits/commands/CommandKit.java index ffad6cf..ac266ef 100644 --- a/src/main/java/com/songoda/ultimatekits/commands/CommandKit.java +++ b/src/main/java/com/songoda/ultimatekits/commands/CommandKit.java @@ -45,7 +45,7 @@ public class CommandKit extends AbstractCommand { if (sender.hasPermission("ultimatekits.admin")) { kit.processGenericUse(player, true); } else { - kit.buy(player); + kit.buy(player, guiManager); } } else if (args.length == 2) { String kitName = args[0].toLowerCase(); diff --git a/src/main/java/com/songoda/ultimatekits/commands/CommandPreviewKit.java b/src/main/java/com/songoda/ultimatekits/commands/CommandPreviewKit.java index 2d96550..4772aaf 100644 --- a/src/main/java/com/songoda/ultimatekits/commands/CommandPreviewKit.java +++ b/src/main/java/com/songoda/ultimatekits/commands/CommandPreviewKit.java @@ -32,7 +32,7 @@ public class CommandPreviewKit extends AbstractCommand { instance.getLocale().getMessage("command.kit.kitdoesntexist").sendPrefixedMessage(player); return ReturnType.FAILURE; } - kit.display(player, null); + kit.display(player, guiManager, null); return ReturnType.SUCCESS; } diff --git a/src/main/java/com/songoda/ultimatekits/commands/CommandUltimateKits.java b/src/main/java/com/songoda/ultimatekits/commands/CommandUltimateKits.java index 7911896..f30e2b5 100644 --- a/src/main/java/com/songoda/ultimatekits/commands/CommandUltimateKits.java +++ b/src/main/java/com/songoda/ultimatekits/commands/CommandUltimateKits.java @@ -2,8 +2,8 @@ package com.songoda.ultimatekits.commands; import com.songoda.core.commands.AbstractCommand; import com.songoda.ultimatekits.UltimateKits; -import com.songoda.ultimatekits.utils.Methods; import org.bukkit.command.CommandSender; +import org.bukkit.ChatColor; import java.util.ArrayList; import java.util.List; @@ -24,7 +24,7 @@ public class CommandUltimateKits extends AbstractCommand { for (AbstractCommand command : instance.getCommandManager().getAllCommands()) { if (command.getPermissionNode() == null || sender.hasPermission(command.getPermissionNode())) { - sender.sendMessage(Methods.formatText("&8 - &a" + command.getSyntax() + "&7 - " + command.getDescription())); + sender.sendMessage(ChatColor.DARK_GRAY + " - " + ChatColor.GREEN + command.getSyntax() + ChatColor.GRAY + " - " + command.getDescription()); } } sender.sendMessage(""); diff --git a/src/main/java/com/songoda/ultimatekits/gui/BlockEditorGui.java b/src/main/java/com/songoda/ultimatekits/gui/BlockEditorGui.java new file mode 100644 index 0000000..f8c55f9 --- /dev/null +++ b/src/main/java/com/songoda/ultimatekits/gui/BlockEditorGui.java @@ -0,0 +1,112 @@ +package com.songoda.ultimatekits.gui; + +import com.songoda.core.compatibility.CompatibleMaterial; +import com.songoda.core.gui.Gui; +import com.songoda.core.gui.GuiUtils; +import com.songoda.ultimatekits.UltimateKits; +import com.songoda.ultimatekits.kit.KitBlockData; +import com.songoda.ultimatekits.kit.KitType; +import com.songoda.ultimatekits.settings.Settings; +import java.util.Arrays; +import java.util.List; +import java.util.Random; +import org.bukkit.ChatColor; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.inventory.ItemStack; + +public class BlockEditorGui extends Gui { + + private final KitBlockData kitBlockData; + static final Random rand = new Random(); + + public BlockEditorGui(UltimateKits plugin, KitBlockData kitBlockData) { + this.kitBlockData = kitBlockData; + setRows(3); + setTitle(plugin.getLocale().getMessage("interface.kitblock.title") + .processPlaceholder("kit", kitBlockData.getKit().getShowableName()) + .getMessage()); + + // fill center with glass + if (Settings.RAINBOW.getBoolean()) { + for (int col = 3; col < 6; ++col) { + for (int row = 0; row < rows; ++row) { + setItem(row, col, GuiUtils.getBorderItem(CompatibleMaterial.getGlassPaneColor(rand.nextInt(16)))); + } + } + } else { + ItemStack topBottom = GuiUtils.getBorderItem(Settings.GLASS_TYPE_2.getMaterial(CompatibleMaterial.GRAY_STAINED_GLASS_PANE)); + for (int col = 3; col < 6; ++col) { + for (int row = 0; row < rows; ++row) { + setItem(row, col, topBottom); + } + } + } + + // decorate the edges + ItemStack glass2 = GuiUtils.getBorderItem(Settings.GLASS_TYPE_2.getMaterial(CompatibleMaterial.BLUE_STAINED_GLASS_PANE)); + ItemStack glass3 = GuiUtils.getBorderItem(Settings.GLASS_TYPE_3.getMaterial(CompatibleMaterial.LIGHT_BLUE_STAINED_GLASS_PANE)); + + // edges will be type 3 + setDefaultItem(glass3); + + // decorate corners with type 2 + GuiUtils.mirrorFill(this, 0, 0, true, true, glass2); + GuiUtils.mirrorFill(this, 1, 0, true, true, glass2); + GuiUtils.mirrorFill(this, 0, 1, true, true, glass2); + + // exit button + setButton(0, 8, GuiUtils.createButtonItem(Settings.EXIT_ICON.getMaterial(CompatibleMaterial.OAK_DOOR), + plugin.getLocale().getMessage("interface.button.exit").getMessage()), + ClickType.LEFT, + event -> event.player.closeInventory()); + + // kit type + setButton(1, 2, GuiUtils.createButtonItem(CompatibleMaterial.COMPARATOR, + plugin.getLocale().getMessage("interface.kitblock.switchtype").getMessage(), + kitTypeLore(plugin)), + ClickType.LEFT, + event -> { + plugin.removeHologram(kitBlockData); + + if (kitBlockData.getType() == KitType.PREVIEW) { + kitBlockData.setType(KitType.CRATE); + } else if (kitBlockData.getType() == KitType.CRATE) { + kitBlockData.setType(KitType.CLAIM); + } else if (kitBlockData.getType() == KitType.CLAIM) { + kitBlockData.setType(KitType.PREVIEW); + } + + plugin.updateHologram(kitBlockData); + updateItemLore(event.slot, kitTypeLore(plugin)); + + plugin.getKitFile().delaySave(); + }); + + // decor options + setButton(1, 4, GuiUtils.createButtonItem(CompatibleMaterial.POPPY, + plugin.getLocale().getMessage("interface.kitblock.decor").getMessage(), + plugin.getLocale().getMessage("interface.kitblock.decorlore").getMessage().split("|")), + ClickType.LEFT, + event -> event.manager.showGUI(event.player, new DecorOptionsGui(plugin, kitBlockData, this))); + + // edit + setButton(1, 6, GuiUtils.createButtonItem(CompatibleMaterial.DIAMOND_PICKAXE, + plugin.getLocale().getMessage("interface.kitblock.edit").getMessage(), + plugin.getLocale().getMessage("interface.kitblock.editlore").getMessage().split("|")), + ClickType.LEFT, + event -> { + new GUIKitEditor(UltimateKits.getInstance(), player, kitBlockData.getKit(), this, null, 0); + }); + + } + + List kitTypeLore(UltimateKits plugin) { + String[] type = plugin.getLocale().getMessage("interface.kitblock.switchtypelore").getMessage().split("|"); + return Arrays.asList( + type[0], + (kitBlockData.getType() == KitType.PREVIEW ? ChatColor.GOLD : ChatColor.GRAY) + (type.length > 1 ? type[1] : "Preview"), + (kitBlockData.getType() == KitType.CRATE ? ChatColor.GOLD : ChatColor.GRAY) + (type.length > 2 ? type[2] : "Crate"), + (kitBlockData.getType() == KitType.CLAIM ? ChatColor.GOLD : ChatColor.GRAY) + (type.length > 3 ? type[3] : "Claim")); + } + +} diff --git a/src/main/java/com/songoda/ultimatekits/gui/ConfirmBuyGui.java b/src/main/java/com/songoda/ultimatekits/gui/ConfirmBuyGui.java new file mode 100644 index 0000000..167f229 --- /dev/null +++ b/src/main/java/com/songoda/ultimatekits/gui/ConfirmBuyGui.java @@ -0,0 +1,84 @@ +package com.songoda.ultimatekits.gui; + +import com.songoda.core.compatibility.CompatibleMaterial; +import com.songoda.core.gui.Gui; +import com.songoda.core.gui.GuiUtils; +import com.songoda.core.utils.TextUtils; +import com.songoda.ultimatekits.UltimateKits; +import com.songoda.ultimatekits.kit.Kit; +import com.songoda.ultimatekits.settings.Settings; +import com.songoda.ultimatekits.utils.Methods; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import java.util.Random; + +public class ConfirmBuyGui extends Gui { + + static final Random rand = new Random(); + + public ConfirmBuyGui(UltimateKits plugin, Player player, Kit kit, Gui back) { + super(back); + setRows(3); + + double cost = kit.getPrice(); + if (Settings.KITS_FREE_WITH_PERMS.getBoolean() && kit.hasPermission(player)) { + cost = 0; + } + + setTitle(plugin.getLocale().getMessage("interface.yesno.title") + .processPlaceholder("price", cost) + .getMessage()); + + // fill center with glass + if (Settings.RAINBOW.getBoolean()) { + for (int col = 3; col < 6; ++col) { + for (int row = 0; row < rows; ++row) { + setItem(row, col, GuiUtils.getBorderItem(CompatibleMaterial.getGlassPaneColor(rand.nextInt(16)))); + } + } + } else { + ItemStack topBottom = GuiUtils.getBorderItem(Settings.GLASS_TYPE_2.getMaterial(CompatibleMaterial.GRAY_STAINED_GLASS_PANE)); + for (int col = 3; col < 6; ++col) { + for (int row = 0; row < rows; ++row) { + setItem(row, col, topBottom); + } + } + } + + // decorate the edges + ItemStack glass2 = GuiUtils.getBorderItem(Settings.GLASS_TYPE_2.getMaterial(CompatibleMaterial.BLUE_STAINED_GLASS_PANE)); + ItemStack glass3 = GuiUtils.getBorderItem(Settings.GLASS_TYPE_3.getMaterial(CompatibleMaterial.LIGHT_BLUE_STAINED_GLASS_PANE)); + + // edges will be type 3 + setDefaultItem(glass3); + + // decorate corners with type 2 + GuiUtils.mirrorFill(this, 0, 0, true, true, glass2); + GuiUtils.mirrorFill(this, 1, 0, true, true, glass2); + GuiUtils.mirrorFill(this, 0, 1, true, true, glass2); + + // Kit information + setItem(0, 4, GuiUtils.createButtonItem(kit.getDisplayItem() != null ? kit.getDisplayItem() : CompatibleMaterial.DIAMOND_HELMET, + ChatColor.RED + TextUtils.formatText(kit.getName().toLowerCase(), true), + ChatColor.GREEN + Settings.CURRENCY_SYMBOL.getString() + Methods.formatEconomy(cost))); + + // confirm button + setButton(1, 2, GuiUtils.createButtonItem(Settings.BUY_ICON.getMaterial(CompatibleMaterial.EMERALD), + plugin.getLocale().getMessage("interface.yesno.yes").getMessage()), + event -> { + kit.processPurchaseUse(event.player); + event.player.closeInventory(); + }); + + // cancel button + setButton(1, 6, GuiUtils.createButtonItem(Settings.EXIT_ICON.getMaterial(CompatibleMaterial.OAK_DOOR), + plugin.getLocale().getMessage("interface.yesno.no").getMessage()), + event -> { + plugin.getLocale().getMessage("event.purchase.cancelled").sendPrefixedMessage(event.player); + event.player.closeInventory(); + }); + + } + +} diff --git a/src/main/java/com/songoda/ultimatekits/gui/DecorOptionsGui.java b/src/main/java/com/songoda/ultimatekits/gui/DecorOptionsGui.java new file mode 100644 index 0000000..92da74e --- /dev/null +++ b/src/main/java/com/songoda/ultimatekits/gui/DecorOptionsGui.java @@ -0,0 +1,112 @@ +package com.songoda.ultimatekits.gui; + +import com.songoda.core.compatibility.CompatibleMaterial; +import com.songoda.core.gui.Gui; +import com.songoda.core.gui.GuiUtils; +import com.songoda.core.utils.ItemUtils; +import com.songoda.ultimatekits.UltimateKits; +import com.songoda.ultimatekits.kit.Kit; +import com.songoda.ultimatekits.kit.KitBlockData; +import com.songoda.ultimatekits.settings.Settings; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.inventory.ItemStack; +import java.util.Random; + +public class DecorOptionsGui extends Gui { + + static final Random rand = new Random(); + + public DecorOptionsGui(UltimateKits plugin, KitBlockData kitBlockData, Gui parent) { + super(parent); + setRows(3); + setTitle(plugin.getLocale().getMessage("interface.kitdecor.title") + .processPlaceholder("kit", kitBlockData.getKit().getShowableName()) + .getMessage()); + + Kit kit = kitBlockData.getKit(); + + // fill center with glass + if (Settings.RAINBOW.getBoolean()) { + for (int row = 0; row < rows; ++row) { + for (int col = row == 1 ? 2 : 3; col < (row == 1 ? 7 : 6); ++col) { + setItem(row, col, GuiUtils.getBorderItem(CompatibleMaterial.getGlassPaneColor(rand.nextInt(16)))); + } + } + } else { + ItemStack topBottom = GuiUtils.getBorderItem(Settings.GLASS_TYPE_2.getMaterial(CompatibleMaterial.GRAY_STAINED_GLASS_PANE)); + for (int row = 0; row < rows; ++row) { + for (int col = row == 1 ? 2 : 3; col < (row == 1 ? 7 : 6); ++col) { + setItem(row, col, topBottom); + } + } + } + + // decorate the edges + ItemStack glass2 = GuiUtils.getBorderItem(Settings.GLASS_TYPE_2.getMaterial(CompatibleMaterial.BLUE_STAINED_GLASS_PANE)); + ItemStack glass3 = GuiUtils.getBorderItem(Settings.GLASS_TYPE_3.getMaterial(CompatibleMaterial.LIGHT_BLUE_STAINED_GLASS_PANE)); + + // edges will be type 3 + setDefaultItem(glass3); + + // decorate corners with type 2 + GuiUtils.mirrorFill(this, 0, 0, true, true, glass2); + GuiUtils.mirrorFill(this, 1, 0, true, true, glass2); + GuiUtils.mirrorFill(this, 0, 1, true, true, glass2); + + // exit button + setButton(0, 8, GuiUtils.createButtonItem(Settings.EXIT_ICON.getMaterial(CompatibleMaterial.OAK_DOOR), + plugin.getLocale().getMessage("interface.button.exit").getMessage()), + ClickType.LEFT, + event -> exit()); + + // back button + setButton(0, 0, GuiUtils.createButtonItem(ItemUtils.getCustomHead("3ebf907494a935e955bfcadab81beafb90fb9be49c7026ba97d798d5f1a23"), + plugin.getLocale().getMessage("interface.button.back").getMessage()), + ClickType.LEFT, + event -> event.player.closeInventory()); + + final String enableLore = plugin.getLocale().getMessage("interface.kitdecor.settingon").getMessage(); + final String disableLore = plugin.getLocale().getMessage("interface.kitdecor.settingoff").getMessage(); + + // Hologram + setButton(1, 1, GuiUtils.createButtonItem(CompatibleMaterial.NAME_TAG, + plugin.getLocale().getMessage("interface.kitdecor.hologram").getMessage(), + kitBlockData.showHologram() ? enableLore : disableLore), + event -> { + kitBlockData.setShowHologram(!kitBlockData.showHologram()); + plugin.updateHologram(kitBlockData); + updateItemLore(event.slot, kitBlockData.showHologram() ? enableLore : disableLore); + }); + + // Particle effects + setButton(1, 3, GuiUtils.createButtonItem(CompatibleMaterial.POTION, + plugin.getLocale().getMessage("interface.kitdecor.particle").getMessage(), + kitBlockData.hasParticles() ? enableLore : disableLore), + event -> { + kitBlockData.setHasParticles(!kitBlockData.hasParticles()); + updateItemLore(event.slot, kitBlockData.hasParticles() ? enableLore : disableLore); + }); + + // Item Display + setButton(1, 5, GuiUtils.createButtonItem(CompatibleMaterial.DIAMOND, + plugin.getLocale().getMessage("interface.kitdecor.display").getMessage(), + kitBlockData.isDisplayingItems() ? enableLore : disableLore), + event -> { + kitBlockData.setDisplayingItems(!kitBlockData.isDisplayingItems()); + updateItemLore(event.slot, kitBlockData.isDisplayingItems() ? enableLore : disableLore); + }); + + // Item Display Override + setButton(1, 7, GuiUtils.createButtonItem(kit.getDisplayItem() != null ? kit.getDisplayItem() : CompatibleMaterial.BEACON, + plugin.getLocale().getMessage("interface.kitdecor.displayone").getMessage(), + plugin.getLocale().getMessage("interface.kitdecor.displayonelore") + .processPlaceholder("enabled", kitBlockData.isItemOverride() ? enableLore : disableLore) + .getMessage().split("|")), + event -> { + kitBlockData.setItemOverride(!kitBlockData.isItemOverride()); + updateItemLore(event.slot, kitBlockData.isItemOverride() ? enableLore : disableLore); + }); + + } + +} diff --git a/src/main/java/com/songoda/ultimatekits/gui/GUIBlockEditor.java b/src/main/java/com/songoda/ultimatekits/gui/GUIBlockEditor.java deleted file mode 100644 index 1b8ce78..0000000 --- a/src/main/java/com/songoda/ultimatekits/gui/GUIBlockEditor.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.songoda.ultimatekits.gui; - -import com.songoda.ultimatekits.UltimateKits; -import com.songoda.ultimatekits.kit.KitBlockData; -import com.songoda.ultimatekits.kit.KitType; -import com.songoda.ultimatekits.utils.Methods; -import com.songoda.ultimatekits.utils.ServerVersion; -import com.songoda.ultimatekits.utils.gui.AbstractGUI; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.entity.Player; - -import java.util.ArrayList; - -public class GUIBlockEditor extends AbstractGUI { - - private KitBlockData kitBlockData; - - public GUIBlockEditor(UltimateKits plugin, Player player, Location location) { - super(player); - kitBlockData = plugin.getKitManager().getKit(location); - - init("&8This contains &a" + kitBlockData.getKit().getShowableName(), 27); - } - - @Override - protected void constructGUI() { - Methods.fillGlass(inventory); - - inventory.setItem(0, Methods.getBackgroundGlass(true)); - inventory.setItem(1, Methods.getBackgroundGlass(true)); - inventory.setItem(2, Methods.getBackgroundGlass(false)); - inventory.setItem(6, Methods.getBackgroundGlass(false)); - inventory.setItem(7, Methods.getBackgroundGlass(true)); - inventory.setItem(8, Methods.getBackgroundGlass(true)); - inventory.setItem(9, Methods.getBackgroundGlass(true)); - inventory.setItem(10, Methods.getBackgroundGlass(false)); - inventory.setItem(16, Methods.getBackgroundGlass(false)); - inventory.setItem(17, Methods.getBackgroundGlass(true)); - inventory.setItem(18, Methods.getBackgroundGlass(true)); - inventory.setItem(19, Methods.getBackgroundGlass(true)); - inventory.setItem(20, Methods.getBackgroundGlass(false)); - inventory.setItem(24, Methods.getBackgroundGlass(false)); - inventory.setItem(25, Methods.getBackgroundGlass(true)); - inventory.setItem(26, Methods.getBackgroundGlass(true)); - - createButton(8, Material.valueOf(UltimateKits.getInstance().getConfig().getString("Interfaces.Exit Icon")), - UltimateKits.getInstance().getLocale().getMessage("interface.button.exit").getMessage()); - - ArrayList lore = new ArrayList<>(); - lore.add(Methods.formatText("&7Click to swap this kit blocks function.")); - lore.add(""); - - if (kitBlockData.getType() == KitType.PREVIEW) { - lore.add(Methods.formatText("&6Preview")); - lore.add(Methods.formatText("&7Crate")); - lore.add(Methods.formatText("&7Claim")); - } else if (kitBlockData.getType() == KitType.CRATE) { - lore.add(Methods.formatText("&7Preview")); - lore.add(Methods.formatText("&6Crate")); - lore.add(Methods.formatText("&7Claim")); - } else if (kitBlockData.getType() == KitType.CLAIM) { - lore.add(Methods.formatText("&7Preview")); - lore.add(Methods.formatText("&7Crate")); - lore.add(Methods.formatText("&6Claim")); - } - - createButton(11, UltimateKits.getInstance().isServerVersionAtLeast(ServerVersion.V1_13) ? Material.COMPARATOR : Material.valueOf("REDSTONE_COMPARATOR"), "&5&lSwitch kit type", lore); - - createButton(13, UltimateKits.getInstance().isServerVersionAtLeast(ServerVersion.V1_13) ? Material.POPPY : Material.valueOf("RED_ROSE"), "&9&lDecor Options", - "&7Click to edit the decoration", - "&7options for this kit."); - - createButton(15, Material.DIAMOND_PICKAXE, "&a&lEdit kit", - "&7Click to edit the kit", - "&7contained in this block."); - } - - @Override - protected void registerClickables() { - registerClickable(8, (player, inventory, cursor, slot, type) -> player.closeInventory()); - - registerClickable(11, (player, inventory, cursor, slot, type) -> { - UltimateKits instance = UltimateKits.getInstance(); - - if (instance.getHologram() != null) - instance.getHologram().remove(kitBlockData); - - if (kitBlockData.getType() == KitType.PREVIEW) kitBlockData.setType(KitType.CRATE); - else if (kitBlockData.getType() == KitType.CRATE) kitBlockData.setType(KitType.CLAIM); - else if (kitBlockData.getType() == KitType.CLAIM) kitBlockData.setType(KitType.PREVIEW); - - instance.saveConfig(); - if (instance.getHologram() != null) - instance.getHologram().update(kitBlockData); - constructGUI(); - }); - registerClickable(13, (player, inventory, cursor, slot, type) -> - new GUIDecorOptions(UltimateKits.getInstance(), player, kitBlockData.getLocation())); - registerClickable(15, (player, inventory, cursor, slot, type) -> - new GUIKitEditor(UltimateKits.getInstance(), player, kitBlockData.getKit(), this, null, 0)); - } - - @Override - protected void registerOnCloses() { - - } - -} diff --git a/src/main/java/com/songoda/ultimatekits/gui/GUIConfirmBuy.java b/src/main/java/com/songoda/ultimatekits/gui/GUIConfirmBuy.java deleted file mode 100644 index fa17597..0000000 --- a/src/main/java/com/songoda/ultimatekits/gui/GUIConfirmBuy.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.songoda.ultimatekits.gui; - -import com.songoda.ultimatekits.UltimateKits; -import com.songoda.ultimatekits.kit.Kit; -import com.songoda.ultimatekits.utils.Methods; -import com.songoda.ultimatekits.utils.gui.AbstractGUI; -import org.apache.commons.lang.StringUtils; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -import java.util.ArrayList; - -public class GUIConfirmBuy extends AbstractGUI { - - private Kit kit; - private Player player; - private UltimateKits plugin; - - public GUIConfirmBuy(UltimateKits plugin, Player player, Kit kit) { - super(player); - this.kit = kit; - this.player = player; - this.plugin = plugin; - init(plugin.getLocale().getMessage("interface.yesno.title") - .processPlaceholder("price", kit.getPrice()).getMessage(), 27); - } - - @Override - protected void constructGUI() { - double cost = kit.getPrice(); - if (kit.hasPermission(player) && plugin.getConfig().getBoolean("Main.Allow Players To Receive Kits For Free If They Have Permission")) { - cost = 0; - } - - String title = Methods.formatTitle("&c" + StringUtils.capitalize(kit.getName().toLowerCase())); - ItemStack item = new ItemStack(Material.DIAMOND_HELMET); - if (kit.getDisplayItem() != null) item = new ItemStack(kit.getDisplayItem()); - ItemMeta meta = item.getItemMeta(); - meta.setDisplayName(title); - ArrayList lore = new ArrayList<>(); - lore.add(Methods.formatText("&a$" + Methods.formatEconomy(cost))); - - int nu = 0; - while (nu != 27) { - inventory.setItem(nu, Methods.getGlass()); - nu++; - } - - inventory.setItem(0, Methods.getBackgroundGlass(true)); - inventory.setItem(1, Methods.getBackgroundGlass(true)); - inventory.setItem(2, Methods.getBackgroundGlass(false)); - inventory.setItem(6, Methods.getBackgroundGlass(false)); - inventory.setItem(7, Methods.getBackgroundGlass(true)); - inventory.setItem(8, Methods.getBackgroundGlass(true)); - inventory.setItem(9, Methods.getBackgroundGlass(true)); - inventory.setItem(10, Methods.getBackgroundGlass(false)); - inventory.setItem(16, Methods.getBackgroundGlass(false)); - inventory.setItem(17, Methods.getBackgroundGlass(true)); - inventory.setItem(18, Methods.getBackgroundGlass(true)); - inventory.setItem(19, Methods.getBackgroundGlass(true)); - inventory.setItem(20, Methods.getBackgroundGlass(false)); - inventory.setItem(24, Methods.getBackgroundGlass(false)); - inventory.setItem(25, Methods.getBackgroundGlass(true)); - inventory.setItem(26, Methods.getBackgroundGlass(true)); - - ItemStack item2 = new ItemStack(Material.valueOf(plugin.getConfig().getString("Interfaces.Buy Icon")), 1); - ItemMeta itemmeta2 = item2.getItemMeta(); - itemmeta2.setDisplayName(plugin.getLocale().getMessage("interface.yesno.yes").getMessage()); - item2.setItemMeta(itemmeta2); - - ItemStack item3 = new ItemStack(Material.valueOf(plugin.getConfig().getString("Interfaces.Exit Icon")), 1); - ItemMeta itemmeta3 = item3.getItemMeta(); - itemmeta3.setDisplayName(plugin.getLocale().getMessage("interface.yesno.no").getMessage()); - item3.setItemMeta(itemmeta3); - - inventory.setItem(4, item); - inventory.setItem(11, item2); - inventory.setItem(15, item3); - } - - @Override - protected void registerClickables() { - registerClickable(11, ((player1, inventory1, cursor, slot, type) -> { - kit.processPurchaseUse(player); - player.closeInventory(); - })); - - registerClickable(15, ((player1, inventory1, cursor, slot, type) -> { - plugin.getLocale().getMessage("event.purchase.cancelled").sendPrefixedMessage(player); - player.closeInventory(); - })); - } - - @Override - protected void registerOnCloses() { - - } - -} diff --git a/src/main/java/com/songoda/ultimatekits/gui/GUIDecorOptions.java b/src/main/java/com/songoda/ultimatekits/gui/GUIDecorOptions.java deleted file mode 100644 index 6012716..0000000 --- a/src/main/java/com/songoda/ultimatekits/gui/GUIDecorOptions.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.songoda.ultimatekits.gui; - -import com.songoda.core.utils.ItemUtils; -import com.songoda.ultimatekits.UltimateKits; -import com.songoda.ultimatekits.kit.Kit; -import com.songoda.ultimatekits.kit.KitBlockData; -import com.songoda.ultimatekits.utils.Methods; -import com.songoda.ultimatekits.utils.ServerVersion; -import com.songoda.ultimatekits.utils.gui.AbstractGUI; -import com.songoda.ultimatekits.utils.gui.OnClose; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; - -import java.util.ArrayList; - -public class GUIDecorOptions extends AbstractGUI { - - private UltimateKits plugin; - - private KitBlockData kitBlockData; - - public GUIDecorOptions(UltimateKits plugin, Player player, Location location) { - super(player); - this.plugin = plugin; - kitBlockData = plugin.getKitManager().getKit(location); - init("&8Editing decor for &a" + kitBlockData.getKit().getShowableName() + "&8.", 27); - } - - @Override - protected void constructGUI() { - Kit kit = kitBlockData.getKit(); - - Methods.fillGlass(inventory); - - inventory.setItem(0, Methods.getBackgroundGlass(true)); - inventory.setItem(1, Methods.getBackgroundGlass(true)); - inventory.setItem(2, Methods.getBackgroundGlass(false)); - inventory.setItem(6, Methods.getBackgroundGlass(false)); - inventory.setItem(7, Methods.getBackgroundGlass(true)); - inventory.setItem(8, Methods.getBackgroundGlass(true)); - inventory.setItem(9, Methods.getBackgroundGlass(true)); - inventory.setItem(10, Methods.getBackgroundGlass(false)); - inventory.setItem(16, Methods.getBackgroundGlass(false)); - inventory.setItem(17, Methods.getBackgroundGlass(true)); - inventory.setItem(18, Methods.getBackgroundGlass(true)); - inventory.setItem(19, Methods.getBackgroundGlass(true)); - inventory.setItem(20, Methods.getBackgroundGlass(false)); - inventory.setItem(24, Methods.getBackgroundGlass(false)); - inventory.setItem(25, Methods.getBackgroundGlass(true)); - inventory.setItem(26, Methods.getBackgroundGlass(true)); - - createButton(8, Material.valueOf(UltimateKits.getInstance().getConfig().getString("Interfaces.Exit Icon")), - UltimateKits.getInstance().getLocale().getMessage("interface.button.exit").getMessage()); - - ItemStack back = ItemUtils.getCustomHead("3ebf907494a935e955bfcadab81beafb90fb9be49c7026ba97d798d5f1a23"); - inventory.setItem(0, back); - - createButton(0, back, UltimateKits.getInstance().getLocale().getMessage("interface.button.back").getMessage()); - - ArrayList lore = new ArrayList<>(); - if (kitBlockData.showHologram()) { - lore.add(Methods.formatText("&7Currently: &aEnabled&7.")); - } else { - lore.add(Methods.formatText("&7Currently &cDisabled&7.")); - } - - createButton(10, Material.NAME_TAG, "&9&lToggle Holograms", lore); - - lore = new ArrayList<>(); - if (kitBlockData.hasParticles()) { - lore.add(Methods.formatText("&7Currently: &aEnabled&7.")); - } else { - lore.add(Methods.formatText("&7Currently &cDisabled&7.")); - } - - createButton(12, Material.POTION, "&9&lToggle Particles", lore); - - lore = new ArrayList<>(); - if (kitBlockData.isDisplayingItems()) { - lore.add(Methods.formatText("&7Currently: &aEnabled&7.")); - } else { - lore.add(Methods.formatText("&7Currently &cDisabled&7.")); - } - - createButton(14, Material.DIAMOND, "&9&lToggle DisplayItems", lore); - - Material material = Material.BEACON; - if (kit.getDisplayItem() != null) { - material = kit.getDisplayItem(); - } - - lore = new ArrayList<>(); - if (kitBlockData.isItemOverride()) { - lore.add(Methods.formatText("&7Currently: &aEnabled&7.")); - } else { - lore.add(Methods.formatText("&7Currently &cDisabled&7.")); - } - lore.add(""); - lore.add(Methods.formatText("&7Enabling this option will ")); - lore.add(Methods.formatText("&7override the DisplayItems")); - lore.add(Methods.formatText("&7above your kit to the single")); - lore.add(Methods.formatText("&7DisplayItem set in this kit")); - lore.add(Methods.formatText("&7GUI options.")); - - createButton(16, material, "&9&lToggle DisplayItem Override", lore); - } - - @Override - protected void registerClickables() { - registerClickable(0, (player, inventory, cursor, slot, type) -> new GUIBlockEditor(UltimateKits.getInstance(), player, kitBlockData.getLocation())); - registerClickable(8, (player, inventory, cursor, slot, type) -> player.closeInventory()); - - registerClickable(10, (player, inventory, cursor, slot, type) -> { - if (plugin.getHologram() == null) return; - - if (kitBlockData.showHologram()) { - kitBlockData.setShowHologram(false); - } else { - kitBlockData.setShowHologram(true); - } - UltimateKits.getInstance().getHologram().update(kitBlockData); - constructGUI(); - }); - - registerClickable(12, (player, inventory, cursor, slot, type) -> { - if (kitBlockData.hasParticles()) { - kitBlockData.setHasParticles(false); - } else { - kitBlockData.setHasParticles(true); - } - constructGUI(); - }); - - registerClickable(14, (player, inventory, cursor, slot, type) -> { - boolean isHolo = plugin.getHologram() != null && kitBlockData.showHologram(); - - if (isHolo) { - UltimateKits.getInstance().getHologram().remove(kitBlockData); - } - if (kitBlockData.isDisplayingItems()) { - kitBlockData.setDisplayingItems(false); - } else { - kitBlockData.setDisplayingItems(true); - } - if (isHolo) { - UltimateKits.getInstance().getHologram().add(kitBlockData); - } - constructGUI(); - }); - - registerClickable(16, (player, inventory, cursor, slot, type) -> { - if (kitBlockData.isItemOverride()) { - kitBlockData.setItemOverride(false); - } else { - kitBlockData.setItemOverride(true); - } - constructGUI(); - }); - } - - @Override - protected void registerOnCloses() { - - } - -} diff --git a/src/main/java/com/songoda/ultimatekits/gui/GUIGUIOptions.java b/src/main/java/com/songoda/ultimatekits/gui/GUIGUIOptions.java index 3da5c0c..cee7d23 100644 --- a/src/main/java/com/songoda/ultimatekits/gui/GUIGUIOptions.java +++ b/src/main/java/com/songoda/ultimatekits/gui/GUIGUIOptions.java @@ -1,12 +1,10 @@ package com.songoda.ultimatekits.gui; +import com.songoda.core.gui.Gui; import com.songoda.core.utils.ItemUtils; import com.songoda.ultimatekits.UltimateKits; import com.songoda.ultimatekits.kit.Kit; import com.songoda.ultimatekits.utils.Methods; -import com.songoda.ultimatekits.utils.ServerVersion; -import com.songoda.ultimatekits.utils.gui.AbstractAnvilGUI; -import com.songoda.ultimatekits.utils.gui.AbstractGUI; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -15,19 +13,17 @@ import org.bukkit.inventory.meta.SkullMeta; import java.util.ArrayList; -public class GUIGUIOptions extends AbstractGUI { +public class GUIGUIOptions extends Gui { private Kit kit; private Player player; private UltimateKits plugin; - private AbstractGUI back; - public GUIGUIOptions(UltimateKits plugin, Player player, AbstractGUI back, Kit kit) { - super(player); + public GUIGUIOptions(UltimateKits plugin, Player player, Gui back, Kit kit) { + super(back); this.kit = kit; this.player = player; this.plugin = plugin; - this.back = back; init("&8GUI Options for &a" + kit.getShowableName() + "&8.", 27); } diff --git a/src/main/java/com/songoda/ultimatekits/gui/GUIDisplayKit.java b/src/main/java/com/songoda/ultimatekits/gui/PreviewKitGui.java similarity index 97% rename from src/main/java/com/songoda/ultimatekits/gui/GUIDisplayKit.java rename to src/main/java/com/songoda/ultimatekits/gui/PreviewKitGui.java index f26303f..a8bb223 100644 --- a/src/main/java/com/songoda/ultimatekits/gui/GUIDisplayKit.java +++ b/src/main/java/com/songoda/ultimatekits/gui/PreviewKitGui.java @@ -9,6 +9,7 @@ import com.songoda.ultimatekits.UltimateKits; import com.songoda.ultimatekits.kit.Kit; import com.songoda.ultimatekits.settings.Settings; import com.songoda.ultimatekits.utils.Methods; +import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -17,9 +18,8 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Random; -import org.bukkit.ChatColor; -public class GUIDisplayKit extends Gui { +public class PreviewKitGui extends Gui { private final Kit kit; private final Player player; @@ -29,7 +29,7 @@ public class GUIDisplayKit extends Gui { private final boolean useGlassBorder = !Settings.DO_NOT_USE_GLASS_BORDERS.getBoolean(); static final Random rand = new Random(); - public GUIDisplayKit(UltimateKits plugin, Gui back, Player player, Kit kit) { + public PreviewKitGui(UltimateKits plugin, Player player, Kit kit, Gui back) { super(back); this.kit = kit; this.player = player; @@ -122,7 +122,7 @@ public class GUIDisplayKit extends Gui { getBuyLore()), event -> { exit(); - kit.buy(player); + kit.buy(event.player, event.manager); }); } diff --git a/src/main/java/com/songoda/ultimatekits/handlers/DisplayItemHandler.java b/src/main/java/com/songoda/ultimatekits/handlers/DisplayItemHandler.java index bce6f33..b7d6675 100644 --- a/src/main/java/com/songoda/ultimatekits/handlers/DisplayItemHandler.java +++ b/src/main/java/com/songoda/ultimatekits/handlers/DisplayItemHandler.java @@ -4,7 +4,6 @@ import com.songoda.core.utils.TextUtils; import com.songoda.ultimatekits.UltimateKits; import com.songoda.ultimatekits.kit.Kit; import com.songoda.ultimatekits.kit.KitBlockData; -import com.songoda.ultimatekits.utils.Methods; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -65,7 +64,7 @@ public class DisplayItemHandler { ItemStack is = list.get(inum - 1); if (kitBlockData.isItemOverride()) { if (kit.getDisplayItem() != null) - is = new ItemStack(kit.getDisplayItem()); + is = kit.getDisplayItem().getItem(); } ItemMeta meta = is.getItemMeta(); is.setAmount(1); diff --git a/src/main/java/com/songoda/ultimatekits/kit/Kit.java b/src/main/java/com/songoda/ultimatekits/kit/Kit.java index cf3a336..93bdef9 100644 --- a/src/main/java/com/songoda/ultimatekits/kit/Kit.java +++ b/src/main/java/com/songoda/ultimatekits/kit/Kit.java @@ -1,5 +1,6 @@ package com.songoda.ultimatekits.kit; +import com.songoda.core.compatibility.CompatibleMaterial; import com.songoda.core.compatibility.CompatibleSound; import com.songoda.core.configuration.Config; import com.songoda.core.gui.Gui; @@ -7,26 +8,27 @@ import com.songoda.core.gui.GuiManager; import com.songoda.core.hooks.EconomyManager; import com.songoda.core.utils.TextUtils; import com.songoda.ultimatekits.UltimateKits; -import com.songoda.ultimatekits.gui.GUIConfirmBuy; -import com.songoda.ultimatekits.gui.GUIDisplayKit; +import com.songoda.ultimatekits.gui.PreviewKitGui; +import com.songoda.ultimatekits.gui.ConfirmBuyGui; import com.songoda.ultimatekits.key.Key; import com.songoda.ultimatekits.kit.type.KitContentCommand; import com.songoda.ultimatekits.kit.type.KitContentEconomy; import com.songoda.ultimatekits.kit.type.KitContentItem; +import com.songoda.ultimatekits.settings.Settings; import com.songoda.ultimatekits.tasks.CrateAnimateTask; import com.songoda.ultimatekits.utils.ArmorType; import com.songoda.ultimatekits.utils.Methods; -import com.songoda.ultimatekits.utils.gui.AbstractGUI; -import com.songoda.ultimatekits.settings.Settings; -import me.clip.placeholderapi.PlaceholderAPI; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; - -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Objects; /** * Created by songoda on 2/24/2017. @@ -39,13 +41,13 @@ public class Kit { private String link, title; private int delay; private boolean hidden; - private Material displayItem; + private CompatibleMaterial displayItem; private List contents; private KitAnimation kitAnimation; - public Kit(String name, String title, String link, double price, Material displayItem, int delay, boolean hidden, List contents, KitAnimation kitAnimation) { + public Kit(String name, String title, String link, double price, CompatibleMaterial displayItem, int delay, boolean hidden, List contents, KitAnimation kitAnimation) { this.name = name; - this.showableName = Methods.formatText(name, true); + this.showableName = TextUtils.formatText(name, true); this.price = price; this.link = link; this.kitAnimation = kitAnimation; @@ -61,7 +63,7 @@ public class Kit { this(name, null, null, 0, null, 0, false, new ArrayList<>(), KitAnimation.NONE); } - public void buy(Player player) { + public void buy(Player player, GuiManager manager) { if (hasPermission(player) && plugin.getConfig().getBoolean("Main.Allow Players To Receive Kits For Free If They Have Permission")) { processGenericUse(player, false); return; @@ -79,7 +81,7 @@ public class Kit { player.sendMessage(""); player.closeInventory(); } else if (price != 0) { - new GUIConfirmBuy(plugin, player, this); + manager.showGUI(player, new ConfirmBuyGui(plugin, player, this, null)); } else { UltimateKits.getInstance().getLocale().getMessage("command.general.noperms") .sendPrefixedMessage(player); @@ -207,7 +209,7 @@ public class Kit { plugin.getLocale().getMessage("event.preview.kit") .processPlaceholder("kit", showableName).sendPrefixedMessage(player); - new GUIDisplayKit(plugin, back, player, this); + manager.showGUI(player, new PreviewKitGui(plugin, player, this, back)); } public void saveKit(List items) { @@ -250,13 +252,14 @@ public class Kit { if ((!item.getSerialized().startsWith("/") && !item.getSerialized().startsWith(Settings.CURRENCY_SYMBOL.getString())) || commands) { //ToDO: I doubt this is correct. ItemStack stack = moveable ? item.getMoveableItem() : item.getItem(); if (preview) stack = item.getItemForDisplay(); + if (stack == null) continue; ItemStack fin = stack; if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI") && stack.getItemMeta().getLore() != null) { ArrayList lore2 = new ArrayList<>(); ItemMeta meta2 = stack.getItemMeta(); for (String lor : stack.getItemMeta().getLore()) { - lor = PlaceholderAPI.setPlaceholders(player, lor.replace(" ", "_")).replace("_", " "); + lor = me.clip.placeholderapi.PlaceholderAPI.setPlaceholders(player, lor.replace(" ", "_")).replace("_", " "); lore2.add(lor); } meta2.setLore(lore2); @@ -419,11 +422,11 @@ public class Kit { return showableName; } - public Material getDisplayItem() { + public CompatibleMaterial getDisplayItem() { return displayItem; } - public void setDisplayItem(Material displayItem) { + public void setDisplayItem(CompatibleMaterial displayItem) { this.displayItem = displayItem; } diff --git a/src/main/java/com/songoda/ultimatekits/kit/KitItem.java b/src/main/java/com/songoda/ultimatekits/kit/KitItem.java index 3d09870..f9b4a31 100644 --- a/src/main/java/com/songoda/ultimatekits/kit/KitItem.java +++ b/src/main/java/com/songoda/ultimatekits/kit/KitItem.java @@ -6,7 +6,6 @@ import com.songoda.ultimatekits.kit.type.KitContent; import com.songoda.ultimatekits.kit.type.KitContentCommand; import com.songoda.ultimatekits.kit.type.KitContentEconomy; import com.songoda.ultimatekits.kit.type.KitContentItem; -import com.songoda.ultimatekits.utils.Methods; import com.songoda.ultimatekits.settings.Settings; import org.apache.commons.lang.WordUtils; import org.bukkit.ChatColor; @@ -62,7 +61,7 @@ public class KitItem { this.content = new KitContentCommand(line.substring(1)); } else { ItemStack itemStack = item == null ? UltimateKits.getInstance().getItemSerializer().deserializeItemStackFromJson(line) : item; - this.content = new KitContentItem(itemStack); + this.content = itemStack != null ? new KitContentItem(itemStack) : null; } } @@ -154,6 +153,7 @@ public class KitItem { } public ItemStack getMoveableItem() { + if(content == null) return null; ItemStack item = content.getItemForDisplay(); ItemMeta meta = item.getItemMeta(); if (chance != 0 || displayItem != null || displayName != null || displayLore != null) { @@ -168,33 +168,36 @@ public class KitItem { } public ItemStack getItemForDisplay() { + if(content == null) return null; ItemStack item = content.getItemForDisplay(); ItemMeta meta = item.getItemMeta(); if (displayItem != null) { item.setType(displayItem); } - if (displayName != null) { - meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', displayName)); - } - if (displayLore != null) { - meta.setLore(Arrays.asList(ChatColor.translateAlternateColorCodes('&', displayLore))); - } - - if (UltimateKits.getInstance().getConfig().getBoolean("Main.Display Chance In Preview")) { - ArrayDeque lore; - if (meta.hasLore()) { - lore = new ArrayDeque<>(meta.getLore()); - } else { - lore = new ArrayDeque<>(); + if(meta != null) { + if (displayName != null) { + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', displayName)); + } + if (displayLore != null) { + meta.setLore(Arrays.asList(ChatColor.translateAlternateColorCodes('&', displayLore))); } - if (lore.size() != 0) lore.addFirst(""); - lore.addFirst(ChatColor.GRAY.toString() + UltimateKits.getInstance().getLocale().getMessage("general.type.chance") + ": " + ChatColor.GOLD + (chance == 0 ? 100 : chance) + "%"); - meta.setLore(new ArrayList<>(lore)); - } + if (UltimateKits.getInstance().getConfig().getBoolean("Main.Display Chance In Preview")) { + ArrayDeque lore; + if (meta.hasLore()) { + lore = new ArrayDeque<>(meta.getLore()); + } else { + lore = new ArrayDeque<>(); + } - item.setItemMeta(meta); + if (!lore.isEmpty()) lore.addFirst(""); + lore.addFirst(ChatColor.GRAY.toString() + UltimateKits.getInstance().getLocale().getMessage("general.type.chance") + ": " + ChatColor.GOLD + (chance == 0 ? 100 : chance) + "%"); + meta.setLore(new ArrayList<>(lore)); + } + + item.setItemMeta(meta); + } return item; } diff --git a/src/main/java/com/songoda/ultimatekits/listeners/InteractListeners.java b/src/main/java/com/songoda/ultimatekits/listeners/InteractListeners.java index a109686..b8b4ab6 100644 --- a/src/main/java/com/songoda/ultimatekits/listeners/InteractListeners.java +++ b/src/main/java/com/songoda/ultimatekits/listeners/InteractListeners.java @@ -3,7 +3,7 @@ package com.songoda.ultimatekits.listeners; import com.songoda.core.compatibility.ServerVersion; import com.songoda.core.gui.GuiManager; import com.songoda.ultimatekits.UltimateKits; -import com.songoda.ultimatekits.gui.GUIBlockEditor; +import com.songoda.ultimatekits.gui.BlockEditorGui; import com.songoda.ultimatekits.kit.Kit; import com.songoda.ultimatekits.kit.KitBlockData; import com.songoda.ultimatekits.kit.KitType; @@ -69,7 +69,7 @@ public class InteractListeners implements Listener { Methods.makeReadable(time)).sendPrefixedMessage(player); } } else if (kit.getLink() != null || kit.getPrice() != 0) { - kit.buy(player); + kit.buy(player, guiManager); } else { kit.display(player, guiManager, null); } @@ -78,7 +78,7 @@ public class InteractListeners implements Listener { event.setCancelled(true); } if (player.isSneaking() && player.hasPermission("ultimatekits.admin")) { - new GUIBlockEditor(plugin, player, block.getLocation()); + guiManager.showGUI(player, new BlockEditorGui(plugin, kitBlockData)); return; } if (player.getItemInHand().getType() == Material.TRIPWIRE_HOOK) { diff --git a/src/main/java/com/songoda/ultimatekits/utils/gui/AbstractAnvilGUI.java b/src/main/java/com/songoda/ultimatekits/utils/gui/AbstractAnvilGUI.java deleted file mode 100644 index 88ac2ca..0000000 --- a/src/main/java/com/songoda/ultimatekits/utils/gui/AbstractAnvilGUI.java +++ /dev/null @@ -1,289 +0,0 @@ -package com.songoda.ultimatekits.utils.gui; - -import com.songoda.ultimatekits.UltimateKits; -import com.songoda.ultimatekits.utils.version.NMSUtil; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.HandlerList; -import org.bukkit.event.Listener; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryCloseEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.Map; - -public class AbstractAnvilGUI { - private static Class BlockPositionClass; - private static Class PacketPlayOutOpenWindowClass; - private static Class IChatBaseComponentClass; - private static Class ICraftingClass; - private static Class ContainerAnvilClass; - private static Class ChatMessageClass; - private static Class EntityHumanClass; - private static Class ContainerClass; - private static Class ContainerAccessClass; - private static Class WorldClass; - private static Class PlayerInventoryClass; - private static Class ContainersClass; - private static Class CraftPlayerClass; - - private Player player; - private Map items = new HashMap<>(); - private OnClose onClose = null; - private Inventory inv; - private Listener listener; - - static { - BlockPositionClass = NMSUtil.getNMSClass("BlockPosition"); - PacketPlayOutOpenWindowClass = NMSUtil.getNMSClass("PacketPlayOutOpenWindow"); - IChatBaseComponentClass = NMSUtil.getNMSClass("IChatBaseComponent"); - ICraftingClass = NMSUtil.getNMSClass("ICrafting"); - ContainerAnvilClass = NMSUtil.getNMSClass("ContainerAnvil"); - EntityHumanClass = NMSUtil.getNMSClass("EntityHuman"); - ChatMessageClass = NMSUtil.getNMSClass("ChatMessage"); - ContainerClass = NMSUtil.getNMSClass("Container"); - WorldClass = NMSUtil.getNMSClass("World"); - PlayerInventoryClass = NMSUtil.getNMSClass("PlayerInventory"); - CraftPlayerClass = NMSUtil.getCraftClass("entity.CraftPlayer"); - - if (NMSUtil.getVersionNumber() > 13) { - ContainerAccessClass = NMSUtil.getNMSClass("ContainerAccess"); - ContainersClass = NMSUtil.getNMSClass("Containers"); - } - } - - public AbstractAnvilGUI(Player player, AnvilClickEventHandler handler) { - UltimateKits instance = UltimateKits.getInstance(); - this.player = player; - - this.listener = new Listener() { - @EventHandler(priority = EventPriority.HIGHEST) - public void onInventoryClick(InventoryClickEvent event) { - if (event.getWhoClicked() instanceof Player && event.getInventory().equals(AbstractAnvilGUI.this.inv)) { - event.setCancelled(true); - - ItemStack item = event.getCurrentItem(); - int slot = event.getRawSlot(); - - if (item == null || item.getType().equals(Material.AIR) || slot != 2) - return; - - String name = ""; - - ItemMeta meta = item.getItemMeta(); - if (meta != null && meta.hasDisplayName()) - name = meta.getDisplayName(); - - AnvilClickEvent clickEvent = new AnvilClickEvent(AnvilSlot.bySlot(slot), name); - handler.onAnvilClick(clickEvent); - - if (clickEvent.getWillClose()) - event.getWhoClicked().closeInventory(); - - if (clickEvent.getWillDestroy()) - AbstractAnvilGUI.this.destroy(); - } - } - - @EventHandler(priority = EventPriority.HIGHEST) - public void onInventoryClose(InventoryCloseEvent event) { - if (event.getPlayer() instanceof Player && AbstractAnvilGUI.this.inv.equals(event.getInventory())) { - Inventory inv = event.getInventory(); - player.setLevel(player.getLevel() - 1); - inv.clear(); - Bukkit.getScheduler().scheduleSyncDelayedTask(instance, () -> { - if (AbstractAnvilGUI.this.onClose != null) - AbstractAnvilGUI.this.onClose.onClose(player, inv); - AbstractAnvilGUI.this.destroy(); - }, 1L); - } - } - - @EventHandler(priority = EventPriority.HIGHEST) - public void onPlayerQuit(PlayerQuitEvent event) { - if (event.getPlayer().equals(AbstractAnvilGUI.this.player)) { - player.setLevel(player.getLevel() - 1); - AbstractAnvilGUI.this.destroy(); - } - } - }; - - Bukkit.getPluginManager().registerEvents(this.listener, instance); - } - - public Player getPlayer() { - return this.player; - } - - public void setSlot(AnvilSlot slot, ItemStack item) { - this.items.put(slot, item); - } - - public void open() { - this.player.setLevel(this.player.getLevel() + 1); - - try { - Object craftPlayer = CraftPlayerClass.cast(this.player); - Method getHandleMethod = CraftPlayerClass.getMethod("getHandle"); - Object entityPlayer = getHandleMethod.invoke(craftPlayer); - Object playerInventory = NMSUtil.getFieldObject(entityPlayer, NMSUtil.getField(entityPlayer.getClass(), "inventory", false)); - Object world = NMSUtil.getFieldObject(entityPlayer, NMSUtil.getField(entityPlayer.getClass(), "world", false)); - Object blockPosition = BlockPositionClass.getConstructor(int.class, int.class, int.class).newInstance(0, 0, 0); - - Object container; - - if (NMSUtil.getVersionNumber() > 13) { - container = ContainerAnvilClass - .getConstructor(int.class, PlayerInventoryClass, ContainerAccessClass) - .newInstance(7, playerInventory, ContainerAccessClass.getMethod("at", WorldClass, BlockPositionClass).invoke(null, world, blockPosition)); - } else { - container = ContainerAnvilClass - .getConstructor(PlayerInventoryClass, WorldClass, BlockPositionClass, EntityHumanClass) - .newInstance(playerInventory, world, blockPosition, entityPlayer); - } - - NMSUtil.getField(ContainerClass, "checkReachable", true).set(container, false); - - Method getBukkitViewMethod = container.getClass().getMethod("getBukkitView"); - Object bukkitView = getBukkitViewMethod.invoke(container); - Method getTopInventoryMethod = bukkitView.getClass().getMethod("getTopInventory"); - this.inv = (Inventory) getTopInventoryMethod.invoke(bukkitView); - - for (AnvilSlot slot : this.items.keySet()) { - this.inv.setItem(slot.getSlot(), this.items.get(slot)); - } - - Method nextContainerCounterMethod = entityPlayer.getClass().getMethod("nextContainerCounter"); - int c = (int) nextContainerCounterMethod.invoke(entityPlayer); - - Constructor chatMessageConstructor = ChatMessageClass.getConstructor(String.class, Object[].class); - Object inventoryTitle = chatMessageConstructor.newInstance("Repairing", new Object[]{}); - - Object packet; - - if (NMSUtil.getVersionNumber() > 13) { - packet = PacketPlayOutOpenWindowClass - .getConstructor(int.class, ContainersClass, IChatBaseComponentClass) - .newInstance(c, ContainersClass.getField("ANVIL").get(null), inventoryTitle); - } else { - packet = PacketPlayOutOpenWindowClass - .getConstructor(int.class, String.class, IChatBaseComponentClass, int.class) - .newInstance(c, "minecraft:anvil", inventoryTitle, 0); - } - - NMSUtil.sendPacket(this.player, packet); - - Field activeContainerField = NMSUtil.getField(EntityHumanClass, "activeContainer", true); - - if (activeContainerField != null) { - activeContainerField.set(entityPlayer, container); - NMSUtil.getField(ContainerClass, "windowId", true).set(activeContainerField.get(entityPlayer), c); - Method addSlotListenerMethod = activeContainerField.get(entityPlayer).getClass().getMethod("addSlotListener", ICraftingClass); - addSlotListenerMethod.invoke(activeContainerField.get(entityPlayer), entityPlayer); - - if (NMSUtil.getVersionNumber() > 13) { - ContainerClass.getMethod("setTitle", IChatBaseComponentClass).invoke(container, inventoryTitle); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - public void destroy() { - this.player = null; - this.items = null; - - HandlerList.unregisterAll(this.listener); - - this.listener = null; - } - - private OnClose getOnClose() { - return this.onClose; - } - - public void setOnClose(OnClose onClose) { - this.onClose = onClose; - } - - public enum AnvilSlot { - INPUT_LEFT(0), - INPUT_RIGHT(1), - OUTPUT(2); - - private int slot; - - AnvilSlot(int slot) { - this.slot = slot; - } - - public static AnvilSlot bySlot(int slot) { - for (AnvilSlot anvilSlot : values()) { - if (anvilSlot.getSlot() == slot) { - return anvilSlot; - } - } - - return null; - } - - public int getSlot() { - return this.slot; - } - } - - @FunctionalInterface - public interface AnvilClickEventHandler { - void onAnvilClick(AnvilClickEvent event); - } - - public class AnvilClickEvent { - private AnvilSlot slot; - - private String name; - - private boolean close = true; - private boolean destroy = true; - - public AnvilClickEvent(AnvilSlot slot, String name) { - this.slot = slot; - this.name = name; - } - - public AnvilSlot getSlot() { - return this.slot; - } - - public String getName() { - return this.name; - } - - public boolean getWillClose() { - return this.close; - } - - public void setWillClose(boolean close) { - this.close = close; - } - - public boolean getWillDestroy() { - return this.destroy; - } - - public void setWillDestroy(boolean destroy) { - this.destroy = destroy; - } - } - -} \ No newline at end of file diff --git a/src/main/java/com/songoda/ultimatekits/utils/gui/AbstractGUI.java b/src/main/java/com/songoda/ultimatekits/utils/gui/AbstractGUI.java deleted file mode 100644 index 67c8566..0000000 --- a/src/main/java/com/songoda/ultimatekits/utils/gui/AbstractGUI.java +++ /dev/null @@ -1,245 +0,0 @@ -package com.songoda.ultimatekits.utils.gui; - -import com.songoda.ultimatekits.UltimateKits; -import com.songoda.ultimatekits.utils.Methods; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryCloseEvent; -import org.bukkit.event.inventory.InventoryType; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryHolder; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.plugin.java.JavaPlugin; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public abstract class AbstractGUI implements Listener { - - private static boolean listenersInitialized = false; - protected final Player player; - protected Inventory inventory = null; - protected String setTitle = null; - protected boolean cancelBottom = false; - private Map clickables = new HashMap<>(); - private List onCloses = new ArrayList<>(); - private Map draggableRanges = new HashMap<>(); - - public AbstractGUI(Player player) { - this.player = player; - } - - public static void initializeListeners(JavaPlugin plugin) { - if (listenersInitialized) return; - - Bukkit.getPluginManager().registerEvents(new Listener() { - @EventHandler - public void onClickGUI(InventoryClickEvent event) { - Inventory inventory = event.getClickedInventory(); - if (inventory == null) return; - AbstractGUI gui = getGUIFromInventory(inventory); - Player player = (Player) event.getWhoClicked(); - - boolean bottom = false; - - InventoryType type = event.getClickedInventory().getType(); - if (type != InventoryType.CHEST && type != InventoryType.PLAYER) return; - - if (gui == null && event.getWhoClicked().getOpenInventory().getTopInventory() != null) { - Inventory top = event.getWhoClicked().getOpenInventory().getTopInventory(); - gui = getGUIFromInventory(top); - - if (gui != null && gui.cancelBottom) event.setCancelled(true); - bottom = true; - } - - if (gui == null) return; - - if (!bottom) event.setCancelled(true); - - if (!gui.draggableRanges.isEmpty() && !bottom) { - for (Map.Entry entry : gui.draggableRanges.entrySet()) { - Range range = entry.getKey(); - if (range.getMax() == range.getMin() && event.getSlot() == range.getMin() - || event.getSlot() >= range.getMin() && event.getSlot() <= range.getMax()) { - event.setCancelled(!entry.getValue()); - if (!entry.getValue()) break; - } - } - } - - Map entries = new HashMap<>(gui.clickables); - - for (Map.Entry entry : entries.entrySet()) { - Range range = entry.getKey(); - if (range.isBottom() && !bottom || !range.isBottom() && bottom || range.getClickType() != null && range.getClickType() != event.getClick()) - continue; - if (event.getSlot() >= range.getMin() && event.getSlot() <= range.getMax()) { - entry.getValue().Clickable(player, inventory, event.getCursor(), event.getSlot(), event.getClick()); - player.playSound(player.getLocation(), entry.getKey().getOnClickSound(), 1F, 1F); - } - } - } - - @EventHandler - public void onCloseGUI(InventoryCloseEvent event) { - Inventory inventory = event.getInventory(); - AbstractGUI gui = getGUIFromInventory(inventory); - - if (gui == null || gui.inventory == null) return; - - for (OnClose onClose : gui.onCloses) { - onClose.onClose((Player) event.getPlayer(), inventory); - } - gui.destory(); - } - - private AbstractGUI getGUIFromInventory(Inventory inventory) { - if (inventory.getHolder() == null) return null; - InventoryHolder holder = inventory.getHolder(); - if (!(holder instanceof GUIHolder)) return null; - - return ((AbstractGUI.GUIHolder) holder).getGUI(); - } - }, plugin); - listenersInitialized = true; - } - - public void init(String title, int slots) { - if (inventory == null - || inventory.getSize() != slots - || Methods.formatTitle(title) != player.getOpenInventory().getTitle()) { - this.inventory = Bukkit.getServer().createInventory(new GUIHolder(), slots, Methods.formatTitle(title)); - this.setTitle = Methods.formatTitle(title); - if (this.clickables.size() == 0) - registerClickables(); - if (this.onCloses.size() == 0) - registerOnCloses(); - } - constructGUI(); - initializeListeners(UltimateKits.getInstance()); - player.openInventory(inventory); - } - - private void destory() { - onCloses.clear(); - clickables.clear(); - draggableRanges.clear(); - } - - protected abstract void constructGUI(); - - protected void addDraggable(Range range, boolean option) { - this.draggableRanges.put(range, option); - } - - protected void removeDraggable() { - this.draggableRanges.clear(); - } - - protected abstract void registerClickables(); - - protected abstract void registerOnCloses(); - - protected ItemStack createButton(int slot, Inventory inventory, ItemStack item, String name, String... lore) { - ItemMeta meta = item.getItemMeta(); - meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', name)); - if (lore != null && lore.length != 0) { - List newLore = new ArrayList<>(); - for (String line : lore) newLore.add(ChatColor.translateAlternateColorCodes('&', line)); - meta.setLore(newLore); - } - item.setItemMeta(meta); - inventory.setItem(slot, item); - return item; - } - - protected ItemStack createButton(int slot, ItemStack item, String name, ArrayList lore) { - return createButton(slot, inventory, item, name, lore.toArray(new String[0])); - } - - - protected ItemStack createButton(int slot, ItemStack item, String name, String... lore) { - return createButton(slot, inventory, item, name, lore); - } - - protected ItemStack createButton(int slot, Object item, String name, String... lore) { - if (item instanceof ItemStack) - return createButton(slot, inventory, (ItemStack)item, name, lore); - else - return createButton(slot, inventory, (Material)item, name, lore); - } - - protected ItemStack createButton(int slot, Inventory inventory, Material material, String name, String... lore) { - return createButton(slot, inventory, new ItemStack(material), name, lore); - } - - protected ItemStack createButton(int slot, Material material, String name, String... lore) { - return createButton(slot, inventory, new ItemStack(material), name, lore); - } - - protected ItemStack createButton(int slot, Material material, String name, ArrayList lore) { - return createButton(slot, material, name, lore.toArray(new String[0])); - } - - protected void registerClickable(int min, int max, ClickType clickType, boolean bottom, Clickable clickable) { - clickables.put(new Range(min, max, clickType, bottom), clickable); - } - - protected void registerClickable(int min, int max, ClickType clickType, Clickable clickable) { - registerClickable(min, max, clickType, false, clickable); - } - - protected void registerClickable(int slot, ClickType clickType, Clickable clickable) { - registerClickable(slot, slot, clickType, false, clickable); - } - - protected void registerClickable(int min, int max, Clickable clickable) { - registerClickable(min, max, null, false, clickable); - } - - protected void registerClickable(int slot, boolean bottom, Clickable clickable) { - registerClickable(slot, slot, null, bottom, clickable); - } - - protected void registerClickable(int slot, Clickable clickable) { - registerClickable(slot, slot, null, false, clickable); - } - - protected void resetClickables() { - clickables.clear(); - } - - protected void registerOnClose(OnClose onClose) { - onCloses.add(onClose); - } - - public Inventory getInventory() { - return inventory; - } - - public class GUIHolder implements InventoryHolder { - - @Override - public Inventory getInventory() { - return inventory; - } - - public AbstractGUI getGUI() { - return AbstractGUI.this; - } - } - - public String getSetTitle() { - return setTitle; - } -} diff --git a/src/main/resources/en_US.lang b/src/main/resources/en_US.lang index df657f1..9971678 100644 --- a/src/main/resources/en_US.lang +++ b/src/main/resources/en_US.lang @@ -37,12 +37,29 @@ interface.key.description1 = "&rRight-Click on [a ]&c&l%kit%&r kit" interface.key.description2 = "&rand receive its contents!" interface.key.description3 = "&rand receive some of its contents!" interface.key.description4 = "&rGives kit &c&l%amt% &rtimes." +interface.kitblock.title = "&8This contains &a%kit%" +interface.kitblock.switchtype = "&5&lSwitch kit type" +interface.kitblock.switchtypelore = "&7Click to swap this kit blocks function.|Preview|Crate|Claim" +interface.kitblock.decor = "&9&lDecor Options" +interface.kitblock.decorlore = "&7Click to edit the decoration|&7options for this kit." +interface.kitblock.edit = "&a&lEdit kit" +interface.kitblock.editlore = "&7Click to edit the kit|&7contained in this block." +interface.kitdecor.title = "&8Editing decor for &a%kit%&8. +interface.kitdecor.hologram = "&9&lToggle Holograms" +interface.kitdecor.particle = "&9&lToggle Particles" +interface.kitdecor.display = "&9&lToggle DisplayItems" +interface.kitdecor.displayone = "&9&lToggle DisplayItem Override" +interface.kitdecor.displayonelore = "%enabled%||&7Enabling this option will|&7override the DisplayItems|&7above your kit to the single|&7DisplayItem set in this kit|&7GUI options." +interface.kitdecor.settingon = "&7Currently: &aEnabled&7." +interface.kitdecor.settingoff = "&7Currently &cDisabled&7." + #Command Messages command.general.noperms = "&cYou do not have permission to do that!" command.kit.nokitsupplied = "&7Please include a kit to preview." command.kit.kitdoesntexist = "&cThat kit does not exist." +command.kit.nokitatblock = "&8This block does not contain a kit." command.kit.kitalreadyexists = "&cThat kit already exists." command.kit.playernotfound = "&cThis player is not online or doesn't exist." @@ -63,6 +80,6 @@ event.claim.noaccess = "&7Cooldown: &cNo Access.." event.claim.full = "&cYour inventory is too full to claim this kit!" event.create.won = "&7You got a &6%item%&7." event.crate.wrongkey = "&cThis key doesn't belong to this kit.." -event.purchase.cancelled = "&cPurchase Cancelled." +event.purchase.cancelled = "&cPurchase Canceled." event.key.given = "&9You have received a &a%kit% &9kit key." event.key.success = "&9You have successfully redeemed a key for the kit &7%kit%&9." \ No newline at end of file