mirror of
https://github.com/songoda/UltimateKits.git
synced 2024-09-29 22:27:35 +02:00
core conversion progress
This commit is contained in:
parent
2213fa048b
commit
22bfc43ccf
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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<String> tab = new ArrayList<>();
|
||||
if (args.length == 2) {
|
||||
if (args.length == 1) {
|
||||
for (Kit kit : UltimateKits.getInstance().getKitManager().getKits())
|
||||
tab.add(kit.getName());
|
||||
return tab;
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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("");
|
||||
|
112
src/main/java/com/songoda/ultimatekits/gui/BlockEditorGui.java
Normal file
112
src/main/java/com/songoda/ultimatekits/gui/BlockEditorGui.java
Normal file
@ -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<String> 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"));
|
||||
}
|
||||
|
||||
}
|
@ -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();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
112
src/main/java/com/songoda/ultimatekits/gui/DecorOptionsGui.java
Normal file
112
src/main/java/com/songoda/ultimatekits/gui/DecorOptionsGui.java
Normal file
@ -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);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -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<String> 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() {
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -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<String> 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() {
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -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<String> 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() {
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
});
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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<KitItem> contents;
|
||||
private KitAnimation kitAnimation;
|
||||
|
||||
public Kit(String name, String title, String link, double price, Material displayItem, int delay, boolean hidden, List<KitItem> contents, KitAnimation kitAnimation) {
|
||||
public Kit(String name, String title, String link, double price, CompatibleMaterial displayItem, int delay, boolean hidden, List<KitItem> 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<ItemStack> 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<String> 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;
|
||||
}
|
||||
|
||||
|
@ -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<String> 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<String> 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;
|
||||
}
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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<AnvilSlot, ItemStack> 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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -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<Range, Clickable> clickables = new HashMap<>();
|
||||
private List<OnClose> onCloses = new ArrayList<>();
|
||||
private Map<Range, Boolean> 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<Range, Boolean> 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<Range, Clickable> entries = new HashMap<>(gui.clickables);
|
||||
|
||||
for (Map.Entry<Range, Clickable> 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<String> 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<String> 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<String> 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;
|
||||
}
|
||||
}
|
@ -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."
|
Loading…
Reference in New Issue
Block a user