added new serialize version and itemstack columns to tables that require storing items, use nbtapi to serialize items from now on.

Took 59 minutes
This commit is contained in:
Kiran Hart 2024-08-07 12:24:51 -04:00
parent a993ba5d97
commit e0ef86ac0f
No known key found for this signature in database
GPG Key ID: 5F36C7BC79D3EBC3
31 changed files with 502 additions and 264 deletions

View File

@ -22,6 +22,7 @@ import ca.tweetzy.auctionhouse.auction.AuctionedItem;
import ca.tweetzy.auctionhouse.commands.*; import ca.tweetzy.auctionhouse.commands.*;
import ca.tweetzy.auctionhouse.database.DataManager; import ca.tweetzy.auctionhouse.database.DataManager;
import ca.tweetzy.auctionhouse.database.migrations.*; import ca.tweetzy.auctionhouse.database.migrations.*;
import ca.tweetzy.auctionhouse.database.migrations.v2.*;
import ca.tweetzy.auctionhouse.helpers.UpdateChecker; import ca.tweetzy.auctionhouse.helpers.UpdateChecker;
import ca.tweetzy.auctionhouse.hooks.PlaceholderAPIHook; import ca.tweetzy.auctionhouse.hooks.PlaceholderAPIHook;
import ca.tweetzy.auctionhouse.listeners.*; import ca.tweetzy.auctionhouse.listeners.*;
@ -182,7 +183,9 @@ public class AuctionHouse extends TweetyPlugin {
new _19_ServerAuctionMigration(), new _19_ServerAuctionMigration(),
new _20_AuctionRequestsMigration(), new _20_AuctionRequestsMigration(),
new _21_RequestsDynAmtMigration(), new _21_RequestsDynAmtMigration(),
new _22_BansV2Migration() new _22_BansV2Migration(),
new _23_ItemToNBTSerializationMigration(),
new _24_RemainingItemToNBTSerializationMigration()
); );
dataMigrationManager.runMigrations(); dataMigrationManager.runMigrations();

View File

@ -233,6 +233,16 @@ public class AuctionAPI {
return config.getItemStack("i", null); return config.getItemStack("i", null);
} }
public static ItemStack decodeItemTransaction(String string) {
YamlConfiguration config = new YamlConfiguration();
try {
config.loadFromString(string);
} catch (IllegalArgumentException | InvalidConfigurationException e) {
return null;
}
return config.getItemStack("i", null);
}
public static boolean tellMigrationStatus(CommandSender commandSender) { public static boolean tellMigrationStatus(CommandSender commandSender) {
if (AuctionHouse.getInstance().isMigrating()) { if (AuctionHouse.getInstance().isMigrating()) {
AuctionHouse.getInstance().getLocale().newMessage("&cAuction House is currently migrating auction items, auction usage is disabled until it's finished").sendPrefixedMessage(commandSender); AuctionHouse.getInstance().getLocale().newMessage("&cAuction House is currently migrating auction items, auction usage is disabled until it's finished").sendPrefixedMessage(commandSender);

View File

@ -28,9 +28,16 @@ import ca.tweetzy.auctionhouse.impl.AuctionBan;
import ca.tweetzy.auctionhouse.settings.Settings; import ca.tweetzy.auctionhouse.settings.Settings;
import ca.tweetzy.auctionhouse.transaction.Transaction; import ca.tweetzy.auctionhouse.transaction.Transaction;
import ca.tweetzy.auctionhouse.transaction.TransactionViewFilter; import ca.tweetzy.auctionhouse.transaction.TransactionViewFilter;
import ca.tweetzy.flight.comp.enums.CompMaterial;
import ca.tweetzy.flight.database.*; import ca.tweetzy.flight.database.*;
import ca.tweetzy.flight.nbtapi.NBT;
import ca.tweetzy.flight.nbtapi.NbtApiException;
import ca.tweetzy.flight.utils.Common;
import ca.tweetzy.flight.utils.QuickItem;
import lombok.NonNull; import lombok.NonNull;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -158,6 +165,10 @@ public class DataManager extends DataManagerAbstract {
); );
} }
//=================================================================================================//
// WHITE LIST //
//=================================================================================================//
public void saveFilterWhitelist(List<AuctionFilterItem> filterItems, boolean async) { public void saveFilterWhitelist(List<AuctionFilterItem> filterItems, boolean async) {
String saveItems = "INSERT INTO " + this.getTablePrefix() + "filter_whitelist(data) VALUES(?)"; String saveItems = "INSERT INTO " + this.getTablePrefix() + "filter_whitelist(data) VALUES(?)";
String truncate = AuctionHouse.getDatabaseConnector() instanceof MySQLConnector ? "TRUNCATE TABLE " + this.getTablePrefix() + "filter_whitelist" : "DELETE FROM " + this.getTablePrefix() + "filter_whitelist"; String truncate = AuctionHouse.getDatabaseConnector() instanceof MySQLConnector ? "TRUNCATE TABLE " + this.getTablePrefix() + "filter_whitelist" : "DELETE FROM " + this.getTablePrefix() + "filter_whitelist";
@ -214,6 +225,81 @@ public class DataManager extends DataManagerAbstract {
})); }));
} }
//=================================================================================================//
// AUCTION LISTINGS //
//=================================================================================================//
public void updateItemsAsync(Collection<AuctionedItem> items, UpdateCallback callback) {
this.runAsync(() -> updateItems(items, callback));
}
public void updateItems(Collection<AuctionedItem> items, UpdateCallback callback) {
this.databaseConnector.connect(connection -> {
connection.setAutoCommit(false);
SQLException err = null;
PreparedStatement statement = connection.prepareStatement("UPDATE " + this.getTablePrefix() + "auctions SET owner = ?, owner_name = ?, highest_bidder = ?, highest_bidder_name = ?, base_price = ?, bid_start_price = ?, bid_increment_price = ?, current_price = ?, expires_at = ?, expired = ?, item = ?, serialize_version = ?, itemstack = ? WHERE id = ?");
for (AuctionedItem item : items) {
try {
statement.setString(1, item.getOwner().toString());
statement.setString(2, item.getOwnerName());
statement.setString(3, item.getHighestBidder().toString());
statement.setString(4, item.getHighestBidderName());
statement.setDouble(5, item.getBasePrice());
statement.setDouble(6, item.getBidStartingPrice());
statement.setDouble(7, item.getBidIncrementPrice());
statement.setDouble(8, item.getCurrentPrice());
statement.setLong(9, item.getExpiresAt());
statement.setBoolean(10, item.isExpired());
statement.setString(11, AuctionAPI.encodeItem(item.getItem()));
try {
statement.setInt(12, 1);
statement.setString(13, QuickItem.toString(item.getItem()));
} catch (NbtApiException e){
statement.setInt(12, 0);
statement.setString(13, null);
}
statement.setString(14, item.getId().toString());
statement.addBatch();
} catch (SQLException e) {
err = e;
break;
}
}
statement.executeBatch();
if (err == null) {
connection.commit();
resolveUpdateCallback(callback, null);
} else {
connection.rollback();
resolveUpdateCallback(callback, err);
}
connection.setAutoCommit(true);
});
}
public void deleteItems(Collection<UUID> items) {
this.databaseConnector.connect(connection -> {
connection.setAutoCommit(false);
PreparedStatement statement = connection.prepareStatement("DELETE FROM " + this.getTablePrefix() + "auctions WHERE id = ?");
for (UUID id : items) {
statement.setString(1, id.toString());
statement.addBatch();
}
statement.executeBatch();
connection.setAutoCommit(true);
});
}
public void deleteItemsAsync(Collection<UUID> items) {
this.runAsync(() -> deleteItems(items));
}
public void getItems(Callback<ArrayList<AuctionedItem>> callback) { public void getItems(Callback<ArrayList<AuctionedItem>> callback) {
ArrayList<AuctionedItem> items = new ArrayList<>(); ArrayList<AuctionedItem> items = new ArrayList<>();
this.runAsync(() -> this.databaseConnector.connect(connection -> { this.runAsync(() -> this.databaseConnector.connect(connection -> {
@ -222,12 +308,24 @@ public class DataManager extends DataManagerAbstract {
final List<UUID> toRemove = new ArrayList<>(); final List<UUID> toRemove = new ArrayList<>();
while (resultSet.next()) { while (resultSet.next()) {
AuctionedItem item = extractAuctionedItem(resultSet);
if (item == null || item.getItem().getType() == CompMaterial.AIR.parseMaterial()) {
continue;
}
if (resultSet.getInt("serialize_version") == 0) {
try (PreparedStatement updateStatement = connection.prepareStatement("UPDATE " + this.getTablePrefix() + "auctions SET serialize_version = 1, itemstack = ? WHERE id = ?")) {
updateStatement.setString(1, QuickItem.toString(item.getItem()));
updateStatement.setString(2, resultSet.getString("id"));
updateStatement.executeUpdate();
}
}
if (resultSet.getBoolean("expired") && Settings.EXPIRATION_TIME_LIMIT_ENABLED.getBoolean() && Instant.ofEpochMilli(resultSet.getLong("expires_at")).isBefore(Instant.now().minus(Duration.ofHours(Settings.EXPIRATION_TIME_LIMIT.getInt())))) { if (resultSet.getBoolean("expired") && Settings.EXPIRATION_TIME_LIMIT_ENABLED.getBoolean() && Instant.ofEpochMilli(resultSet.getLong("expires_at")).isBefore(Instant.now().minus(Duration.ofHours(Settings.EXPIRATION_TIME_LIMIT.getInt())))) {
toRemove.add(UUID.fromString(resultSet.getString("id"))); toRemove.add(UUID.fromString(resultSet.getString("id")));
} else { } else {
final AuctionedItem item = extractAuctionedItem(resultSet); items.add(item);
if (item != null)
items.add(item);
} }
} }
@ -239,95 +337,9 @@ public class DataManager extends DataManagerAbstract {
})); }));
} }
public void getAdminLogs(Callback<ArrayList<AuctionAdminLog>> callback) {
ArrayList<AuctionAdminLog> logs = new ArrayList<>();
this.runAsync(() -> this.databaseConnector.connect(connection -> {
try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM " + this.getTablePrefix() + "admin_logs")) {
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {
logs.add(extractAdminLog(resultSet));
}
callback.accept(null, logs);
} catch (Exception e) {
resolveCallback(callback, e);
}
}));
}
public void getTransactions(Callback<ArrayList<Transaction>> callback) {
ArrayList<Transaction> transactions = new ArrayList<>();
this.runAsync(() -> this.databaseConnector.connect(connection -> {
try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM " + this.getTablePrefix() + "transactions")) {
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {
final Transaction transaction = extractTransaction(resultSet);
if (transaction != null)
transactions.add(transaction);
}
callback.accept(null, transactions);
} catch (Exception e) {
resolveCallback(callback, e);
}
}));
}
public void insertTransaction(Transaction transaction, Callback<Transaction> callback) {
this.runAsync(() -> this.databaseConnector.connect(connection -> {
try (PreparedStatement statement = connection.prepareStatement("INSERT INTO " + getTablePrefix() + "transactions (id, seller, seller_name, buyer, buyer_name, transaction_time, item, auction_sale_type, final_price) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)")) {
PreparedStatement fetch = connection.prepareStatement("SELECT * FROM " + this.getTablePrefix() + "transactions WHERE id = ?");
fetch.setString(1, transaction.getId().toString());
statement.setString(1, transaction.getId().toString());
statement.setString(2, transaction.getSeller().toString());
statement.setString(3, transaction.getSellerName());
statement.setString(4, transaction.getBuyer().toString());
statement.setString(5, transaction.getBuyerName());
statement.setLong(6, transaction.getTransactionTime());
statement.setString(7, AuctionAPI.encodeItem(transaction.getItem()));
statement.setString(8, transaction.getAuctionSaleType().name());
statement.setDouble(9, transaction.getFinalPrice());
statement.executeUpdate();
if (callback != null) {
ResultSet res = fetch.executeQuery();
res.next();
final Transaction inserted = extractTransaction(res);
if (inserted != null)
callback.accept(null, inserted);
}
} catch (Exception e) {
e.printStackTrace();
resolveCallback(callback, e);
}
}));
}
public void insertLog(AuctionAdminLog adminLog) {
this.runAsync(() -> this.databaseConnector.connect(connection -> {
try (PreparedStatement statement = connection.prepareStatement("INSERT INTO " + this.getTablePrefix() + "admin_logs(admin, admin_name, target, target_name, item, item_id, action, time) VALUES(?, ?, ?, ?, ?, ?, ?, ?)")) {
statement.setString(1, adminLog.getAdmin().toString());
statement.setString(2, adminLog.getAdminName());
statement.setString(3, adminLog.getTarget().toString());
statement.setString(4, adminLog.getTargetName());
statement.setString(5, AuctionAPI.encodeItem(adminLog.getItem()));
statement.setString(6, adminLog.getItemId().toString());
statement.setString(7, adminLog.getAdminAction().name());
statement.setLong(8, adminLog.getTime());
statement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
}));
}
public void insertAuction(AuctionedItem item, Callback<AuctionedItem> callback) { public void insertAuction(AuctionedItem item, Callback<AuctionedItem> callback) {
this.runAsync(() -> this.databaseConnector.connect(connection -> { this.runAsync(() -> this.databaseConnector.connect(connection -> {
try (PreparedStatement statement = connection.prepareStatement("INSERT INTO " + this.getTablePrefix() + "auctions(id, owner, highest_bidder, owner_name, highest_bidder_name, category, base_price, bid_start_price, bid_increment_price, current_price, expired, expires_at, item_material, item_name, item_lore, item_enchants, item, listed_world, infinite, allow_partial_buys, server_auction, is_request, request_count) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")) { try (PreparedStatement statement = connection.prepareStatement("INSERT INTO " + this.getTablePrefix() + "auctions(id, owner, highest_bidder, owner_name, highest_bidder_name, category, base_price, bid_start_price, bid_increment_price, current_price, expired, expires_at, item_material, item_name, item_lore, item_enchants, item, listed_world, infinite, allow_partial_buys, server_auction, is_request, request_count, serialize_version, itemstack) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")) {
final AuctionAPI api = AuctionAPI.getInstance(); final AuctionAPI api = AuctionAPI.getInstance();
PreparedStatement fetch = connection.prepareStatement("SELECT * FROM " + this.getTablePrefix() + "auctions WHERE id = ?"); PreparedStatement fetch = connection.prepareStatement("SELECT * FROM " + this.getTablePrefix() + "auctions WHERE id = ?");
@ -356,6 +368,14 @@ public class DataManager extends DataManagerAbstract {
statement.setBoolean(22, item.isRequest()); statement.setBoolean(22, item.isRequest());
statement.setInt(23, item.getRequestAmount()); statement.setInt(23, item.getRequestAmount());
try {
statement.setInt(24, 1);
statement.setString(25, QuickItem.toString(item.getItem()));
}catch (NbtApiException e) {
statement.setInt(24, 0);
statement.setString(25, null);
}
statement.executeUpdate(); statement.executeUpdate();
if (callback != null) { if (callback != null) {
@ -371,15 +391,202 @@ public class DataManager extends DataManagerAbstract {
})); }));
} }
private AuctionedItem extractAuctionedItem(ResultSet resultSet) throws SQLException {
final ItemStack item = resultSet.getInt("serialize_version") == 1 ? QuickItem.getItem(resultSet.getString("itemstack")) : AuctionAPI.decodeItem(resultSet.getString("item"));
if (item == null) {
AuctionHouse.getInstance().getLogger().log(Level.WARNING, "Auction Item with id " + resultSet.getString("id") + " is using an unknown material, it is being skipped!");
return null;
}
AuctionedItem auctionItem = new AuctionedItem(
UUID.fromString(resultSet.getString("id")),
UUID.fromString(resultSet.getString("owner")),
UUID.fromString(resultSet.getString("highest_bidder")),
resultSet.getString("owner_name"),
resultSet.getString("highest_bidder_name"),
AuctionItemCategory.valueOf(resultSet.getString("category")),
item,
resultSet.getDouble("base_price"),
resultSet.getDouble("bid_start_price"),
resultSet.getDouble("bid_increment_price"),
resultSet.getDouble("current_price"),
resultSet.getDouble("bid_start_price") >= 1 || resultSet.getDouble("bid_increment_price") >= 1,
resultSet.getBoolean("expired"),
resultSet.getLong("expires_at")
);
auctionItem.setListedWorld(resultSet.getString("listed_world"));
auctionItem.setInfinite(hasColumn(resultSet, "infinite") && resultSet.getBoolean("infinite"));
auctionItem.setAllowPartialBuy(hasColumn(resultSet, "allow_partial_buys") && resultSet.getBoolean("allow_partial_buys"));
auctionItem.setServerItem(resultSet.getBoolean("server_auction"));
auctionItem.setRequest(resultSet.getBoolean("is_request"));
auctionItem.setRequestAmount(resultSet.getInt("request_count"));
return auctionItem;
}
//=================================================================================================//
// AUCTION LOGS //
//=================================================================================================//
public void getAdminLogs(Callback<ArrayList<AuctionAdminLog>> callback) {
ArrayList<AuctionAdminLog> logs = new ArrayList<>();
this.runAsync(() -> this.databaseConnector.connect(connection -> {
try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM " + this.getTablePrefix() + "admin_logs")) {
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {
final AuctionAdminLog log = extractAdminLog(resultSet);
if (log == null || log.getItem() == null || log.getItem().getType() == CompMaterial.AIR.parseMaterial()) continue;
if (resultSet.getInt("serialize_version") == 0) {
try (PreparedStatement updateStatement = connection.prepareStatement("UPDATE " + this.getTablePrefix() + "admin_logs SET serialize_version = 1, itemstack = ? WHERE id = ?")) {
try {
String possible = QuickItem.toString(log.getItem());
updateStatement.setString(1, possible);
updateStatement.setInt(2, resultSet.getInt("id"));
updateStatement.executeUpdate();
} catch (NbtApiException ignored) {
}
}
}
logs.add(log);
}
callback.accept(null, logs);
} catch (Exception e) {
resolveCallback(callback, e);
}
}));
}
public void getTransactions(Callback<ArrayList<Transaction>> callback) {
ArrayList<Transaction> transactions = new ArrayList<>();
this.runAsync(() -> this.databaseConnector.connect(connection -> {
try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM " + this.getTablePrefix() + "transactions")) {
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {
final Transaction transaction = extractTransaction(resultSet);
if (transaction == null || transaction.getItem().getType() == CompMaterial.AIR.parseMaterial()) {
continue;
}
if (resultSet.getInt("serialize_version") == 0) {
try (PreparedStatement updateStatement = connection.prepareStatement("UPDATE " + this.getTablePrefix() + "transactions SET serialize_version = 1, itemstack = ? WHERE id = ?")) {
try {
String possible = QuickItem.toString(transaction.getItem());
updateStatement.setString(1, possible);
updateStatement.setString(2, resultSet.getString("id"));
updateStatement.executeUpdate();
} catch (NbtApiException e) {
//todo idk do something
}
}
}
transactions.add(transaction);
}
callback.accept(null, transactions);
} catch (Exception e) {
resolveCallback(callback, e);
}
}));
}
public void insertTransaction(Transaction transaction, Callback<Transaction> callback) {
this.runAsync(() -> this.databaseConnector.connect(connection -> {
try (PreparedStatement statement = connection.prepareStatement("INSERT INTO " + getTablePrefix() + "transactions (id, seller, seller_name, buyer, buyer_name, transaction_time, item, auction_sale_type, final_price, serialize_version, itemstack) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")) {
PreparedStatement fetch = connection.prepareStatement("SELECT * FROM " + this.getTablePrefix() + "transactions WHERE id = ?");
fetch.setString(1, transaction.getId().toString());
statement.setString(1, transaction.getId().toString());
statement.setString(2, transaction.getSeller().toString());
statement.setString(3, transaction.getSellerName());
statement.setString(4, transaction.getBuyer().toString());
statement.setString(5, transaction.getBuyerName());
statement.setLong(6, transaction.getTransactionTime());
statement.setString(7, AuctionAPI.encodeItem(transaction.getItem()));
statement.setString(8, transaction.getAuctionSaleType().name());
statement.setDouble(9, transaction.getFinalPrice());
try {
statement.setInt(10, 1);
statement.setString(11, QuickItem.toString(transaction.getItem()));
} catch (NbtApiException e) {
statement.setInt(10, 0);
statement.setString(11, null);
}
statement.executeUpdate();
if (callback != null) {
ResultSet res = fetch.executeQuery();
res.next();
final Transaction inserted = extractTransaction(res);
if (inserted != null)
callback.accept(null, inserted);
}
} catch (Exception e) {
e.printStackTrace();
resolveCallback(callback, e);
}
}));
}
public void insertLog(AuctionAdminLog adminLog) {
this.runAsync(() -> this.databaseConnector.connect(connection -> {
try (PreparedStatement statement = connection.prepareStatement("INSERT INTO " + this.getTablePrefix() + "admin_logs(admin, admin_name, target, target_name, item, item_id, action, time, serialize_version, itemstack) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")) {
statement.setString(1, adminLog.getAdmin().toString());
statement.setString(2, adminLog.getAdminName());
statement.setString(3, adminLog.getTarget().toString());
statement.setString(4, adminLog.getTargetName());
statement.setString(5, AuctionAPI.encodeItem(adminLog.getItem()));
statement.setString(6, adminLog.getItemId().toString());
statement.setString(7, adminLog.getAdminAction().name());
statement.setLong(8, adminLog.getTime());
try {
statement.setInt(9, 1);
statement.setString(10, QuickItem.toString(adminLog.getItem()));
} catch (NbtApiException e) {
statement.setInt(9, 0);
statement.setString(10, null);
}
statement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
}));
}
public void insertMinPrice(MinItemPrice item, Callback<MinItemPrice> callback) { public void insertMinPrice(MinItemPrice item, Callback<MinItemPrice> callback) {
this.runAsync(() -> this.databaseConnector.connect(connection -> { this.runAsync(() -> this.databaseConnector.connect(connection -> {
try (PreparedStatement statement = connection.prepareStatement("INSERT INTO " + this.getTablePrefix() + "min_item_prices (id, item, price) VALUES(?, ?, ?)")) { try (PreparedStatement statement = connection.prepareStatement("INSERT INTO " + this.getTablePrefix() + "min_item_prices (id, item, price, serialize_version, itemstack) VALUES(?, ?, ?, ?, ?)")) {
PreparedStatement fetch = connection.prepareStatement("SELECT * FROM " + this.getTablePrefix() + "min_item_prices WHERE id = ?"); PreparedStatement fetch = connection.prepareStatement("SELECT * FROM " + this.getTablePrefix() + "min_item_prices WHERE id = ?");
fetch.setString(1, item.getUuid().toString()); fetch.setString(1, item.getUuid().toString());
statement.setString(1, item.getUuid().toString()); statement.setString(1, item.getUuid().toString());
statement.setString(2, AuctionAPI.encodeItem(item.getItemStack())); statement.setString(2, AuctionAPI.encodeItem(item.getItemStack()));
statement.setDouble(3, item.getPrice()); statement.setDouble(3, item.getPrice());
try {
statement.setInt(4, 1);
statement.setString(5, QuickItem.toString(item.getItemStack()));
} catch (NbtApiException e) {
statement.setInt(4, 0);
statement.setString(5, null);
}
statement.executeUpdate(); statement.executeUpdate();
if (callback != null) { if (callback != null) {
@ -401,7 +608,23 @@ public class DataManager extends DataManagerAbstract {
try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM " + this.getTablePrefix() + "min_item_prices")) { try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM " + this.getTablePrefix() + "min_item_prices")) {
ResultSet resultSet = statement.executeQuery(); ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) { while (resultSet.next()) {
minItemPrices.add(extractMinItemPrice(resultSet));
final MinItemPrice minItemPrice = extractMinItemPrice(resultSet);
if (minItemPrice == null || minItemPrice.getItemStack() == null || minItemPrice.getItemStack().getType() == CompMaterial.AIR.parseMaterial()) continue;
if (resultSet.getInt("serialize_version") == 0) {
try (PreparedStatement updateStatement = connection.prepareStatement("UPDATE " + this.getTablePrefix() + "min_item_prices SET serialize_version = 1, itemstack = ? WHERE id = ?")) {
try {
String possible = QuickItem.toString(minItemPrice.getItemStack());
updateStatement.setString(1, possible);
updateStatement.setString(2, resultSet.getString("id"));
updateStatement.executeUpdate();
} catch (NbtApiException ignored) {
}
}
}
minItemPrices.add(minItemPrice);
} }
callback.accept(null, minItemPrices); callback.accept(null, minItemPrices);
@ -480,102 +703,6 @@ public class DataManager extends DataManagerAbstract {
})); }));
} }
public void updateItemsAsync(Collection<AuctionedItem> items, UpdateCallback callback) {
this.runAsync(() -> updateItems(items, callback));
}
public void updateItems(Collection<AuctionedItem> items, UpdateCallback callback) {
this.databaseConnector.connect(connection -> {
connection.setAutoCommit(false);
SQLException err = null;
PreparedStatement statement = connection.prepareStatement("UPDATE " + this.getTablePrefix() + "auctions SET owner = ?, owner_name = ?, highest_bidder = ?, highest_bidder_name = ?, base_price = ?, bid_start_price = ?, bid_increment_price = ?, current_price = ?, expires_at = ?, expired = ?, item = ? WHERE id = ?");
for (AuctionedItem item : items) {
try {
statement.setString(1, item.getOwner().toString());
statement.setString(2, item.getOwnerName());
statement.setString(3, item.getHighestBidder().toString());
statement.setString(4, item.getHighestBidderName());
statement.setDouble(5, item.getBasePrice());
statement.setDouble(6, item.getBidStartingPrice());
statement.setDouble(7, item.getBidIncrementPrice());
statement.setDouble(8, item.getCurrentPrice());
statement.setLong(9, item.getExpiresAt());
statement.setBoolean(10, item.isExpired());
statement.setString(11, AuctionAPI.encodeItem(item.getItem()));
statement.setString(12, item.getId().toString());
statement.addBatch();
} catch (SQLException e) {
err = e;
break;
}
}
statement.executeBatch();
if (err == null) {
connection.commit();
resolveUpdateCallback(callback, null);
} else {
connection.rollback();
resolveUpdateCallback(callback, err);
}
connection.setAutoCommit(true);
});
}
public void deleteItems(Collection<UUID> items) {
this.databaseConnector.connect(connection -> {
connection.setAutoCommit(false);
PreparedStatement statement = connection.prepareStatement("DELETE FROM " + this.getTablePrefix() + "auctions WHERE id = ?");
for (UUID id : items) {
statement.setString(1, id.toString());
statement.addBatch();
}
statement.executeBatch();
connection.setAutoCommit(true);
});
}
public void deleteItemsAsync(Collection<UUID> items) {
this.runAsync(() -> deleteItems(items));
}
public void deletePlayer(UUID uuid) {
this.runAsync(() -> this.databaseConnector.connect(connection -> {
PreparedStatement statement = connection.prepareStatement("DELETE FROM " + this.getTablePrefix() + "player WHERE uuid = ?");
statement.setString(1, uuid.toString());
statement.execute();
}));
}
// public void insertAuctionPlayer(AuctionPlayer auctionPlayer, Callback<AuctionPlayer> callback) {
// this.runAsync(() -> this.databaseConnector.connect(connection -> {
// try (PreparedStatement statement = connection.prepareStatement("INSERT INTO " + getTablePrefix() + "player (uuid, filter_sale_type, filter_item_category, filter_sort_type, last_listed_item) VALUES (?, ?, ?, ?, ?)")) {
// PreparedStatement fetch = connection.prepareStatement("SELECT * FROM " + this.getTablePrefix() + "player WHERE uuid = ?");
//
// fetch.setString(1, auctionPlayer.getUuid().toString());
// statement.setString(1, auctionPlayer.getPlayer().getUniqueId().toString());
// statement.setString(2, auctionPlayer.getSelectedSaleType().name());
// statement.setString(3, auctionPlayer.getSelectedFilter().name());
// statement.setString(4, auctionPlayer.getAuctionSortType().name());
// statement.setLong(5, auctionPlayer.getLastListedItem());
// statement.executeUpdate();
//
// if (callback != null) {
// ResultSet res = fetch.executeQuery();
// res.next();
// callback.accept(null, extractAuctionPlayer(res));
// }
//
// } catch (Exception e) {
// e.printStackTrace();
// resolveCallback(callback, e);
// }
// }));
// }
public void insertAuctionPlayer(AuctionPlayer auctionPlayer, Callback<AuctionPlayer> callback) { public void insertAuctionPlayer(AuctionPlayer auctionPlayer, Callback<AuctionPlayer> callback) {
this.runAsync(() -> this.databaseConnector.connect(connection -> { this.runAsync(() -> this.databaseConnector.connect(connection -> {
try { try {
@ -668,7 +795,24 @@ public class DataManager extends DataManagerAbstract {
try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM " + this.getTablePrefix() + "payments")) { try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM " + this.getTablePrefix() + "payments")) {
ResultSet resultSet = statement.executeQuery(); ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) { while (resultSet.next()) {
payments.add(extractAuctionPayment(resultSet));
final AuctionPayment payment = extractAuctionPayment(resultSet);
if (payment == null || payment.getItem() == null || payment.getItem().getType() == CompMaterial.AIR.parseMaterial()) continue;
if (resultSet.getInt("serialize_version") == 0) {
try (PreparedStatement updateStatement = connection.prepareStatement("UPDATE " + this.getTablePrefix() + "payments SET serialize_version = 1, itemstack = ? WHERE uuid = ? AND time = ?")) {
try {
String possible = QuickItem.toString(payment.getItem());
updateStatement.setString(1, possible);
updateStatement.setString(2, resultSet.getString("uuid"));
updateStatement.setLong(3, resultSet.getLong("time"));
updateStatement.executeUpdate();
} catch (NbtApiException ignored) {
}
}
}
payments.add(payment);
} }
callback.accept(null, payments); callback.accept(null, payments);
@ -695,7 +839,7 @@ public class DataManager extends DataManagerAbstract {
statement.executeUpdate(); statement.executeUpdate();
// insert into storage // insert into storage
AuctionHouse.getInstance().getPaymentsManager().add(auctionPayment); AuctionHouse.getPaymentsManager().add(auctionPayment);
if (callback != null) { if (callback != null) {
ResultSet res = fetch.executeQuery(); ResultSet res = fetch.executeQuery();
@ -724,10 +868,17 @@ public class DataManager extends DataManagerAbstract {
} }
private AuctionPayment extractAuctionPayment(ResultSet resultSet) throws SQLException { private AuctionPayment extractAuctionPayment(ResultSet resultSet) throws SQLException {
String possibleItem = resultSet.getString("item");
if (possibleItem.contains("Head Database"))
possibleItem = possibleItem.replace("Head Database", "HeadDatabase");
ItemStack item = resultSet.getInt("serialize_version") == 1 ? QuickItem.getItem(resultSet.getString("itemstack")) : AuctionAPI.decodeItem(possibleItem);
return new AuctionPayment( return new AuctionPayment(
UUID.fromString(resultSet.getString("uuid")), UUID.fromString(resultSet.getString("uuid")),
UUID.fromString(resultSet.getString("payment_for")), UUID.fromString(resultSet.getString("payment_for")),
(resultSet.getString("item") == null || resultSet.getString("item").trim().isEmpty()) ? null : AuctionAPI.decodeItem(resultSet.getString("item")), item,
(resultSet.getString("from_name") == null || resultSet.getString("from_name").trim().isEmpty()) ? null : resultSet.getString("from_name"), (resultSet.getString("from_name") == null || resultSet.getString("from_name").trim().isEmpty()) ? null : resultSet.getString("from_name"),
(resultSet.getString("reason") == null || resultSet.getString("reason").trim().isEmpty()) ? PaymentReason.ITEM_SOLD : PaymentReason.valueOf(resultSet.getString("reason")), (resultSet.getString("reason") == null || resultSet.getString("reason").trim().isEmpty()) ? PaymentReason.ITEM_SOLD : PaymentReason.valueOf(resultSet.getString("reason")),
resultSet.getDouble("amount"), resultSet.getDouble("amount"),
@ -765,45 +916,17 @@ public class DataManager extends DataManagerAbstract {
); );
} }
private AuctionedItem extractAuctionedItem(ResultSet resultSet) throws SQLException {
final ItemStack item = AuctionAPI.decodeItem(resultSet.getString("item"));
if (item == null) {
AuctionHouse.getInstance().getLogger().log(Level.WARNING, "Auction Item with id " + resultSet.getString("id") + " is using an unknown material, it is being skipped!");
return null;
}
AuctionedItem auctionItem = new AuctionedItem(
UUID.fromString(resultSet.getString("id")),
UUID.fromString(resultSet.getString("owner")),
UUID.fromString(resultSet.getString("highest_bidder")),
resultSet.getString("owner_name"),
resultSet.getString("highest_bidder_name"),
AuctionItemCategory.valueOf(resultSet.getString("category")),
item,
resultSet.getDouble("base_price"),
resultSet.getDouble("bid_start_price"),
resultSet.getDouble("bid_increment_price"),
resultSet.getDouble("current_price"),
resultSet.getDouble("bid_start_price") >= 1 || resultSet.getDouble("bid_increment_price") >= 1,
resultSet.getBoolean("expired"),
resultSet.getLong("expires_at")
);
auctionItem.setListedWorld(resultSet.getString("listed_world"));
auctionItem.setInfinite(hasColumn(resultSet, "infinite") && resultSet.getBoolean("infinite"));
auctionItem.setAllowPartialBuy(hasColumn(resultSet, "allow_partial_buys") && resultSet.getBoolean("allow_partial_buys"));
auctionItem.setServerItem(resultSet.getBoolean("server_auction"));
auctionItem.setRequest(resultSet.getBoolean("is_request"));
auctionItem.setRequestAmount(resultSet.getInt("request_count"));
return auctionItem;
}
private MinItemPrice extractMinItemPrice(ResultSet resultSet) throws SQLException { private MinItemPrice extractMinItemPrice(ResultSet resultSet) throws SQLException {
String possibleItem = resultSet.getString("item");
if (possibleItem.contains("Head Database"))
possibleItem = possibleItem.replace("Head Database", "HeadDatabase");
ItemStack item = resultSet.getInt("serialize_version") == 1 ? QuickItem.getItem(resultSet.getString("itemstack")) : AuctionAPI.decodeItem(possibleItem);
return new MinItemPrice( return new MinItemPrice(
UUID.fromString(resultSet.getString("id")), UUID.fromString(resultSet.getString("id")),
AuctionAPI.decodeItem(resultSet.getString("item")), item,
resultSet.getDouble("price") resultSet.getDouble("price")
); );
} }
@ -813,6 +936,8 @@ public class DataManager extends DataManagerAbstract {
if (possibleItem.contains("Head Database")) if (possibleItem.contains("Head Database"))
possibleItem = possibleItem.replace("Head Database", "HeadDatabase"); possibleItem = possibleItem.replace("Head Database", "HeadDatabase");
ItemStack item = resultSet.getInt("serialize_version") == 1 ? QuickItem.getItem(resultSet.getString("itemstack")) : AuctionAPI.decodeItemTransaction(possibleItem);
return new Transaction( return new Transaction(
UUID.fromString(resultSet.getString("id")), UUID.fromString(resultSet.getString("id")),
UUID.fromString(resultSet.getString("seller")), UUID.fromString(resultSet.getString("seller")),
@ -820,19 +945,27 @@ public class DataManager extends DataManagerAbstract {
resultSet.getString("seller_name"), resultSet.getString("seller_name"),
resultSet.getString("buyer_name"), resultSet.getString("buyer_name"),
resultSet.getLong("transaction_time"), resultSet.getLong("transaction_time"),
AuctionAPI.decodeItem(possibleItem), item,
AuctionSaleType.valueOf(resultSet.getString("auction_sale_type")), AuctionSaleType.valueOf(resultSet.getString("auction_sale_type")),
resultSet.getDouble("final_price") resultSet.getDouble("final_price")
); );
} }
private AuctionAdminLog extractAdminLog(ResultSet resultSet) throws SQLException { private AuctionAdminLog extractAdminLog(ResultSet resultSet) throws SQLException {
String possibleItem = resultSet.getString("item");
if (possibleItem.contains("Head Database"))
possibleItem = possibleItem.replace("Head Database", "HeadDatabase");
ItemStack item = resultSet.getInt("serialize_version") == 1 ? QuickItem.getItem(resultSet.getString("itemstack")) : AuctionAPI.decodeItem(possibleItem);
return new AuctionAdminLog( return new AuctionAdminLog(
UUID.fromString(resultSet.getString("admin")), UUID.fromString(resultSet.getString("admin")),
resultSet.getString("admin_name"), resultSet.getString("admin_name"),
UUID.fromString(resultSet.getString("target")), UUID.fromString(resultSet.getString("target")),
resultSet.getString("target_name"), resultSet.getString("target_name"),
AuctionAPI.decodeItem(resultSet.getString("item")), item,
UUID.fromString(resultSet.getString("item_id")), UUID.fromString(resultSet.getString("item_id")),
AdminAction.valueOf(resultSet.getString("action").toUpperCase()), AdminAction.valueOf(resultSet.getString("action").toUpperCase()),
resultSet.getLong("time") resultSet.getLong("time")

View File

@ -0,0 +1,49 @@
/*
* Auction House
* Copyright 2018-2022 Kiran Hart
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package ca.tweetzy.auctionhouse.database.migrations;
import ca.tweetzy.flight.database.DataMigration;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
/**
* The current file has been created by Kiran Hart
* Date Created: February 09, 2024,
* Time Created: 11:58 a.m.
* Usage of any code found within this class is prohibited unless given explicit permission otherwise
*/
public class _23_ItemToNBTSerializationMigration extends DataMigration {
public _23_ItemToNBTSerializationMigration() {
super(23);
}
@Override
public void migrate(Connection connection, String tablePrefix) throws SQLException {
try (Statement statement = connection.createStatement()) {
statement.execute("ALTER TABLE " + tablePrefix + "transactions ADD itemstack TEXT NULL");
statement.execute("ALTER TABLE " + tablePrefix + "transactions ADD serialize_version INTEGER DEFAULT 0");
statement.execute("ALTER TABLE " + tablePrefix + "auctions ADD itemstack TEXT NULL");
statement.execute("ALTER TABLE " + tablePrefix + "auctions ADD serialize_version INTEGER DEFAULT 0");
}
}
}

View File

@ -0,0 +1,28 @@
package ca.tweetzy.auctionhouse.database.migrations;
import ca.tweetzy.flight.database.DataMigration;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
public final class _24_RemainingItemToNBTSerializationMigration extends DataMigration {
public _24_RemainingItemToNBTSerializationMigration() {
super(24);
}
@Override
public void migrate(Connection connection, String tablePrefix) throws SQLException {
try (Statement statement = connection.createStatement()) {
statement.execute("ALTER TABLE " + tablePrefix + "admin_logs ADD itemstack TEXT NULL");
statement.execute("ALTER TABLE " + tablePrefix + "admin_logs ADD serialize_version INTEGER DEFAULT 0");
statement.execute("ALTER TABLE " + tablePrefix + "min_item_prices ADD itemstack TEXT NULL");
statement.execute("ALTER TABLE " + tablePrefix + "min_item_prices ADD serialize_version INTEGER DEFAULT 0");
statement.execute("ALTER TABLE " + tablePrefix + "payments ADD itemstack TEXT NULL");
statement.execute("ALTER TABLE " + tablePrefix + "payments ADD serialize_version INTEGER DEFAULT 0");
}
}
}

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package ca.tweetzy.auctionhouse.database.migrations; package ca.tweetzy.auctionhouse.database.migrations.v2;
import ca.tweetzy.flight.database.DataMigration; import ca.tweetzy.flight.database.DataMigration;

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package ca.tweetzy.auctionhouse.database.migrations; package ca.tweetzy.auctionhouse.database.migrations.v2;
import ca.tweetzy.auctionhouse.AuctionHouse; import ca.tweetzy.auctionhouse.AuctionHouse;
import ca.tweetzy.flight.database.DataMigration; import ca.tweetzy.flight.database.DataMigration;

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package ca.tweetzy.auctionhouse.database.migrations; package ca.tweetzy.auctionhouse.database.migrations.v2;
import ca.tweetzy.flight.database.DataMigration; import ca.tweetzy.flight.database.DataMigration;

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package ca.tweetzy.auctionhouse.database.migrations; package ca.tweetzy.auctionhouse.database.migrations.v2;
import ca.tweetzy.flight.database.DataMigration; import ca.tweetzy.flight.database.DataMigration;

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package ca.tweetzy.auctionhouse.database.migrations; package ca.tweetzy.auctionhouse.database.migrations.v2;
import ca.tweetzy.flight.database.DataMigration; import ca.tweetzy.flight.database.DataMigration;

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package ca.tweetzy.auctionhouse.database.migrations; package ca.tweetzy.auctionhouse.database.migrations.v2;
import ca.tweetzy.flight.database.DataMigration; import ca.tweetzy.flight.database.DataMigration;

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package ca.tweetzy.auctionhouse.database.migrations; package ca.tweetzy.auctionhouse.database.migrations.v2;
import ca.tweetzy.flight.database.DataMigration; import ca.tweetzy.flight.database.DataMigration;

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package ca.tweetzy.auctionhouse.database.migrations; package ca.tweetzy.auctionhouse.database.migrations.v2;
import ca.tweetzy.flight.database.DataMigration; import ca.tweetzy.flight.database.DataMigration;

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package ca.tweetzy.auctionhouse.database.migrations; package ca.tweetzy.auctionhouse.database.migrations.v2;
import ca.tweetzy.flight.database.DataMigration; import ca.tweetzy.flight.database.DataMigration;

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package ca.tweetzy.auctionhouse.database.migrations; package ca.tweetzy.auctionhouse.database.migrations.v2;
import ca.tweetzy.flight.database.DataMigration; import ca.tweetzy.flight.database.DataMigration;

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package ca.tweetzy.auctionhouse.database.migrations; package ca.tweetzy.auctionhouse.database.migrations.v2;
import ca.tweetzy.auctionhouse.AuctionHouse; import ca.tweetzy.auctionhouse.AuctionHouse;
import ca.tweetzy.flight.database.DataMigration; import ca.tweetzy.flight.database.DataMigration;

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package ca.tweetzy.auctionhouse.database.migrations; package ca.tweetzy.auctionhouse.database.migrations.v2;
import ca.tweetzy.flight.database.DataMigration; import ca.tweetzy.flight.database.DataMigration;

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package ca.tweetzy.auctionhouse.database.migrations; package ca.tweetzy.auctionhouse.database.migrations.v2;
import ca.tweetzy.flight.database.DataMigration; import ca.tweetzy.flight.database.DataMigration;

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package ca.tweetzy.auctionhouse.database.migrations; package ca.tweetzy.auctionhouse.database.migrations.v2;
import ca.tweetzy.flight.database.DataMigration; import ca.tweetzy.flight.database.DataMigration;

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package ca.tweetzy.auctionhouse.database.migrations; package ca.tweetzy.auctionhouse.database.migrations.v2;
import ca.tweetzy.auctionhouse.AuctionHouse; import ca.tweetzy.auctionhouse.AuctionHouse;
import ca.tweetzy.flight.database.DataMigration; import ca.tweetzy.flight.database.DataMigration;

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package ca.tweetzy.auctionhouse.database.migrations; package ca.tweetzy.auctionhouse.database.migrations.v2;
import ca.tweetzy.auctionhouse.AuctionHouse; import ca.tweetzy.auctionhouse.AuctionHouse;
import ca.tweetzy.flight.database.DataMigration; import ca.tweetzy.flight.database.DataMigration;

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package ca.tweetzy.auctionhouse.database.migrations; package ca.tweetzy.auctionhouse.database.migrations.v2;
import ca.tweetzy.flight.database.DataMigration; import ca.tweetzy.flight.database.DataMigration;

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package ca.tweetzy.auctionhouse.database.migrations; package ca.tweetzy.auctionhouse.database.migrations.v2;
import ca.tweetzy.flight.database.DataMigration; import ca.tweetzy.flight.database.DataMigration;

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package ca.tweetzy.auctionhouse.database.migrations; package ca.tweetzy.auctionhouse.database.migrations.v2;
import ca.tweetzy.auctionhouse.AuctionHouse; import ca.tweetzy.auctionhouse.AuctionHouse;
import ca.tweetzy.flight.database.DataMigration; import ca.tweetzy.flight.database.DataMigration;

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package ca.tweetzy.auctionhouse.database.migrations; package ca.tweetzy.auctionhouse.database.migrations.v2;
import ca.tweetzy.auctionhouse.AuctionHouse; import ca.tweetzy.auctionhouse.AuctionHouse;
import ca.tweetzy.flight.database.DataMigration; import ca.tweetzy.flight.database.DataMigration;

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package ca.tweetzy.auctionhouse.database.migrations; package ca.tweetzy.auctionhouse.database.migrations.v2;
import ca.tweetzy.flight.database.DataMigration; import ca.tweetzy.flight.database.DataMigration;

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package ca.tweetzy.auctionhouse.database.migrations; package ca.tweetzy.auctionhouse.database.migrations.v2;
import ca.tweetzy.flight.database.DataMigration; import ca.tweetzy.flight.database.DataMigration;

View File

@ -447,7 +447,12 @@ public final class GUIAuctionHouse extends AuctionUpdatingPagedGUI<AuctionedItem
} }
if (Settings.GUI_AUCTION_HOUSE_ITEMS_TRANSACTIONS_ENABLED.getBoolean()) { if (Settings.GUI_AUCTION_HOUSE_ITEMS_TRANSACTIONS_ENABLED.getBoolean()) {
setButton(Settings.GUI_AUCTION_HOUSE_ITEMS_TRANSACTIONS_SLOT.getInt(), QuickItem.of(Settings.GUI_AUCTION_HOUSE_ITEMS_TRANSACTIONS_ITEM.getString()).name(Settings.GUI_AUCTION_HOUSE_ITEMS_TRANSACTIONS_NAME.getString()).lore(this.player, Replacer.replaceVariables(Settings.GUI_AUCTION_HOUSE_ITEMS_TRANSACTIONS_LORE.getStringList(), "total_items_bought", AuctionHouse.getInstance().getTransactionManager().getTotalItemsBought(auctionPlayer.getPlayer().getUniqueId()), "total_items_sold", AuctionHouse.getInstance().getTransactionManager().getTotalItemsSold(auctionPlayer.getPlayer().getUniqueId()))).make(), e -> { setButton(Settings.GUI_AUCTION_HOUSE_ITEMS_TRANSACTIONS_SLOT.getInt(), QuickItem.of(Settings.GUI_AUCTION_HOUSE_ITEMS_TRANSACTIONS_ITEM.getString())
.name(Settings.GUI_AUCTION_HOUSE_ITEMS_TRANSACTIONS_NAME.getString())
.lore(this.player, Replacer.replaceVariables(Settings.GUI_AUCTION_HOUSE_ITEMS_TRANSACTIONS_LORE.getStringList(),
"total_items_bought", AuctionHouse.getTransactionManager().getTotalItemsBought(auctionPlayer.getPlayer().getUniqueId()),
"total_items_sold", AuctionHouse.getTransactionManager().getTotalItemsSold(auctionPlayer.getPlayer().getUniqueId()))
).make(), e -> {
cancelTask(); cancelTask();
if (Settings.RESTRICT_ALL_TRANSACTIONS_TO_PERM.getBoolean() && !e.player.hasPermission("auctionhouse.transactions.viewall")) { if (Settings.RESTRICT_ALL_TRANSACTIONS_TO_PERM.getBoolean() && !e.player.hasPermission("auctionhouse.transactions.viewall")) {

View File

@ -78,26 +78,32 @@ public class PlaceholderAPIHook extends PlaceholderExpansion {
// legacy placeholders // legacy placeholders
if (params.equalsIgnoreCase("total_money_earned")) if (params.equalsIgnoreCase("total_money_earned"))
return String.valueOf(AuctionHouse.getInstance().getAuctionStatisticManager().getStatisticByPlayer(player.getUniqueId(), AuctionStatisticType.MONEY_EARNED)); return String.valueOf(AuctionHouse.getAuctionStatisticManager().getStatisticByPlayer(player.getUniqueId(), AuctionStatisticType.MONEY_EARNED));
if (params.equalsIgnoreCase("total_money_spent")) if (params.equalsIgnoreCase("total_money_spent"))
return String.valueOf(AuctionHouse.getInstance().getAuctionStatisticManager().getStatisticByPlayer(player.getUniqueId(), AuctionStatisticType.MONEY_SPENT)); return String.valueOf(AuctionHouse.getAuctionStatisticManager().getStatisticByPlayer(player.getUniqueId(), AuctionStatisticType.MONEY_SPENT));
if (params.equalsIgnoreCase("total_items_bought"))
return String.valueOf(AuctionHouse.getTransactionManager().getTotalItemsBought(player.getUniqueId()));
if (params.equalsIgnoreCase("total_items_sold"))
return String.valueOf(AuctionHouse.getTransactionManager().getTotalItemsSold(player.getUniqueId()));
if (params.equalsIgnoreCase("active_auctions")) { if (params.equalsIgnoreCase("active_auctions")) {
AuctionPlayer auctionPlayer = AuctionHouse.getInstance().getAuctionPlayerManager().getPlayer(player.getUniqueId()); AuctionPlayer auctionPlayer = AuctionHouse.getAuctionPlayerManager().getPlayer(player.getUniqueId());
if (auctionPlayer == null) return null; if (auctionPlayer == null) return null;
return String.valueOf(auctionPlayer.getItems(false).size()); return String.valueOf(auctionPlayer.getItems(false).size());
} }
if (params.equalsIgnoreCase("expired_auctions")) { if (params.equalsIgnoreCase("expired_auctions")) {
AuctionPlayer auctionPlayer = AuctionHouse.getInstance().getAuctionPlayerManager().getPlayer(player.getUniqueId()); AuctionPlayer auctionPlayer = AuctionHouse.getAuctionPlayerManager().getPlayer(player.getUniqueId());
if (auctionPlayer == null) return null; if (auctionPlayer == null) return null;
return String.valueOf(auctionPlayer.getItems(true).size()); return String.valueOf(auctionPlayer.getItems(true).size());
} }
if (params.equalsIgnoreCase("server_active_auctions")) { if (params.equalsIgnoreCase("server_active_auctions")) {
return String.valueOf(AuctionHouse.getInstance().getAuctionItemManager().getItems().size()); return String.valueOf(AuctionHouse.getAuctionItemManager().getItems().size());
} }
// cool statistic stuff // cool statistic stuff
@ -111,10 +117,10 @@ public class PlaceholderAPIHook extends PlaceholderExpansion {
final int duration = Integer.parseInt(splitString(paramSplit[2])[0]); final int duration = Integer.parseInt(splitString(paramSplit[2])[0]);
final ChronoUnit unit = getChronoUnitFromParam(splitString(paramSplit[2])[1]); final ChronoUnit unit = getChronoUnitFromParam(splitString(paramSplit[2])[1]);
return String.valueOf(AuctionHouse.getInstance().getAuctionStatisticManager().getStatistic(auctionStatisticType, unit, duration)); return String.valueOf(AuctionHouse.getAuctionStatisticManager().getStatistic(auctionStatisticType, unit, duration));
} }
return String.valueOf(AuctionHouse.getInstance().getAuctionStatisticManager().getStatistic(auctionStatisticType)); return String.valueOf(AuctionHouse.getAuctionStatisticManager().getStatistic(auctionStatisticType));
} }
if (paramSplit[0].equalsIgnoreCase("pstat")) { if (paramSplit[0].equalsIgnoreCase("pstat")) {
@ -146,10 +152,10 @@ public class PlaceholderAPIHook extends PlaceholderExpansion {
final int duration = Integer.parseInt(chronoSplit[0]); final int duration = Integer.parseInt(chronoSplit[0]);
final ChronoUnit unit = getChronoUnitFromParam(chronoSplit[1]); final ChronoUnit unit = getChronoUnitFromParam(chronoSplit[1]);
return String.valueOf(AuctionHouse.getInstance().getAuctionStatisticManager().getStatisticByPlayer(targetUser.getUniqueId(), auctionStatisticType, unit, duration)); return String.valueOf(AuctionHouse.getAuctionStatisticManager().getStatisticByPlayer(targetUser.getUniqueId(), auctionStatisticType, unit, duration));
} }
return String.valueOf(AuctionHouse.getInstance().getAuctionStatisticManager().getStatisticByPlayer(targetUser.getUniqueId(), auctionStatisticType)); return String.valueOf(AuctionHouse.getAuctionStatisticManager().getStatisticByPlayer(targetUser.getUniqueId(), auctionStatisticType));
} }
return null; return null;

View File

@ -59,11 +59,13 @@ public class AuctionItemManager {
public void start() { public void start() {
AuctionHouse.getInstance().getDataManager().getItems((error, results) -> { AuctionHouse.getDataManager().getItems((error, results) -> {
if (error == null) { if (error == null) {
for (AuctionedItem item : results) { for (AuctionedItem item : results) {
addAuctionItem(item); addAuctionItem(item);
} }
} else {
error.printStackTrace();
} }
}); });
} }

View File

@ -98,11 +98,13 @@ public class TransactionManager {
} }
public void loadTransactions() { public void loadTransactions() {
AuctionHouse.getInstance().getDataManager().getTransactions((error, results) -> { AuctionHouse.getDataManager().getTransactions((error, results) -> {
if (error == null) { if (error == null) {
for (Transaction transaction : results) { for (Transaction transaction : results) {
addTransaction(transaction); addTransaction(transaction);
} }
} else {
error.printStackTrace();
} }
}); });
} }