diff --git a/pom.xml b/pom.xml
index 1d86569..68587fe 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
4.0.0
ca.tweetzy
auctionhouse
- 2.60.3
+ 2.61.0
UTF-8
@@ -23,7 +23,7 @@
clean install
- Auction House-${project.version}
+ Auction House
@@ -132,7 +132,7 @@
C:\Users\Kiran\Documents\Development\Minecraft\Active\Auction House\target
- Auction House-${project.version}.jar
+ Auction House.jar
false
@@ -149,7 +149,7 @@
C:\Users\Kiran\Documents\Development\Minecraft\Active\Auction House\target
- Auction House-${project.version}.jar
+ Auction House.jar
false
diff --git a/src/main/java/ca/tweetzy/auctionhouse/AuctionHouse.java b/src/main/java/ca/tweetzy/auctionhouse/AuctionHouse.java
index 963910d..af6ff5e 100644
--- a/src/main/java/ca/tweetzy/auctionhouse/AuctionHouse.java
+++ b/src/main/java/ca/tweetzy/auctionhouse/AuctionHouse.java
@@ -87,6 +87,9 @@ public class AuctionHouse extends TweetyPlugin {
@Getter
private AuctionStatManager auctionStatManager;
+ @Getter
+ private MinItemPriceManager minItemPriceManager;
+
@Getter
private DatabaseConnector databaseConnector;
@@ -179,7 +182,8 @@ public class AuctionHouse extends TweetyPlugin {
new _9_StatsMigration(),
new _10_InfiniteItemsMigration(),
new _11_AdminLogMigration(),
- new _12_SerializeFormatDropMigration()
+ new _12_SerializeFormatDropMigration(),
+ new _13_MinItemPriceMigration()
);
dataMigrationManager.runMigrations();
@@ -200,6 +204,9 @@ public class AuctionHouse extends TweetyPlugin {
this.auctionBanManager = new AuctionBanManager();
this.auctionBanManager.loadBans();
+ this.minItemPriceManager = new MinItemPriceManager();
+ this.minItemPriceManager.loadMinPrices();
+
this.auctionStatManager = new AuctionStatManager();
this.auctionStatManager.loadStats();
@@ -226,7 +233,8 @@ public class AuctionHouse extends TweetyPlugin {
new CommandBan(),
new CommandUnban(),
new CommandMarkChest(),
- new CommandUpload()
+ new CommandUpload(),
+ new CommandMinPrice()
);
// Placeholder API
diff --git a/src/main/java/ca/tweetzy/auctionhouse/api/AuctionAPI.java b/src/main/java/ca/tweetzy/auctionhouse/api/AuctionAPI.java
index d91de1b..bcd6f03 100644
--- a/src/main/java/ca/tweetzy/auctionhouse/api/AuctionAPI.java
+++ b/src/main/java/ca/tweetzy/auctionhouse/api/AuctionAPI.java
@@ -6,6 +6,7 @@ import ca.tweetzy.auctionhouse.api.hook.MMOItemsHook;
import ca.tweetzy.auctionhouse.api.hook.McMMOHook;
import ca.tweetzy.auctionhouse.auction.AuctionPlayer;
import ca.tweetzy.auctionhouse.auction.AuctionedItem;
+import ca.tweetzy.auctionhouse.auction.MinItemPrice;
import ca.tweetzy.auctionhouse.auction.enums.AuctionSaleType;
import ca.tweetzy.auctionhouse.helpers.ConfigurationItemHelper;
import ca.tweetzy.auctionhouse.helpers.MaterialCategorizer;
@@ -654,6 +655,25 @@ public class AuctionAPI {
return;
}
+ if (!AuctionHouse.getInstance().getMinItemPriceManager().getMinPrices().isEmpty() && !isUsingBundle) {
+ final MinItemPrice foundMinPriceItem = AuctionHouse.getInstance().getMinItemPriceManager().getMinPrice(original);
+ if (foundMinPriceItem != null) {
+
+ boolean valid = true;
+
+ if (isBiddingItem) {
+ if (basePrice < foundMinPriceItem.getPrice() || bidStartPrice < foundMinPriceItem.getPrice()) valid = false;
+ } else {
+ if (basePrice < foundMinPriceItem.getPrice()) valid = false;
+ }
+
+ if (!valid) {
+ AuctionHouse.getInstance().getLocale().getMessage("pricing.minitemprice").processPlaceholder("price", AuctionAPI.getInstance().formatNumber(foundMinPriceItem.getPrice())).sendPrefixedMessage(seller);
+ return;
+ }
+ }
+ }
+
AuctionedItem auctionedItem = new AuctionedItem();
auctionedItem.setId(UUID.randomUUID());
auctionedItem.setOwner(seller.getUniqueId());
diff --git a/src/main/java/ca/tweetzy/auctionhouse/auction/MinItemPrice.java b/src/main/java/ca/tweetzy/auctionhouse/auction/MinItemPrice.java
new file mode 100644
index 0000000..4b32405
--- /dev/null
+++ b/src/main/java/ca/tweetzy/auctionhouse/auction/MinItemPrice.java
@@ -0,0 +1,26 @@
+package ca.tweetzy.auctionhouse.auction;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.bukkit.inventory.ItemStack;
+
+import java.util.UUID;
+
+/**
+ * Date Created: April 04 2022
+ * Time Created: 8:30 a.m.
+ *
+ * @author Kiran Hart
+ */
+@AllArgsConstructor
+@Getter
+public final class MinItemPrice {
+
+ private UUID uuid;
+ private ItemStack itemStack;
+ private double price;
+
+ public MinItemPrice(ItemStack itemStack, double price) {
+ this(UUID.randomUUID(), itemStack, price);
+ }
+}
diff --git a/src/main/java/ca/tweetzy/auctionhouse/commands/CommandMinPrice.java b/src/main/java/ca/tweetzy/auctionhouse/commands/CommandMinPrice.java
new file mode 100644
index 0000000..a0d067e
--- /dev/null
+++ b/src/main/java/ca/tweetzy/auctionhouse/commands/CommandMinPrice.java
@@ -0,0 +1,95 @@
+package ca.tweetzy.auctionhouse.commands;
+
+import ca.tweetzy.auctionhouse.AuctionHouse;
+import ca.tweetzy.auctionhouse.api.AuctionAPI;
+import ca.tweetzy.auctionhouse.auction.MinItemPrice;
+import ca.tweetzy.auctionhouse.guis.GUIMinItemPrices;
+import ca.tweetzy.auctionhouse.helpers.PlayerHelper;
+import ca.tweetzy.core.commands.AbstractCommand;
+import ca.tweetzy.core.compatibility.XMaterial;
+import ca.tweetzy.core.utils.NumberUtils;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * The current file has been created by Kiran Hart
+ * Date Created: June 22 2021
+ * Time Created: 3:18 p.m.
+ * Usage of any code found within this class is prohibited unless given explicit permission otherwise
+ */
+public class CommandMinPrice extends AbstractCommand {
+
+ public CommandMinPrice() {
+ super(CommandType.PLAYER_ONLY, "minprices");
+ }
+
+ @Override
+ protected ReturnType runCommand(CommandSender sender, String... args) {
+ Player player = (Player) sender;
+ if (CommandMiddleware.handle(player) == ReturnType.FAILURE) return ReturnType.FAILURE;
+
+ if (args.length == 0) {
+ AuctionHouse.getInstance().getGuiManager().showGUI(player, new GUIMinItemPrices());
+ return ReturnType.SUCCESS;
+ }
+
+ if (args.length == 2 && args[0].equalsIgnoreCase("add")) {
+
+ ItemStack held = PlayerHelper.getHeldItem(player);
+
+ if (held.getType() == XMaterial.AIR.parseMaterial()) {
+ AuctionHouse.getInstance().getLocale().getMessage("general.min item price air").sendPrefixedMessage(player);
+ return ReturnType.FAILURE;
+ }
+
+ if (AuctionHouse.getInstance().getMinItemPriceManager().getMinPrice(held.clone()) != null) {
+ AuctionHouse.getInstance().getLocale().getMessage("general.min price already added").sendPrefixedMessage(player);
+ return ReturnType.FAILURE;
+ }
+
+ if (!NumberUtils.isNumeric(args[1])) {
+ AuctionHouse.getInstance().getLocale().getMessage("general.notanumber").sendPrefixedMessage(player);
+ return ReturnType.FAILURE;
+ }
+
+ final double price = Double.parseDouble(args[1]);
+
+ AuctionHouse.getInstance().getDataManager().insertMinPriceAsync(new MinItemPrice(held.clone(), price), (error, inserted) -> {
+ if (error == null) {
+ AuctionHouse.getInstance().getMinItemPriceManager().addItem(inserted);
+ AuctionHouse.getInstance().getLocale().getMessage("general.added min price")
+ .processPlaceholder("item", AuctionAPI.getInstance().getItemName(inserted.getItemStack()))
+ .processPlaceholder("price", AuctionAPI.getInstance().formatNumber(inserted.getPrice()))
+ .sendPrefixedMessage(player);
+ }
+ });
+ }
+
+ return ReturnType.SUCCESS;
+ }
+
+ @Override
+ public String getPermissionNode() {
+ return "auctionhouse.cmd.minprice";
+ }
+
+ @Override
+ public String getSyntax() {
+ return AuctionHouse.getInstance().getLocale().getMessage("commands.syntax.min price").getMessage();
+ }
+
+ @Override
+ public String getDescription() {
+ return AuctionHouse.getInstance().getLocale().getMessage("commands.description.min price").getMessage();
+ }
+
+ @Override
+ protected List onTab(CommandSender sender, String... args) {
+ if (args.length == 1) return Collections.singletonList("add");
+ return null;
+ }
+}
diff --git a/src/main/java/ca/tweetzy/auctionhouse/database/DataManager.java b/src/main/java/ca/tweetzy/auctionhouse/database/DataManager.java
index 58f1033..b5d542a 100644
--- a/src/main/java/ca/tweetzy/auctionhouse/database/DataManager.java
+++ b/src/main/java/ca/tweetzy/auctionhouse/database/DataManager.java
@@ -12,6 +12,7 @@ import ca.tweetzy.core.database.DataManagerAbstract;
import ca.tweetzy.core.database.DatabaseConnector;
import ca.tweetzy.core.database.MySQLConnector;
import ca.tweetzy.core.utils.TextUtils;
+import net.royawesome.jlibnoise.module.combiner.Min;
import org.bukkit.Bukkit;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin;
@@ -335,6 +336,63 @@ public class DataManager extends DataManagerAbstract {
});
}
+ public void insertMinPrice(MinItemPrice item, Callback callback) {
+ this.databaseConnector.connect(connection -> {
+ try (PreparedStatement statement = connection.prepareStatement("INSERT INTO " + this.getTablePrefix() + "min_item_prices (id, item, price) VALUES(?, ?, ?)")) {
+ PreparedStatement fetch = connection.prepareStatement("SELECT * FROM " + this.getTablePrefix() + "min_item_prices WHERE id = ?");
+
+ fetch.setString(1, item.getUuid().toString());
+ statement.setString(1, item.getUuid().toString());
+ statement.setString(2, AuctionAPI.encodeItem(item.getItemStack()));
+ statement.setDouble(3, item.getPrice());
+ statement.executeUpdate();
+
+ if (callback != null) {
+ ResultSet res = fetch.executeQuery();
+ res.next();
+ callback.accept(null, extractMinItemPrice(res));
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ resolveCallback(callback, e);
+ }
+ });
+ }
+
+ public void insertMinPriceAsync(MinItemPrice item, Callback callback) {
+ this.thread.execute(() -> this.insertMinPrice(item, callback));
+ }
+
+ public void getMinItemPrices(Callback> callback) {
+ ArrayList minItemPrices = new ArrayList<>();
+ this.async(() -> this.databaseConnector.connect(connection -> {
+ try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM " + this.getTablePrefix() + "min_item_prices")) {
+ ResultSet resultSet = statement.executeQuery();
+ while (resultSet.next()) {
+ minItemPrices.add(extractMinItemPrice(resultSet));
+ }
+
+ callback.accept(null, minItemPrices);
+ } catch (Exception e) {
+ resolveCallback(callback, e);
+ }
+ }));
+ }
+
+ public void deleteMinItemPrice(Collection minPrices) {
+ this.async(() -> this.databaseConnector.connect(connection -> {
+ PreparedStatement statement = connection.prepareStatement("DELETE FROM " + this.getTablePrefix() + "min_item_prices WHERE id = ?");
+ for (UUID id : minPrices) {
+ statement.setString(1, id.toString());
+ statement.addBatch();
+ }
+
+ statement.executeBatch();
+
+ }));
+ }
+
public void getStats(Callback