From 34fb35e5e22b7859c208a95bc6524720892369e3 Mon Sep 17 00:00:00 2001 From: Kiran Hart Date: Fri, 12 Oct 2018 21:26:31 -0400 Subject: [PATCH] Update 1.0.3 --- dependency-reduced-pom.xml | 2 +- pom.xml | 2 +- .../java/com/shadebyte/auctionhouse/Core.java | 16 +++- .../auctionhouse/api/enums/Lang.java | 1 + .../auction/DiscordMessageWrapper.java | 96 +++++++++++++++++++ .../cmds/subcmds/SellCommand.java | 79 +++++++++------ .../auctionhouse/events/PlayerListener.java | 6 ++ src/main/resources/config.yml | 34 ++++++- src/main/resources/en_US.lang | 1 + .../java/com/shadebyte/server/ServerTest.java | 27 +----- 10 files changed, 203 insertions(+), 61 deletions(-) create mode 100644 src/main/java/com/shadebyte/auctionhouse/auction/DiscordMessageWrapper.java diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml index 519e28c..ce27549 100644 --- a/dependency-reduced-pom.xml +++ b/dependency-reduced-pom.xml @@ -4,7 +4,7 @@ com.shadebyte auctionhouse AuctionHouse - 1.0.1 + 1.0.3 A premium auction house plugin https://www.shadebyte.com diff --git a/pom.xml b/pom.xml index 00e8bde..2e6dfe2 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.shadebyte auctionhouse - 1.0.1 + 1.0.3 jar AuctionHouse diff --git a/src/main/java/com/shadebyte/auctionhouse/Core.java b/src/main/java/com/shadebyte/auctionhouse/Core.java index df77469..ba4a80a 100644 --- a/src/main/java/com/shadebyte/auctionhouse/Core.java +++ b/src/main/java/com/shadebyte/auctionhouse/Core.java @@ -1,5 +1,6 @@ package com.shadebyte.auctionhouse; +import com.google.common.collect.Lists; import com.massivestats.MassiveStats; import com.shadebyte.auctionhouse.api.AuctionAPI; import com.shadebyte.auctionhouse.api.enums.Lang; @@ -7,13 +8,13 @@ import com.shadebyte.auctionhouse.api.event.AuctionEndEvent; import com.shadebyte.auctionhouse.api.event.AuctionStartEvent; import com.shadebyte.auctionhouse.api.event.TransactionCompleteEvent; import com.shadebyte.auctionhouse.auction.AuctionItem; +import com.shadebyte.auctionhouse.auction.AuctionPlayer; import com.shadebyte.auctionhouse.auction.Transaction; import com.shadebyte.auctionhouse.cmds.CommandManager; import com.shadebyte.auctionhouse.events.AGUIListener; import com.shadebyte.auctionhouse.events.PlayerListener; import com.shadebyte.auctionhouse.events.TransactionListener; import com.shadebyte.auctionhouse.inventory.AGUI; -import com.shadebyte.auctionhouse.inventory.inventories.AuctionGUI; import com.shadebyte.auctionhouse.util.Debugger; import com.shadebyte.auctionhouse.util.Locale; import com.shadebyte.auctionhouse.util.storage.ConfigWrapper; @@ -225,8 +226,17 @@ public final class Core extends JavaPlugin { if (getConfig().getBoolean("settings.auto-refresh-auction-page")) { Bukkit.getOnlinePlayers().forEach(p -> { if (p.getOpenInventory().getTopInventory().getTitle().equalsIgnoreCase(ChatColor.translateAlternateColorCodes('&', Core.getInstance().getConfig().getString("gui.auction.title")))) { - p.closeInventory(); - p.openInventory(new AuctionGUI(p).getInventory()); + p.getOpenInventory().getTopInventory().clear(); + p.getOpenInventory().getTopInventory().setItem(45, AuctionAPI.getInstance().createConfigItem("gui.auction.items.yourauctions", new AuctionPlayer(p).getTotalActiveAuctions(), 0)); + p.getOpenInventory().getTopInventory().setItem(46, AuctionAPI.getInstance().createConfigItem("gui.auction.items.collectionbin", 0, new AuctionPlayer(p).getTotalExpiredAuctions())); + p.getOpenInventory().getTopInventory().setItem(48, AuctionAPI.getInstance().createConfigItem("gui.auction.items.previouspage", 0, 0)); + p.getOpenInventory().getTopInventory().setItem(49, AuctionAPI.getInstance().createConfigItem("gui.auction.items.refresh", 0, 0)); + p.getOpenInventory().getTopInventory().setItem(50, AuctionAPI.getInstance().createConfigItem("gui.auction.items.nextpage", 0, 0)); + p.getOpenInventory().getTopInventory().setItem(52, AuctionAPI.getInstance().createConfigItem("gui.auction.items.howtosell", 0, 0)); + p.getOpenInventory().getTopInventory().setItem(53, AuctionAPI.getInstance().createConfigItem("gui.auction.items.guide", 0, 0)); + + List> chunks = Lists.partition(Core.getInstance().auctionItems, 45); + chunks.get(0).forEach(item -> p.getOpenInventory().getTopInventory().setItem(p.getOpenInventory().getTopInventory().firstEmpty(), item.auctionStack())); } }); } diff --git a/src/main/java/com/shadebyte/auctionhouse/api/enums/Lang.java b/src/main/java/com/shadebyte/auctionhouse/api/enums/Lang.java index d2b7ef3..5a01749 100644 --- a/src/main/java/com/shadebyte/auctionhouse/api/enums/Lang.java +++ b/src/main/java/com/shadebyte/auctionhouse/api/enums/Lang.java @@ -16,6 +16,7 @@ public enum Lang { CANNOT_BUY_OWN("cantbuyown"), CANNOT_BID_OWN("cantbidonown"), AIR("air"), + INVALID_TRANSACTION("invalidtransaction"), AUCTION_LISTED("auction.listed"), AUCTION_BUY("auction.buy"), diff --git a/src/main/java/com/shadebyte/auctionhouse/auction/DiscordMessageWrapper.java b/src/main/java/com/shadebyte/auctionhouse/auction/DiscordMessageWrapper.java new file mode 100644 index 0000000..d0ff741 --- /dev/null +++ b/src/main/java/com/shadebyte/auctionhouse/auction/DiscordMessageWrapper.java @@ -0,0 +1,96 @@ +package com.shadebyte.auctionhouse.auction; + +import com.shadebyte.auctionhouse.Core; +import com.shadebyte.auctionhouse.api.AuctionAPI; +import com.shadebyte.auctionhouse.api.discordwebhook.embed.FieldEmbed; +import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.enchantments.Enchantment; + +import java.util.UUID; + +/** + * The current file has been created by Kiran Hart + * Date Created: 9/17/2018 + * Time Created: 2:28 PM + * Usage of any code found within this class is prohibited unless given explicit permission otherwise. + */ +public class DiscordMessageWrapper { + + private String configLocation; + private AuctionItem auctionItem; + + public DiscordMessageWrapper(String configLocation, AuctionItem auctionItem) { + this.configLocation = configLocation; + this.auctionItem = auctionItem; + } + + public FieldEmbed getFieldEmbed() { + String name = configLocation; + return FieldEmbed.builder() + .name(name.substring(name.lastIndexOf(".")).replace("_", " ").replace(".", "")) + .value(Core.getInstance().getConfig().getString(configLocation + ".data").replace("{seller}", Bukkit.getOfflinePlayer(UUID.fromString(auctionItem.getOwner())).getName()) + .replace("{bid_start}", AuctionAPI.getInstance().friendlyNumber(auctionItem.getStartPrice())) + .replace("{bid_increment}", AuctionAPI.getInstance().friendlyNumber(auctionItem.getBidIncrement())) + .replace("{buy_now}", AuctionAPI.getInstance().friendlyNumber(auctionItem.getBuyNowPrice())) + .replace("{item_type}", auctionItem.getItem().getType().name()) + .replace("{item_name}", getDisplayName()) + .replace("{item_enchants}", getEnchantments()) + .replace("{item_lore}", getLore()) + ).inline(Core.getInstance().getConfig().getBoolean(configLocation + ".inline")).build(); + } + + + public String getDisplayName() { + String name; + if (auctionItem.getItem().hasItemMeta()) { + if (auctionItem.getItem().getItemMeta().hasDisplayName()) + name = ChatColor.stripColor(auctionItem.getItem().getItemMeta().getDisplayName()); + else + name = StringUtils.capitalize(ChatColor.stripColor(auctionItem.getItem().getType().name().toLowerCase().replace("_", " "))); + } else { + name = StringUtils.capitalize(ChatColor.stripColor(auctionItem.getItem().getType().name().toLowerCase().replace("_", " "))); + } + return name; + } + + public String getEnchantments() { + String lore = ""; + if (auctionItem.getItem().hasItemMeta()) { + if (!auctionItem.getItem().getItemMeta().hasEnchants()) { + lore = "No Enchantments"; + } else { + for (Enchantment enchantment : auctionItem.getItem().getItemMeta().getEnchants().keySet()) { + String name = enchantment.getName().replace("_", " ").toLowerCase(); + String level = AuctionAPI.getInstance().toRoman(auctionItem.getItem().getItemMeta().getEnchantLevel(enchantment)); + String e = StringUtils.capitalize(name) + " " + level; + lore += e + ", "; + } + } + } else { + lore = "No Enchantments"; + } + return lore; + } + + public String getLore() { + String lore = ""; + if (auctionItem.getItem().hasItemMeta()) { + if (!auctionItem.getItem().getItemMeta().hasLore()) { + lore = "No Lore"; + } else { + for (String s : auctionItem.getItem().getItemMeta().getLore()) { + lore += ChatColor.stripColor(s) + ", "; + } + } + } else { + lore = "No Lore"; + } + return lore; + } + + public String getConfigLocation() { + return configLocation; + } +} diff --git a/src/main/java/com/shadebyte/auctionhouse/cmds/subcmds/SellCommand.java b/src/main/java/com/shadebyte/auctionhouse/cmds/subcmds/SellCommand.java index 8f17b72..cdb5911 100644 --- a/src/main/java/com/shadebyte/auctionhouse/cmds/subcmds/SellCommand.java +++ b/src/main/java/com/shadebyte/auctionhouse/cmds/subcmds/SellCommand.java @@ -11,12 +11,15 @@ import com.shadebyte.auctionhouse.api.enums.Permissions; import com.shadebyte.auctionhouse.api.event.AuctionStartEvent; import com.shadebyte.auctionhouse.auction.AuctionItem; import com.shadebyte.auctionhouse.auction.AuctionPlayer; +import com.shadebyte.auctionhouse.auction.DiscordMessageWrapper; import com.shadebyte.auctionhouse.cmds.SubCommand; import org.bukkit.Material; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; /** * The current file has been created by Kiran Hart @@ -65,6 +68,11 @@ public class SellCommand extends SubCommand { return; } + if (AuctionAPI.getItemInHand(p) == null || AuctionAPI.getItemInHand(p).getType() == Material.AIR) { + p.sendMessage(Core.getInstance().getSettings().getPrefix() + Core.getInstance().getLocale().getMessage(Lang.AIR.getNode())); + return; + } + AuctionItem auctionItem = new AuctionItem(p.getUniqueId().toString(), AuctionAPI.getItemInHand(p), Core.getInstance().getConfig().getInt("settings.default-auction-time"), buyNow, 0, buyNow); AuctionStartEvent auctionStartEvent = new AuctionStartEvent(auctionItem); Core.getInstance().getServer().getPluginManager().callEvent(auctionStartEvent); @@ -73,25 +81,32 @@ public class SellCommand extends SubCommand { Core.getInstance().auctionItems.add(0, auctionItem); p.sendMessage(Core.getInstance().getSettings().getPrefix() + Core.getInstance().getLocale().getMessage(Lang.AUCTION_LISTED.getNode()).replace("{itemname}", auctionItem.getDisplayName()).replace("{price}", AuctionAPI.getInstance().friendlyNumber(buyNow))); + AuctionAPI.setItemInHand(p, null); + p.updateInventory(); + //Discord Hook if (Core.getInstance().getConfig().getBoolean("discord.enabled")) { - DiscordHook discordHook = new DiscordHook(Core.getInstance().getConfig().getString("discord.webhook")); - DiscordEmbed de = DiscordEmbed.builder() - .title(Core.getInstance().getConfig().getString("discord.title")) - .description(Core.getInstance().getConfig().getString("discord.description")) - .color(1) - .fields(Arrays.asList( - FieldEmbed.builder().name("Seller").value(p.getName()).inline(true).build(), - FieldEmbed.builder().name("Buy Now").value(AuctionAPI.getInstance().friendlyNumber(buyNow)).build(), - FieldEmbed.builder().name("Item").value(auctionItem.getItem().getType().name() + ":" + auctionItem.getItem().getDurability()).build() - )) - .build(); - DiscordMessage dm = DiscordMessage.builder().username(Core.getInstance().getConfig().getString("discord.username")).content("").avatarUrl(Core.getInstance().getConfig().getString("discord.profilepicture")).embeds(Arrays.asList(de)).build(); - discordHook.send(dm); + //Discord Hook + if (Core.getInstance().getConfig().getBoolean("discord.enabled")) { + DiscordHook discordHook = new DiscordHook(Core.getInstance().getConfig().getString("discord.webhook")); + + + List embeds = new ArrayList<>(); + for (String s : Core.getInstance().getConfig().getConfigurationSection("discord.add").getKeys(false)) { + embeds.add(new DiscordMessageWrapper("discord.add." + s, auctionItem).getFieldEmbed()); + } + + DiscordEmbed de = DiscordEmbed.builder() + .title(Core.getInstance().getConfig().getString("discord.title")) + .color(1) + .fields(embeds) + .build(); + + DiscordMessage dm = DiscordMessage.builder().username(Core.getInstance().getConfig().getString("discord.username")).content("").avatarUrl(Core.getInstance().getConfig().getString("discord.profilepicture")).embeds(Arrays.asList(de)).build(); + discordHook.send(dm); + } } - - AuctionAPI.setItemInHand(p, null); } } } else { @@ -168,22 +183,26 @@ public class SellCommand extends SubCommand { //Discord Hook if (Core.getInstance().getConfig().getBoolean("discord.enabled")) { - DiscordHook discordHook = new DiscordHook(Core.getInstance().getConfig().getString("discord.webhook")); - DiscordEmbed de = DiscordEmbed.builder() - .title(Core.getInstance().getConfig().getString("discord.title")) - .description(Core.getInstance().getConfig().getString("discord.description")) - .color(1) - .fields(Arrays.asList( - FieldEmbed.builder().name("Seller").value(p.getName()).inline(true).build(), - FieldEmbed.builder().name("Start Price").value(AuctionAPI.getInstance().friendlyNumber(startPrice)).build(), - FieldEmbed.builder().name("Increment").value(AuctionAPI.getInstance().friendlyNumber(increment)).build(), - FieldEmbed.builder().name("Buy Now").value(AuctionAPI.getInstance().friendlyNumber(buyNow)).build(), - FieldEmbed.builder().name("Item").value(auctionItem.getItem().getType().name() + ":" + auctionItem.getItem().getDurability()).build() - )) - .build(); - DiscordMessage dm = DiscordMessage.builder().username(Core.getInstance().getConfig().getString("discord.username")).content("").avatarUrl(Core.getInstance().getConfig().getString("discord.profilepicture")).embeds(Arrays.asList(de)).build(); - discordHook.send(dm); + //Discord Hook + if (Core.getInstance().getConfig().getBoolean("discord.enabled")) { + DiscordHook discordHook = new DiscordHook(Core.getInstance().getConfig().getString("discord.webhook")); + + + List embeds = new ArrayList<>(); + for (String s : Core.getInstance().getConfig().getConfigurationSection("discord.add").getKeys(false)) { + embeds.add(new DiscordMessageWrapper("discord.add." + s, auctionItem).getFieldEmbed()); + } + + DiscordEmbed de = DiscordEmbed.builder() + .title(Core.getInstance().getConfig().getString("discord.title")) + .color(1) + .fields(embeds) + .build(); + + DiscordMessage dm = DiscordMessage.builder().username(Core.getInstance().getConfig().getString("discord.username")).content("").avatarUrl(Core.getInstance().getConfig().getString("discord.profilepicture")).embeds(Arrays.asList(de)).build(); + discordHook.send(dm); + } } AuctionAPI.setItemInHand(p, null); diff --git a/src/main/java/com/shadebyte/auctionhouse/events/PlayerListener.java b/src/main/java/com/shadebyte/auctionhouse/events/PlayerListener.java index 1d2396f..74ea71f 100644 --- a/src/main/java/com/shadebyte/auctionhouse/events/PlayerListener.java +++ b/src/main/java/com/shadebyte/auctionhouse/events/PlayerListener.java @@ -43,6 +43,12 @@ public class PlayerListener implements Listener { } String node = (String) NBTEditor.getItemTag(AuctionAPI.getItemInHand(p), "AuctionReceipt"); + + if (!Core.getInstance().getTransactions().getConfig().contains("transactions." + node)) { + p.sendMessage(Core.getInstance().getSettings().getPrefix() + Core.getInstance().getLocale().getMessage(Lang.INVALID_TRANSACTION.getNode())); + return; + } + p.openInventory(new SingleTransactionGUI(node).getInventory()); } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 723d50b..af05fee 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -33,10 +33,38 @@ discord: enabled: false webhook: "" title: "Auction House" - description: "A new item has been listed!" - description-complete: "A transaction has been completed!" - username: "Auction House" profilepicture: "" + username: "Auction House" + add: + description: + inline: false + data: "A new item has been listed!" + seller: + inline: false + data: "{seller}" + bid_start: + inline: false + data: "{bid_start}" + bid_increment: + inline: false + data: "{bid_increment}" + buy_now: + inline: false + data: "{buy_now}" + item_type: + inline: false + data: "{item_type}" + item_name: + inline: false + data: "{item_name}" + item_enchants: + inline: false + data: "{item_enchants}" + item_lore: + inline: false + data: "{item_lore}" + + receipt: give-on-transaction: true diff --git a/src/main/resources/en_US.lang b/src/main/resources/en_US.lang index 207a552..9439145 100644 --- a/src/main/resources/en_US.lang +++ b/src/main/resources/en_US.lang @@ -19,6 +19,7 @@ notenoughmoney = "&CYou do not have enough money!" cantbidonown = "&cYou cannot bid on your own item!" cantbuyown = "&cYou cannot buy your own item!" air = "&CCome on, really tryna auction air?" +invalidtransaction = "&cThat transaction ID could not be found." price.max.start = "&cPlease start auction with a lower price." price.max.auction = "&cPlease start with a lower bid price." diff --git a/src/test/java/com/shadebyte/server/ServerTest.java b/src/test/java/com/shadebyte/server/ServerTest.java index 57036fd..8bf92d3 100644 --- a/src/test/java/com/shadebyte/server/ServerTest.java +++ b/src/test/java/com/shadebyte/server/ServerTest.java @@ -1,13 +1,7 @@ package com.shadebyte.server; -import com.shadebyte.auctionhouse.Core; import com.zaxxer.hikari.HikariDataSource; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.SQLException; -import java.sql.Statement; - /** * The current file has been created by Kiran Hart * Date Created: 7/23/2018 @@ -19,24 +13,11 @@ public class ServerTest { private HikariDataSource hikari; public ServerTest() { - hikari = new HikariDataSource(); - hikari.setDataSourceClassName("com.mysql.jdbc.jdbc2.optional.MysqlDataSource"); - hikari.addDataSourceProperty("serverName", "localhost"); - hikari.addDataSourceProperty("port", 3306); - hikari.addDataSourceProperty("databaseName", "auctionhouse"); - hikari.addDataSourceProperty("user", "root"); - hikari.addDataSourceProperty("password", ""); - if (!hikari.isClosed()) { - System.out.println("Connected to the database"); - } - try { - Connection connection = hikari.getConnection(); - PreparedStatement statement = connection.prepareStatement(""); - statement.execute(); - } catch (SQLException e){ - e.printStackTrace(); - } + String x = "discord.add.description"; + + + System.out.println(x.substring(x.lastIndexOf(".")).replace(".", "")); } public static void main(String[] args) {