diff --git a/src/main/java/ca/tweetzy/auctionhouse/guis/sell/GUISellAuction.java b/src/main/java/ca/tweetzy/auctionhouse/guis/sell/GUISellAuction.java index 330d794..e42834b 100644 --- a/src/main/java/ca/tweetzy/auctionhouse/guis/sell/GUISellAuction.java +++ b/src/main/java/ca/tweetzy/auctionhouse/guis/sell/GUISellAuction.java @@ -44,10 +44,10 @@ public final class GUISellAuction extends AbstractPlaceholderGui { private final AuctionPlayer auctionPlayer; - private double binPrice; - private double startingBid; - private double bidIncrement; - private long listingTime; + private final double binPrice; + private final double startingBid; + private final double bidIncrement; + private final long listingTime; private boolean allowBuyNow; public GUISellAuction(@NonNull final AuctionPlayer auctionPlayer, final double binPrice, final double startingBid, final double bidIncrement, final long listingTime, final boolean allowBuyNow) { @@ -112,13 +112,58 @@ public final class GUISellAuction extends AbstractPlaceholderGui { }); } - setButton(3, 4, QuickItem - .of(Objects.requireNonNull(Settings.GUI_SELL_BIN_ITEM_ITEMS_PRICE_ITEM.getMaterial().parseItem())) - .name(Settings.GUI_SELL_BIN_ITEM_ITEMS_PRICE_NAME.getString()) - .lore(Replacer.replaceVariables(Settings.GUI_SELL_BIN_ITEM_ITEMS_PRICE_LORE.getStringList(), "listing_bin_price", AuctionAPI.getInstance().formatNumber(this.binPrice))).make(), click -> { + if (Settings.ALLOW_USAGE_OF_BUY_NOW_SYSTEM.getBoolean()) + setButton(3, 4, QuickItem + .of(Objects.requireNonNull(Settings.GUI_SELL_AUCTION_ITEM_ITEMS_BUYOUT_PRICE_ITEM.getMaterial().parseItem())) + .name(Settings.GUI_SELL_AUCTION_ITEM_ITEMS_BUYOUT_PRICE_NAME.getString()) + .lore(Replacer.replaceVariables(Settings.GUI_SELL_AUCTION_ITEM_ITEMS_BUYOUT_PRICE_LORE.getStringList(), "listing_bin_price", AuctionAPI.getInstance().formatNumber(this.binPrice))).make(), click -> { + + click.gui.exit(); + new TitleInput(click.player, AuctionHouse.getInstance().getLocale().getMessage("titles.buy now price.title").getMessage(), AuctionHouse.getInstance().getLocale().getMessage("titles.buy now price.subtitle").getMessage()) { + + @Override + public void onExit(Player player) { + click.manager.showGUI(player, GUISellAuction.this); + } + + @Override + public boolean onResult(String string) { + string = ChatColor.stripColor(string); + + if (!NumberUtils.isDouble(string)) { + AuctionHouse.getInstance().getLocale().getMessage("general.notanumber").sendPrefixedMessage(player); + return false; + } + + double listingAmount = Double.parseDouble(string); + + if (listingAmount < Settings.MIN_AUCTION_PRICE.getDouble()) + listingAmount = Settings.MIN_AUCTION_PRICE.getDouble(); + + if (listingAmount > Settings.MAX_AUCTION_PRICE.getDouble()) + listingAmount = Settings.MAX_AUCTION_PRICE.getDouble(); + + click.manager.showGUI(click.player, new GUISellAuction( + GUISellAuction.this.auctionPlayer, + listingAmount, + GUISellAuction.this.startingBid, + GUISellAuction.this.bidIncrement, + GUISellAuction.this.listingTime, + GUISellAuction.this.allowBuyNow + )); + + return true; + } + }; + }); + + setButton(3, 3, QuickItem + .of(Objects.requireNonNull(Settings.GUI_SELL_AUCTION_ITEM_ITEMS_STARTING_PRICE_ITEM.getMaterial().parseItem())) + .name(Settings.GUI_SELL_AUCTION_ITEM_ITEMS_STARTING_PRICE_NAME.getString()) + .lore(Replacer.replaceVariables(Settings.GUI_SELL_AUCTION_ITEM_ITEMS_STARTING_PRICE_LORE.getStringList(), "listing_start_price", AuctionAPI.getInstance().formatNumber(this.startingBid))).make(), click -> { click.gui.exit(); - new TitleInput(click.player, AuctionHouse.getInstance().getLocale().getMessage("titles.buy now price.title").getMessage(), AuctionHouse.getInstance().getLocale().getMessage("titles.buy now price.subtitle").getMessage()) { + new TitleInput(click.player, AuctionHouse.getInstance().getLocale().getMessage("titles.starting bid price.title").getMessage(), AuctionHouse.getInstance().getLocale().getMessage("titles.starting bid price.subtitle").getMessage()) { @Override public void onExit(Player player) { @@ -136,16 +181,23 @@ public final class GUISellAuction extends AbstractPlaceholderGui { double listingAmount = Double.parseDouble(string); - if (listingAmount < Settings.MIN_AUCTION_PRICE.getDouble()) - listingAmount = Settings.MIN_AUCTION_PRICE.getDouble(); + if (Settings.ALLOW_USAGE_OF_BUY_NOW_SYSTEM.getBoolean() && GUISellAuction.this.allowBuyNow) + if (Settings.BASE_PRICE_MUST_BE_HIGHER_THAN_BID_START.getBoolean() && listingAmount >= GUISellAuction.this.binPrice) { + AuctionHouse.getInstance().getLocale().getMessage("pricing.basepricetoolow").sendPrefixedMessage(player); + return false; + } + + if (listingAmount < Settings.MIN_AUCTION_START_PRICE.getDouble()) + listingAmount = Settings.MIN_AUCTION_START_PRICE.getDouble(); + + if (listingAmount > Settings.MAX_AUCTION_START_PRICE.getDouble()) + listingAmount = Settings.MAX_AUCTION_START_PRICE.getDouble(); - if (listingAmount > Settings.MAX_AUCTION_PRICE.getDouble()) - listingAmount = Settings.MAX_AUCTION_PRICE.getDouble(); click.manager.showGUI(click.player, new GUISellAuction( GUISellAuction.this.auctionPlayer, + GUISellAuction.this.binPrice, listingAmount, - GUISellAuction.this.startingBid, GUISellAuction.this.bidIncrement, GUISellAuction.this.listingTime, GUISellAuction.this.allowBuyNow @@ -156,21 +208,52 @@ public final class GUISellAuction extends AbstractPlaceholderGui { }; }); - setItem(1, 4, new AuctionedItem( - UUID.randomUUID(), - auctionPlayer.getUuid(), - auctionPlayer.getUuid(), - auctionPlayer.getPlayer().getName(), - auctionPlayer.getPlayer().getName(), - MaterialCategorizer.getMaterialCategory(this.auctionPlayer.getItemBeingListed()), - this.auctionPlayer.getItemBeingListed(), - this.binPrice, - 0, - 0, - this.binPrice, - false, false, - this.listingTime - ).getDisplayStack(AuctionStackType.LISTING_PREVIEW)); + setButton(3, 5, QuickItem + .of(Objects.requireNonNull(Settings.GUI_SELL_AUCTION_ITEM_ITEMS_INCREMENT_PRICE_ITEM.getMaterial().parseItem())) + .name(Settings.GUI_SELL_AUCTION_ITEM_ITEMS_INCREMENT_PRICE_NAME.getString()) + .lore(Replacer.replaceVariables(Settings.GUI_SELL_AUCTION_ITEM_ITEMS_INCREMENT_PRICE_LORE.getStringList(), "listing_increment_price", AuctionAPI.getInstance().formatNumber(this.bidIncrement))).make(), click -> { + + click.gui.exit(); + new TitleInput(click.player, AuctionHouse.getInstance().getLocale().getMessage("titles.bid increment price.title").getMessage(), AuctionHouse.getInstance().getLocale().getMessage("titles.bid increment price.subtitle").getMessage()) { + + @Override + public void onExit(Player player) { + click.manager.showGUI(player, GUISellAuction.this); + } + + @Override + public boolean onResult(String string) { + string = ChatColor.stripColor(string); + + if (!NumberUtils.isDouble(string)) { + AuctionHouse.getInstance().getLocale().getMessage("general.notanumber").sendPrefixedMessage(player); + return false; + } + + double listingAmount = Double.parseDouble(string); + + if (listingAmount < Settings.MIN_AUCTION_INCREMENT_PRICE.getDouble()) + listingAmount = Settings.MIN_AUCTION_INCREMENT_PRICE.getDouble(); + + if (listingAmount > Settings.MAX_AUCTION_INCREMENT_PRICE.getDouble()) + listingAmount = Settings.MAX_AUCTION_INCREMENT_PRICE.getDouble(); + + click.manager.showGUI(click.player, new GUISellAuction( + GUISellAuction.this.auctionPlayer, + GUISellAuction.this.binPrice, + GUISellAuction.this.startingBid, + listingAmount, + GUISellAuction.this.listingTime, + GUISellAuction.this.allowBuyNow + )); + + return true; + } + }; + }); + + drawAuctionItem(); + drawBuyoutToggle(); setButton(getRows() - 1, 4, QuickItem .of(Objects.requireNonNull(Settings.GUI_SELL_AUCTION_ITEM_ITEMS_CONTINUE_ITEM.getMaterial().parseItem())) @@ -180,4 +263,36 @@ public final class GUISellAuction extends AbstractPlaceholderGui { }); } + + private void drawBuyoutToggle() { + if (Settings.ALLOW_USAGE_OF_BUY_NOW_SYSTEM.getBoolean()) { + setButton(3, 7, QuickItem + .of(Objects.requireNonNull(this.allowBuyNow ? Settings.GUI_SELL_AUCTION_ITEM_ITEMS_BUYOUT_ENABLED_ITEM.getMaterial().parseItem() : Settings.GUI_SELL_AUCTION_ITEM_ITEMS_BUYOUT_DISABLED_ITEM.getMaterial().parseItem())) + .name(this.allowBuyNow ? Settings.GUI_SELL_AUCTION_ITEM_ITEMS_BUYOUT_ENABLED_NAME.getString() : Settings.GUI_SELL_AUCTION_ITEM_ITEMS_BUYOUT_DISABLED_NAME.getString()) + .lore(this.allowBuyNow ? Settings.GUI_SELL_AUCTION_ITEM_ITEMS_BUYOUT_ENABLED_LORE.getStringList() : Settings.GUI_SELL_AUCTION_ITEM_ITEMS_BUYOUT_DISABLED_LORE.getStringList()).make(), e -> { + + this.allowBuyNow = !allowBuyNow; + drawBuyoutToggle(); + drawAuctionItem(); + }); + } + } + + private void drawAuctionItem() { + setItem(1, 4, new AuctionedItem( + UUID.randomUUID(), + auctionPlayer.getUuid(), + auctionPlayer.getUuid(), + auctionPlayer.getPlayer().getName(), + auctionPlayer.getPlayer().getName(), + MaterialCategorizer.getMaterialCategory(this.auctionPlayer.getItemBeingListed()), + this.auctionPlayer.getItemBeingListed(), + this.allowBuyNow ? this.binPrice : -1, + this.startingBid, + this.bidIncrement, + this.startingBid, + true, false, + this.listingTime + ).getDisplayStack(AuctionStackType.LISTING_PREVIEW)); + } } diff --git a/src/main/java/ca/tweetzy/auctionhouse/settings/Settings.java b/src/main/java/ca/tweetzy/auctionhouse/settings/Settings.java index 6ef4e27..7244b78 100644 --- a/src/main/java/ca/tweetzy/auctionhouse/settings/Settings.java +++ b/src/main/java/ca/tweetzy/auctionhouse/settings/Settings.java @@ -1024,6 +1024,51 @@ public class Settings { "&7Click to edit the listing time" )); + public static final ConfigSetting GUI_SELL_AUCTION_ITEM_ITEMS_BUYOUT_PRICE_ITEM = new ConfigSetting(config, "gui.sell auction item.items.bin price.item", XMaterial.DIAMOND.name()); + public static final ConfigSetting GUI_SELL_AUCTION_ITEM_ITEMS_BUYOUT_PRICE_NAME = new ConfigSetting(config, "gui.sell auction item.items.bin price.name", "&e&lBuyout Price"); + public static final ConfigSetting GUI_SELL_AUCTION_ITEM_ITEMS_BUYOUT_PRICE_LORE = new ConfigSetting(config, "gui.sell auction item.items.bin price.lore", Arrays.asList( + "", + "&7The current buyout price is&F: &a$%listing_bin_price%", + "", + "&7Click to edit the buyout price" + )); + + public static final ConfigSetting GUI_SELL_AUCTION_ITEM_ITEMS_STARTING_PRICE_ITEM = new ConfigSetting(config, "gui.sell auction item.items.starting price.item", XMaterial.DIAMOND.name()); + public static final ConfigSetting GUI_SELL_AUCTION_ITEM_ITEMS_STARTING_PRICE_NAME = new ConfigSetting(config, "gui.sell auction item.items.starting price.name", "&e&lStarting Price"); + public static final ConfigSetting GUI_SELL_AUCTION_ITEM_ITEMS_STARTING_PRICE_LORE = new ConfigSetting(config, "gui.sell auction item.items.starting price.lore", Arrays.asList( + "", + "&7The current starting price is&F: &a$%listing_start_price%", + "", + "&7Click to edit the starting price" + )); + + public static final ConfigSetting GUI_SELL_AUCTION_ITEM_ITEMS_INCREMENT_PRICE_ITEM = new ConfigSetting(config, "gui.sell auction item.items.increment price.item", XMaterial.DIAMOND.name()); + public static final ConfigSetting GUI_SELL_AUCTION_ITEM_ITEMS_INCREMENT_PRICE_NAME = new ConfigSetting(config, "gui.sell auction item.items.increment price.name", "&e&lIncrement Price"); + public static final ConfigSetting GUI_SELL_AUCTION_ITEM_ITEMS_INCREMENT_PRICE_LORE = new ConfigSetting(config, "gui.sell auction item.items.increment price.lore", Arrays.asList( + "", + "&7The current increment price is&F: &a$%listing_increment_price%", + "", + "&7Click to edit the increment price" + )); + + public static final ConfigSetting GUI_SELL_AUCTION_ITEM_ITEMS_BUYOUT_ENABLED_ITEM = new ConfigSetting(config, "gui.sell auction item.items.buyout enabled.item", XMaterial.LIME_STAINED_GLASS_PANE.name()); + public static final ConfigSetting GUI_SELL_AUCTION_ITEM_ITEMS_BUYOUT_ENABLED_NAME = new ConfigSetting(config, "gui.sell auction item.items.buyout enabled.name", "&e&lAuction Buyout"); + public static final ConfigSetting GUI_SELL_AUCTION_ITEM_ITEMS_BUYOUT_ENABLED_LORE = new ConfigSetting(config, "gui.sell auction item.items.buyout enabled.lore", Arrays.asList( + "", + "&7You have buyout &aenabled", + "", + "&7Click to &cdisable &7auction buyout" + )); + + public static final ConfigSetting GUI_SELL_AUCTION_ITEM_ITEMS_BUYOUT_DISABLED_ITEM = new ConfigSetting(config, "gui.sell auction item.items.buyout disabled.item", XMaterial.RED_STAINED_GLASS_PANE.name()); + public static final ConfigSetting GUI_SELL_AUCTION_ITEM_ITEMS_BUYOUT_DISABLED_NAME = new ConfigSetting(config, "gui.sell auction item.items.buyout disabled.name", "&e&lAuction Buyout"); + public static final ConfigSetting GUI_SELL_AUCTION_ITEM_ITEMS_BUYOUT_DISABLED_LORE = new ConfigSetting(config, "gui.sell auction item.items.buyout disabled.lore", Arrays.asList( + "", + "&7You have buyout &cdisabled", + "", + "&7Click to &aenable &7auction buyout" + )); + public static final ConfigSetting GUI_SELL_AUCTION_ITEM_ITEMS_CONTINUE_ITEM = new ConfigSetting(config, "gui.sell auction item.items.confirm.item", XMaterial.LIME_STAINED_GLASS_PANE.name()); public static final ConfigSetting GUI_SELL_AUCTION_ITEM_ITEMS_CONTINUE_NAME = new ConfigSetting(config, "gui.sell auction item.items.confirm.name", "&e&lList Item"); public static final ConfigSetting GUI_SELL_AUCTION_ITEM_ITEMS_CONTINUE_LORE = new ConfigSetting(config, "gui.sell auction item.items.confirm.lore", Arrays.asList(