core conversion progress

This commit is contained in:
jascotty2 2019-09-16 09:07:33 -05:00
parent 2213fa048b
commit 22bfc43ccf
20 changed files with 405 additions and 995 deletions

View File

@ -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;
}

View File

@ -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;

View File

@ -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();

View File

@ -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;
}

View File

@ -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("");

View 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"));
}
}

View File

@ -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();
});
}
}

View 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);
});
}
}

View File

@ -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() {
}
}

View File

@ -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() {
}
}

View File

@ -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() {
}
}

View File

@ -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);
}

View File

@ -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);
});
}

View File

@ -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);

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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) {

View File

@ -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;
}
}
}

View File

@ -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;
}
}

View File

@ -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."