mirror of
https://github.com/kiranhart/Auction-House.git
synced 2025-02-08 18:02:10 +01:00
database storage support & auto save
This commit is contained in:
parent
689548183f
commit
46e886893e
2
pom.xml
2
pom.xml
@ -6,7 +6,7 @@
|
||||
|
||||
<groupId>ca.tweetzy</groupId>
|
||||
<artifactId>auctionhouse</artifactId>
|
||||
<version>2.2.0</version>
|
||||
<version>2.3.0</version>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
|
@ -3,12 +3,15 @@ package ca.tweetzy.auctionhouse;
|
||||
import ca.tweetzy.auctionhouse.api.UpdateChecker;
|
||||
import ca.tweetzy.auctionhouse.auction.AuctionPlayer;
|
||||
import ca.tweetzy.auctionhouse.commands.*;
|
||||
import ca.tweetzy.auctionhouse.database.DataManager;
|
||||
import ca.tweetzy.auctionhouse.database.migrations._1_InitialMigration;
|
||||
import ca.tweetzy.auctionhouse.listeners.AuctionListeners;
|
||||
import ca.tweetzy.auctionhouse.listeners.PlayerListeners;
|
||||
import ca.tweetzy.auctionhouse.managers.AuctionItemManager;
|
||||
import ca.tweetzy.auctionhouse.managers.AuctionPlayerManager;
|
||||
import ca.tweetzy.auctionhouse.managers.TransactionManager;
|
||||
import ca.tweetzy.auctionhouse.settings.Settings;
|
||||
import ca.tweetzy.auctionhouse.tasks.AutoSaveTask;
|
||||
import ca.tweetzy.auctionhouse.tasks.TickAuctionsTask;
|
||||
import ca.tweetzy.core.TweetyCore;
|
||||
import ca.tweetzy.core.TweetyPlugin;
|
||||
@ -16,8 +19,12 @@ import ca.tweetzy.core.commands.CommandManager;
|
||||
import ca.tweetzy.core.compatibility.ServerVersion;
|
||||
import ca.tweetzy.core.configuration.Config;
|
||||
import ca.tweetzy.core.core.PluginID;
|
||||
import ca.tweetzy.core.database.DataMigrationManager;
|
||||
import ca.tweetzy.core.database.DatabaseConnector;
|
||||
import ca.tweetzy.core.database.MySQLConnector;
|
||||
import ca.tweetzy.core.gui.GuiManager;
|
||||
import ca.tweetzy.core.utils.Metrics;
|
||||
import lombok.Getter;
|
||||
import net.milkbowl.vault.economy.Economy;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.plugin.RegisteredServiceProvider;
|
||||
@ -36,17 +43,36 @@ public class AuctionHouse extends TweetyPlugin {
|
||||
|
||||
private static AuctionHouse instance;
|
||||
|
||||
@Getter
|
||||
private Economy economy;
|
||||
|
||||
@Getter
|
||||
private final GuiManager guiManager = new GuiManager(this);
|
||||
|
||||
@Getter
|
||||
private final Config data = new Config(this, "data.yml");
|
||||
|
||||
protected Metrics metrics;
|
||||
|
||||
@Getter
|
||||
private CommandManager commandManager;
|
||||
|
||||
@Getter
|
||||
private AuctionPlayerManager auctionPlayerManager;
|
||||
|
||||
@Getter
|
||||
private AuctionItemManager auctionItemManager;
|
||||
|
||||
@Getter
|
||||
private TransactionManager transactionManager;
|
||||
|
||||
@Getter
|
||||
private DatabaseConnector databaseConnector;
|
||||
|
||||
@Getter
|
||||
private DataManager dataManager;
|
||||
|
||||
@Getter
|
||||
private UpdateChecker.UpdateStatus status;
|
||||
|
||||
@Override
|
||||
@ -86,13 +112,21 @@ public class AuctionHouse extends TweetyPlugin {
|
||||
this.auctionPlayerManager = new AuctionPlayerManager();
|
||||
Bukkit.getOnlinePlayers().forEach(p -> this.auctionPlayerManager.addPlayer(new AuctionPlayer(p)));
|
||||
|
||||
// Setup the database if enabled
|
||||
if (Settings.DATABASE_USE.getBoolean()) {
|
||||
this.databaseConnector = new MySQLConnector(this, Settings.DATABASE_HOST.getString(), Settings.DATABASE_PORT.getInt(), Settings.DATABASE_NAME.getString(), Settings.DATABASE_USERNAME.getString(), Settings.DATABASE_PASSWORD.getString(), Settings.DATABASE_USE_SSL.getBoolean());
|
||||
this.dataManager = new DataManager(this.databaseConnector, this);
|
||||
DataMigrationManager dataMigrationManager = new DataMigrationManager(this.databaseConnector, this.dataManager, new _1_InitialMigration());
|
||||
dataMigrationManager.runMigrations();
|
||||
}
|
||||
|
||||
// load auction items
|
||||
this.auctionItemManager = new AuctionItemManager();
|
||||
this.auctionItemManager.loadItems();
|
||||
this.auctionItemManager.loadItems(Settings.DATABASE_USE.getBoolean());
|
||||
|
||||
// load transactions
|
||||
this.transactionManager = new TransactionManager();
|
||||
this.transactionManager.loadTransactions();
|
||||
this.transactionManager.loadTransactions(Settings.DATABASE_USE.getBoolean());
|
||||
|
||||
// gui manager
|
||||
this.guiManager.init();
|
||||
@ -107,11 +141,16 @@ public class AuctionHouse extends TweetyPlugin {
|
||||
new CommandSearch(),
|
||||
new CommandSettings(),
|
||||
new CommandConvert(),
|
||||
new CommandReload()
|
||||
new CommandReload(),
|
||||
new CommandUpload()
|
||||
);
|
||||
|
||||
// start the auction tick task
|
||||
TickAuctionsTask.startTask();
|
||||
// auto save task
|
||||
if (Settings.AUTO_SAVE_ENABLED.getBoolean()) {
|
||||
AutoSaveTask.startTask();
|
||||
}
|
||||
|
||||
// update check
|
||||
getServer().getScheduler().runTaskLaterAsynchronously(this, () -> this.status = new UpdateChecker(this, 60325, getConsole()).check().getStatus(), 1L);
|
||||
@ -122,8 +161,8 @@ public class AuctionHouse extends TweetyPlugin {
|
||||
|
||||
@Override
|
||||
public void onPluginDisable() {
|
||||
this.auctionItemManager.saveItems();
|
||||
this.transactionManager.saveTransactions();
|
||||
this.auctionItemManager.saveItems(Settings.DATABASE_USE.getBoolean(), false);
|
||||
this.transactionManager.saveTransactions(Settings.DATABASE_USE.getBoolean(), false);
|
||||
instance = null;
|
||||
}
|
||||
|
||||
@ -142,38 +181,6 @@ public class AuctionHouse extends TweetyPlugin {
|
||||
return instance;
|
||||
}
|
||||
|
||||
public Config getData() {
|
||||
return data;
|
||||
}
|
||||
|
||||
public Economy getEconomy() {
|
||||
return economy;
|
||||
}
|
||||
|
||||
public CommandManager getCommandManager() {
|
||||
return commandManager;
|
||||
}
|
||||
|
||||
public AuctionItemManager getAuctionItemManager() {
|
||||
return auctionItemManager;
|
||||
}
|
||||
|
||||
public AuctionPlayerManager getAuctionPlayerManager() {
|
||||
return auctionPlayerManager;
|
||||
}
|
||||
|
||||
public TransactionManager getTransactionManager() {
|
||||
return transactionManager;
|
||||
}
|
||||
|
||||
public GuiManager getGuiManager() {
|
||||
return guiManager;
|
||||
}
|
||||
|
||||
public UpdateChecker.UpdateStatus getUpdateStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
String IS_SONGODA_DOWNLOAD = "%%__SONGODA__%%";
|
||||
String SONGODA_NODE = "%%__SONGODA_NODE__%%";
|
||||
String TIMESTAMP = "%%__TIMESTAMP__%%";
|
||||
|
@ -0,0 +1,74 @@
|
||||
package ca.tweetzy.auctionhouse.commands;
|
||||
|
||||
import ca.tweetzy.auctionhouse.AuctionHouse;
|
||||
import ca.tweetzy.auctionhouse.api.AuctionAPI;
|
||||
import ca.tweetzy.auctionhouse.auction.AuctionItem;
|
||||
import ca.tweetzy.auctionhouse.settings.Settings;
|
||||
import ca.tweetzy.auctionhouse.transaction.Transaction;
|
||||
import ca.tweetzy.core.commands.AbstractCommand;
|
||||
import ca.tweetzy.core.utils.TextUtils;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* The current file has been created by Kiran Hart
|
||||
* Date Created: April 15 2021
|
||||
* Time Created: 4:17 p.m.
|
||||
* Usage of any code found within this class is prohibited unless given explicit permission otherwise
|
||||
*/
|
||||
public class CommandUpload extends AbstractCommand {
|
||||
|
||||
public CommandUpload() {
|
||||
super(CommandType.CONSOLE_OK, "upload");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ReturnType runCommand(CommandSender sender, String... args) {
|
||||
if (!Settings.DATABASE_USE.getBoolean()) {
|
||||
AuctionHouse.getInstance().getLocale().newMessage(TextUtils.formatText("&cYou must be using a database to use this command")).sendPrefixedMessage(sender);
|
||||
return ReturnType.FAILURE;
|
||||
}
|
||||
|
||||
if (AuctionHouse.getInstance().getData().contains("auction items") && AuctionHouse.getInstance().getData().isList("auction items")) {
|
||||
List<AuctionItem> items = AuctionHouse.getInstance().getData().getStringList("auction items").stream().map(AuctionAPI.getInstance()::convertBase64ToObject).map(object -> (AuctionItem) object).collect(Collectors.toList());
|
||||
items.forEach(AuctionHouse.getInstance().getAuctionItemManager()::addItem);
|
||||
}
|
||||
|
||||
if (AuctionHouse.getInstance().getData().contains("transactions") && AuctionHouse.getInstance().getData().isList("transactions")) {
|
||||
List<Transaction> transactions = AuctionHouse.getInstance().getData().getStringList("transactions").stream().map(AuctionAPI.getInstance()::convertBase64ToObject).map(object -> (Transaction) object).collect(Collectors.toList());
|
||||
transactions.forEach(AuctionHouse.getInstance().getTransactionManager()::addTransaction);
|
||||
}
|
||||
|
||||
AuctionHouse.getInstance().getData().set("auction items", null);
|
||||
AuctionHouse.getInstance().getData().set("transactions", null);
|
||||
AuctionHouse.getInstance().getData().save();
|
||||
|
||||
AuctionHouse.getInstance().getDataManager().saveItems(AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems(), true);
|
||||
AuctionHouse.getInstance().getDataManager().saveTransactions(AuctionHouse.getInstance().getTransactionManager().getTransactions(), true);
|
||||
|
||||
AuctionHouse.getInstance().getLocale().newMessage(TextUtils.formatText("&aLoaded file items/transactions and saved them to the database.")).sendPrefixedMessage(sender);
|
||||
return ReturnType.SUCCESS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPermissionNode() {
|
||||
return "auctionhouse.cmd.upload";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSyntax() {
|
||||
return "upload";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Used to upload flat file data to the database";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<String> onTab(CommandSender sender, String... args) {
|
||||
return null;
|
||||
}
|
||||
}
|
140
src/main/java/ca/tweetzy/auctionhouse/database/DataManager.java
Normal file
140
src/main/java/ca/tweetzy/auctionhouse/database/DataManager.java
Normal file
@ -0,0 +1,140 @@
|
||||
package ca.tweetzy.auctionhouse.database;
|
||||
|
||||
import ca.tweetzy.auctionhouse.api.AuctionAPI;
|
||||
import ca.tweetzy.auctionhouse.auction.AuctionItem;
|
||||
import ca.tweetzy.auctionhouse.transaction.Transaction;
|
||||
import ca.tweetzy.core.database.DataManagerAbstract;
|
||||
import ca.tweetzy.core.database.DatabaseConnector;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* The current file has been created by Kiran Hart
|
||||
* Date Created: April 15 2021
|
||||
* Time Created: 2:41 p.m.
|
||||
* Usage of any code found within this class is prohibited unless given explicit permission otherwise
|
||||
*/
|
||||
public class DataManager extends DataManagerAbstract {
|
||||
|
||||
public DataManager(DatabaseConnector databaseConnector, Plugin plugin) {
|
||||
super(databaseConnector, plugin);
|
||||
}
|
||||
|
||||
public void saveItems(List<AuctionItem> items, boolean async) {
|
||||
if (async) {
|
||||
this.async(() -> this.databaseConnector.connect(connection -> {
|
||||
String saveItems = "INSERT IGNORE INTO " + this.getTablePrefix() + "items SET data = ?";
|
||||
String truncate = "TRUNCATE TABLE " + this.getTablePrefix() + "items";
|
||||
try (PreparedStatement statement = connection.prepareStatement(truncate)) {
|
||||
statement.execute();
|
||||
}
|
||||
|
||||
PreparedStatement statement = connection.prepareStatement(saveItems);
|
||||
items.forEach(item -> {
|
||||
try {
|
||||
statement.setString(1, AuctionAPI.getInstance().convertToBase64(item));
|
||||
statement.addBatch();
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
});
|
||||
statement.executeBatch();
|
||||
}));
|
||||
} else {
|
||||
this.databaseConnector.connect(connection -> {
|
||||
String saveItems = "INSERT IGNORE INTO " + this.getTablePrefix() + "items SET data = ?";
|
||||
String truncate = "TRUNCATE TABLE " + this.getTablePrefix() + "items";
|
||||
connection.prepareStatement(truncate).executeUpdate();
|
||||
PreparedStatement statement = connection.prepareStatement(saveItems);
|
||||
items.forEach(item -> {
|
||||
try {
|
||||
statement.setString(1, AuctionAPI.getInstance().convertToBase64(item));
|
||||
statement.addBatch();
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
});
|
||||
statement.executeBatch();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public void saveTransactions(List<Transaction> transactions, boolean async) {
|
||||
if (async) {
|
||||
this.async(() -> this.databaseConnector.connect(connection -> {
|
||||
String saveItems = "INSERT IGNORE INTO " + this.getTablePrefix() + "transactions SET data = ?";
|
||||
String truncate = "TRUNCATE TABLE " + this.getTablePrefix() + "transactions";
|
||||
try (PreparedStatement statement = connection.prepareStatement(truncate)) {
|
||||
statement.execute();
|
||||
}
|
||||
|
||||
PreparedStatement statement = connection.prepareStatement(saveItems);
|
||||
transactions.forEach(transaction -> {
|
||||
try {
|
||||
statement.setString(1, AuctionAPI.getInstance().convertToBase64(transaction));
|
||||
statement.addBatch();
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
});
|
||||
statement.executeBatch();
|
||||
}));
|
||||
} else {
|
||||
this.databaseConnector.connect(connection -> {
|
||||
String saveItems = "INSERT IGNORE INTO " + this.getTablePrefix() + "transactions SET data = ?";
|
||||
String truncate = "TRUNCATE TABLE " + this.getTablePrefix() + "transactions";
|
||||
try (PreparedStatement statement = connection.prepareStatement(truncate)) {
|
||||
statement.execute();
|
||||
}
|
||||
|
||||
PreparedStatement statement = connection.prepareStatement(saveItems);
|
||||
transactions.forEach(transaction -> {
|
||||
try {
|
||||
statement.setString(1, AuctionAPI.getInstance().convertToBase64(transaction));
|
||||
statement.addBatch();
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
});
|
||||
statement.executeBatch();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public void getTransactions(Consumer<ArrayList<Transaction>> callback) {
|
||||
ArrayList<Transaction> transactions = new ArrayList<>();
|
||||
this.async(() -> this.databaseConnector.connect(connection -> {
|
||||
String select = "SELECT * FROM " + this.getTablePrefix() + "transactions";
|
||||
|
||||
try (Statement statement = connection.createStatement()) {
|
||||
ResultSet result = statement.executeQuery(select);
|
||||
while (result.next()) {
|
||||
transactions.add((Transaction) AuctionAPI.getInstance().convertBase64ToObject(result.getString("data")));
|
||||
}
|
||||
}
|
||||
this.sync(() -> callback.accept(transactions));
|
||||
}));
|
||||
}
|
||||
|
||||
public void getItems(Consumer<ArrayList<AuctionItem>> callback) {
|
||||
ArrayList<AuctionItem> items = new ArrayList<>();
|
||||
this.async(() -> this.databaseConnector.connect(connection -> {
|
||||
String select = "SELECT * FROM " + this.getTablePrefix() + "items";
|
||||
|
||||
try (Statement statement = connection.createStatement()) {
|
||||
ResultSet result = statement.executeQuery(select);
|
||||
while (result.next()) {
|
||||
items.add((AuctionItem) AuctionAPI.getInstance().convertBase64ToObject(result.getString("data")));
|
||||
}
|
||||
}
|
||||
this.sync(() -> callback.accept(items));
|
||||
}));
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package ca.tweetzy.auctionhouse.database.migrations;
|
||||
|
||||
import ca.tweetzy.auctionhouse.AuctionHouse;
|
||||
import ca.tweetzy.core.database.DataMigration;
|
||||
import ca.tweetzy.core.database.MySQLConnector;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
|
||||
/**
|
||||
* The current file has been created by Kiran Hart
|
||||
* Date Created: April 15 2021
|
||||
* Time Created: 2:41 p.m.
|
||||
* Usage of any code found within this class is prohibited unless given explicit permission otherwise
|
||||
*/
|
||||
public class _1_InitialMigration extends DataMigration {
|
||||
|
||||
public _1_InitialMigration() {
|
||||
super(1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void migrate(Connection connection, String tablePrefix) throws SQLException {
|
||||
String autoIncrement = AuctionHouse.getInstance().getDatabaseConnector() instanceof MySQLConnector ? " AUTO_INCREMENT" : "";
|
||||
|
||||
try (Statement statement = connection.createStatement()) {
|
||||
statement.execute("CREATE TABLE " + tablePrefix + "items (" +
|
||||
"id INTEGER PRIMARY KEY" + autoIncrement + ", " +
|
||||
"data LONGTEXT NOT NULL )");
|
||||
|
||||
statement.execute("CREATE TABLE " + tablePrefix + "transactions (" +
|
||||
"id INTEGER PRIMARY KEY" + autoIncrement + ", " +
|
||||
"data LONGTEXT NOT NULL )");
|
||||
}
|
||||
}
|
||||
}
|
@ -11,6 +11,7 @@ import ca.tweetzy.core.gui.Gui;
|
||||
import ca.tweetzy.core.utils.TextUtils;
|
||||
import ca.tweetzy.core.utils.items.TItemBuilder;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
@ -27,6 +28,7 @@ public class GUIActiveAuctions extends Gui {
|
||||
|
||||
final AuctionPlayer auctionPlayer;
|
||||
|
||||
private BukkitTask task;
|
||||
private int taskId;
|
||||
|
||||
public GUIActiveAuctions(AuctionPlayer auctionPlayer) {
|
||||
@ -37,8 +39,20 @@ public class GUIActiveAuctions extends Gui {
|
||||
draw();
|
||||
|
||||
if (Settings.AUTO_REFRESH_AUCTION_PAGES.getBoolean()) {
|
||||
setOnOpen(e -> startTask());
|
||||
setOnClose(e -> killTask());
|
||||
setOnOpen(e -> {
|
||||
if (Settings.USE_ASYNC_GUI_REFRESH.getBoolean()) {
|
||||
startTaskAsync();
|
||||
} else {
|
||||
startTask();
|
||||
}
|
||||
});
|
||||
setOnClose(e -> {
|
||||
if (Settings.USE_ASYNC_GUI_REFRESH.getBoolean()) {
|
||||
killAsyncTask();
|
||||
} else {
|
||||
killTask();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -79,7 +93,15 @@ public class GUIActiveAuctions extends Gui {
|
||||
taskId = Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(AuctionHouse.getInstance(), this::draw, 0L, Settings.TICK_UPDATE_TIME.getInt());
|
||||
}
|
||||
|
||||
private void startTaskAsync() {
|
||||
task = Bukkit.getServer().getScheduler().runTaskTimerAsynchronously(AuctionHouse.getInstance(), this::draw, 0L, Settings.TICK_UPDATE_TIME.getInt());
|
||||
}
|
||||
|
||||
private void killTask() {
|
||||
Bukkit.getServer().getScheduler().cancelTask(taskId);
|
||||
}
|
||||
|
||||
private void killAsyncTask() {
|
||||
task.cancel();
|
||||
}
|
||||
}
|
||||
|
@ -18,6 +18,7 @@ import org.bukkit.block.BlockState;
|
||||
import org.bukkit.block.ShulkerBox;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.BlockStateMeta;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
@ -37,6 +38,7 @@ public class GUIAuctionHouse extends Gui {
|
||||
List<AuctionItem> items;
|
||||
|
||||
private int taskId;
|
||||
private BukkitTask task;
|
||||
private AuctionItemCategory filterCategory = AuctionItemCategory.ALL;
|
||||
private AuctionSaleType filterAuctionType = AuctionSaleType.BOTH;
|
||||
|
||||
@ -49,8 +51,20 @@ public class GUIAuctionHouse extends Gui {
|
||||
draw();
|
||||
|
||||
if (Settings.AUTO_REFRESH_AUCTION_PAGES.getBoolean()) {
|
||||
setOnOpen(e -> startTask());
|
||||
setOnClose(e -> killTask());
|
||||
setOnOpen(e -> {
|
||||
if (Settings.USE_ASYNC_GUI_REFRESH.getBoolean()) {
|
||||
startTaskAsync();
|
||||
} else {
|
||||
startTask();
|
||||
}
|
||||
});
|
||||
setOnClose(e -> {
|
||||
if (Settings.USE_ASYNC_GUI_REFRESH.getBoolean()) {
|
||||
killAsyncTask();
|
||||
} else {
|
||||
killTask();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -212,7 +226,15 @@ public class GUIAuctionHouse extends Gui {
|
||||
taskId = Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(AuctionHouse.getInstance(), this::draw, 0L, Settings.TICK_UPDATE_TIME.getInt());
|
||||
}
|
||||
|
||||
private void startTaskAsync() {
|
||||
task = Bukkit.getServer().getScheduler().runTaskTimerAsynchronously(AuctionHouse.getInstance(), this::draw, 0L, Settings.TICK_UPDATE_TIME.getInt());
|
||||
}
|
||||
|
||||
private void killTask() {
|
||||
Bukkit.getServer().getScheduler().cancelTask(taskId);
|
||||
}
|
||||
|
||||
private void killAsyncTask() {
|
||||
task.cancel();
|
||||
}
|
||||
}
|
||||
|
@ -53,7 +53,6 @@ public class GUIExpiredItems extends Gui {
|
||||
setButton(5, 0, ConfigurationItemHelper.createConfigurationItem(Settings.GUI_CLOSE_BTN_ITEM.getString(), Settings.GUI_CLOSE_BTN_NAME.getString(), Settings.GUI_CLOSE_BTN_LORE.getStringList(), null), e -> e.manager.showGUI(e.player, new GUIAuctionHouse(this.auctionPlayer)));
|
||||
setButton(5, 1, ConfigurationItemHelper.createConfigurationItem(Settings.GUI_EXPIRED_AUCTIONS_ITEM.getString(), Settings.GUI_EXPIRED_AUCTIONS_NAME.getString(), Settings.GUI_EXPIRED_AUCTIONS_LORE.getStringList(), null), e -> {
|
||||
this.auctionPlayer.getItems(true).forEach(item -> {
|
||||
AuctionHouse.getInstance().getAuctionItemManager().adjustItemsInFile(item, false);
|
||||
AuctionHouse.getInstance().getAuctionItemManager().removeItem(item.getKey());
|
||||
PlayerUtils.giveItem(e.player, AuctionAPI.getInstance().deserializeItem(item.getRawItem()));
|
||||
});
|
||||
@ -64,7 +63,6 @@ public class GUIExpiredItems extends Gui {
|
||||
int slot = 0;
|
||||
for (AuctionItem item : data) {
|
||||
setButton(slot++, AuctionAPI.getInstance().deserializeItem(item.getRawItem()), e -> {
|
||||
AuctionHouse.getInstance().getAuctionItemManager().adjustItemsInFile(item, false);
|
||||
AuctionHouse.getInstance().getAuctionItemManager().removeItem(item.getKey());
|
||||
PlayerUtils.giveItem(e.player, AuctionAPI.getInstance().deserializeItem(item.getRawItem()));
|
||||
draw();
|
||||
|
@ -24,7 +24,7 @@ public class PlayerListeners implements Listener {
|
||||
Player player = e.getPlayer();
|
||||
Bukkit.getServer().getScheduler().runTaskLaterAsynchronously(AuctionHouse.getInstance(), () -> {
|
||||
AuctionHouse.getInstance().getAuctionPlayerManager().addPlayer(new AuctionPlayer(player));
|
||||
if (AuctionHouse.getInstance().getUpdateStatus() == UpdateChecker.UpdateStatus.UNRELEASED_VERSION && player.isOp()) {
|
||||
if (AuctionHouse.getInstance().getStatus() == UpdateChecker.UpdateStatus.UNRELEASED_VERSION && player.isOp()) {
|
||||
AuctionHouse.getInstance().getLocale().getMessage(TextUtils.formatText(String.format("&dYou're running an unreleased version of Auction House &f(&c%s&f)", AuctionHouse.getInstance().getDescription().getVersion()))).sendPrefixedMessage(player);
|
||||
}
|
||||
}, 20);
|
||||
|
@ -50,48 +50,30 @@ public class AuctionItemManager {
|
||||
return Collections.unmodifiableList(auctionItems.stream().filter(auctionItem -> MaterialCategorizer.getMaterialCategory(AuctionAPI.getInstance().deserializeItem(auctionItem.getRawItem())) == category).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
public void loadItems() {
|
||||
if (AuctionHouse.getInstance().getData().contains("auction items") && AuctionHouse.getInstance().getData().isList("auction items")) {
|
||||
List<AuctionItem> items = AuctionHouse.getInstance().getData().getStringList("auction items").stream().map(AuctionAPI.getInstance()::convertBase64ToObject).map(object -> (AuctionItem) object).collect(Collectors.toList());
|
||||
long start = System.currentTimeMillis();
|
||||
items.forEach(this::addItem);
|
||||
AuctionHouse.getInstance().getLocale().newMessage(TextUtils.formatText(String.format("&aLoaded &2%d &aauction items(s) in &e%d&fms", items.size(), System.currentTimeMillis() - start))).sendPrefixedMessage(Bukkit.getConsoleSender());
|
||||
AuctionHouse.getInstance().getData().set("auction items", null);
|
||||
AuctionHouse.getInstance().getData().save();
|
||||
public void loadItems(boolean useDatabase) {
|
||||
if (useDatabase) {
|
||||
AuctionHouse.getInstance().getDataManager().getItems(all -> all.forEach(this::addItem));
|
||||
} else {
|
||||
if (AuctionHouse.getInstance().getData().contains("auction items") && AuctionHouse.getInstance().getData().isList("auction items")) {
|
||||
List<AuctionItem> items = AuctionHouse.getInstance().getData().getStringList("auction items").stream().map(AuctionAPI.getInstance()::convertBase64ToObject).map(object -> (AuctionItem) object).collect(Collectors.toList());
|
||||
long start = System.currentTimeMillis();
|
||||
items.forEach(this::addItem);
|
||||
AuctionHouse.getInstance().getLocale().newMessage(TextUtils.formatText(String.format("&aLoaded &2%d &aauction items(s) in &e%d&fms", items.size(), System.currentTimeMillis() - start))).sendPrefixedMessage(Bukkit.getConsoleSender());
|
||||
AuctionHouse.getInstance().getData().set("auction items", null);
|
||||
AuctionHouse.getInstance().getData().save();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void saveItems() {
|
||||
this.adjustItemsInFile(this.getAuctionItems());
|
||||
public void saveItems(boolean useDatabase, boolean async) {
|
||||
if (useDatabase) {
|
||||
AuctionHouse.getInstance().getDataManager().saveItems(getAuctionItems(), async);
|
||||
} else {
|
||||
this.adjustItemsInFile(this.getAuctionItems());
|
||||
}
|
||||
}
|
||||
|
||||
public void adjustItemsInFile(List<AuctionItem> items) {
|
||||
if (!AuctionHouse.getInstance().getData().contains("auction items")) {
|
||||
AuctionHouse.getInstance().getData().set("auction items", items.stream().map(AuctionAPI.getInstance()::convertToBase64).collect(Collectors.toList()));
|
||||
AuctionHouse.getInstance().getData().save();
|
||||
return;
|
||||
}
|
||||
|
||||
List<AuctionItem> foundItems = AuctionHouse.getInstance().getData().getStringList("auction items").stream().map(AuctionAPI.getInstance()::convertBase64ToObject).map(object -> (AuctionItem) object).collect(Collectors.toList());
|
||||
foundItems.addAll(items);
|
||||
AuctionHouse.getInstance().getData().set("auction items", foundItems.stream().map(AuctionAPI.getInstance()::convertToBase64).collect(Collectors.toList()));
|
||||
AuctionHouse.getInstance().getData().save();
|
||||
}
|
||||
|
||||
public void adjustItemsInFile(AuctionItem item, boolean add) {
|
||||
if (!AuctionHouse.getInstance().getData().contains("auction items") && add) {
|
||||
AuctionHouse.getInstance().getData().set("auction items", Collections.singletonList(AuctionAPI.getInstance().convertToBase64(item)));
|
||||
AuctionHouse.getInstance().getData().save();
|
||||
return;
|
||||
}
|
||||
|
||||
List<AuctionItem> items = AuctionHouse.getInstance().getData().getStringList("auction items").stream().map(AuctionAPI.getInstance()::convertBase64ToObject).map(object -> (AuctionItem) object).collect(Collectors.toList());
|
||||
if (items.stream().anyMatch(i -> i.getKey().equals(item.getKey())) || !add) {
|
||||
items.removeIf(i -> i.getKey().equals(item.getKey()));
|
||||
} else {
|
||||
items.add(item);
|
||||
}
|
||||
|
||||
AuctionHouse.getInstance().getData().set("auction items", items.stream().map(AuctionAPI.getInstance()::convertToBase64).collect(Collectors.toList()));
|
||||
AuctionHouse.getInstance().getData().save();
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package ca.tweetzy.auctionhouse.managers;
|
||||
|
||||
import ca.tweetzy.auctionhouse.AuctionHouse;
|
||||
import ca.tweetzy.auctionhouse.api.AuctionAPI;
|
||||
import ca.tweetzy.auctionhouse.settings.Settings;
|
||||
import ca.tweetzy.auctionhouse.transaction.Transaction;
|
||||
import ca.tweetzy.core.utils.TextUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
@ -39,17 +40,25 @@ public class TransactionManager {
|
||||
return Collections.unmodifiableList(this.transactions);
|
||||
}
|
||||
|
||||
public void loadTransactions() {
|
||||
if (AuctionHouse.getInstance().getData().contains("transactions") && AuctionHouse.getInstance().getData().isList("transactions")) {
|
||||
List<Transaction> transactions = AuctionHouse.getInstance().getData().getStringList("transactions").stream().map(AuctionAPI.getInstance()::convertBase64ToObject).map(object -> (Transaction) object).collect(Collectors.toList());
|
||||
long start = System.currentTimeMillis();
|
||||
transactions.forEach(this::addTransaction);
|
||||
AuctionHouse.getInstance().getLocale().newMessage(TextUtils.formatText(String.format("&aLoaded &2%d &atransaction(s) in &e%d&fms", transactions.size(), System.currentTimeMillis() - start))).sendPrefixedMessage(Bukkit.getConsoleSender());
|
||||
public void loadTransactions(boolean useDatabase) {
|
||||
if (useDatabase) {
|
||||
AuctionHouse.getInstance().getDataManager().getTransactions(all -> all.forEach(this::addTransaction));
|
||||
} else {
|
||||
if (AuctionHouse.getInstance().getData().contains("transactions") && AuctionHouse.getInstance().getData().isList("transactions")) {
|
||||
List<Transaction> transactions = AuctionHouse.getInstance().getData().getStringList("transactions").stream().map(AuctionAPI.getInstance()::convertBase64ToObject).map(object -> (Transaction) object).collect(Collectors.toList());
|
||||
long start = System.currentTimeMillis();
|
||||
transactions.forEach(this::addTransaction);
|
||||
AuctionHouse.getInstance().getLocale().newMessage(TextUtils.formatText(String.format("&aLoaded &2%d &atransaction(s) in &e%d&fms", transactions.size(), System.currentTimeMillis() - start))).sendPrefixedMessage(Bukkit.getConsoleSender());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void saveTransactions() {
|
||||
AuctionHouse.getInstance().getData().set("transactions", this.transactions.stream().map(AuctionAPI.getInstance()::convertToBase64).collect(Collectors.toList()));
|
||||
AuctionHouse.getInstance().getData().save();
|
||||
public void saveTransactions(boolean useDatabase, boolean async) {
|
||||
if (useDatabase) {
|
||||
AuctionHouse.getInstance().getDataManager().saveTransactions(getTransactions(), async);
|
||||
} else {
|
||||
AuctionHouse.getInstance().getData().set("transactions", this.transactions.stream().map(AuctionAPI.getInstance()::convertToBase64).collect(Collectors.toList()));
|
||||
AuctionHouse.getInstance().getData().save();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -42,6 +42,21 @@ public class Settings {
|
||||
public static final ConfigSetting RECORD_TRANSACTIONS = new ConfigSetting(config, "auction setting.record transactions", true, "Should every transaction be recorded (everything an auction is won or an item is bought)");
|
||||
public static final ConfigSetting BROADCAST_AUCTION_LIST = new ConfigSetting(config, "auction setting.broadcast auction list", false, "Should the entire server be alerted when a player lists an item?");
|
||||
public static final ConfigSetting PLAYER_NEEDS_TOTAL_PRICE_TO_BID = new ConfigSetting(config, "auction setting.bidder must have funds in account", false, "Should the player who is placing a bid on an item have the money in their account to cover the cost?");
|
||||
public static final ConfigSetting USE_ASYNC_GUI_REFRESH = new ConfigSetting(config, "auction setting.use async gui refresh", false, "Should the gui refresh be done using asynchronous tasks?", "This may reduce lag that can be caused, but", "items may have a flickering effect inside the gui.");
|
||||
public static final ConfigSetting AUTO_SAVE_ENABLED = new ConfigSetting(config, "auction setting.auto save.enabled", true, "Should the auto save task be enabled?");
|
||||
public static final ConfigSetting AUTO_SAVE_EVERY = new ConfigSetting(config, "auction setting.auto save.time", 900, "How often should the auto save active? (in seconds. Ex. 900 = 15min)");
|
||||
|
||||
/* ===============================
|
||||
* DATABASE OPTIONS
|
||||
* ===============================*/
|
||||
public static final ConfigSetting DATABASE_USE = new ConfigSetting(config, "database.use database", false, "Should the plugin use a database to store shop data?");
|
||||
public static final ConfigSetting DATABASE_HOST = new ConfigSetting(config, "database.host", "kiranhart.com", "What is the connection url/host");
|
||||
public static final ConfigSetting DATABASE_PORT = new ConfigSetting(config, "database.port", 3306, "What is the port to database (default is 3306)");
|
||||
public static final ConfigSetting DATABASE_NAME = new ConfigSetting(config, "database.name", "kiranhar_temporary", "What is the name of the database?");
|
||||
public static final ConfigSetting DATABASE_USERNAME = new ConfigSetting(config, "database.username", "kiranhar_temp", "What is the name of the user connecting?");
|
||||
public static final ConfigSetting DATABASE_PASSWORD = new ConfigSetting(config, "database.password", "Tw33tyHart1.", "What is the password to the user connecting?");
|
||||
public static final ConfigSetting DATABASE_USE_SSL = new ConfigSetting(config, "database.use ssl", true, "Should the database connection use ssl?");
|
||||
|
||||
|
||||
/* ===============================
|
||||
* DISCORD WEBHOOK
|
||||
|
@ -0,0 +1,33 @@
|
||||
package ca.tweetzy.auctionhouse.tasks;
|
||||
|
||||
import ca.tweetzy.auctionhouse.AuctionHouse;
|
||||
import ca.tweetzy.auctionhouse.settings.Settings;
|
||||
import ca.tweetzy.core.utils.TextUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
/**
|
||||
* The current file has been created by Kiran Hart
|
||||
* Date Created: April 15 2021
|
||||
* Time Created: 2:28 p.m.
|
||||
* Usage of any code found within this class is prohibited unless given explicit permission otherwise
|
||||
*/
|
||||
public class AutoSaveTask extends BukkitRunnable {
|
||||
|
||||
private static AutoSaveTask instance;
|
||||
|
||||
public static AutoSaveTask startTask() {
|
||||
if (instance == null) {
|
||||
instance = new AutoSaveTask();
|
||||
instance.runTaskTimerAsynchronously(AuctionHouse.getInstance(), 20 * 5, (long) 20 * Settings.AUTO_SAVE_EVERY.getInt());
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
AuctionHouse.getInstance().getAuctionItemManager().saveItems(Settings.DATABASE_USE.getBoolean(), true);
|
||||
AuctionHouse.getInstance().getTransactionManager().saveTransactions(Settings.DATABASE_USE.getBoolean(), true);
|
||||
AuctionHouse.getInstance().getLocale().newMessage(TextUtils.formatText("&aAuto saved auction items & transactions")).sendPrefixedMessage(Bukkit.getConsoleSender());
|
||||
}
|
||||
}
|
@ -26,6 +26,7 @@ permissions:
|
||||
auctionhouse.cmd.transactions: true
|
||||
auctionhouse.cmd.search: true
|
||||
auctionhouse.cmd.convert: true
|
||||
auctionhouse.cmd.upload: true
|
||||
auctionhouse.cmd:
|
||||
description: Allows the user to use /ah
|
||||
default: op
|
||||
@ -49,4 +50,7 @@ permissions:
|
||||
default: op
|
||||
auctionhouse.cmd.convert:
|
||||
description: Allows the user to run conversion command
|
||||
default: op
|
||||
auctionhouse.cmd.upload:
|
||||
description: Allows the user to run upload command
|
||||
default: op
|
Loading…
Reference in New Issue
Block a user