mirror of
https://github.com/kiranhart/Auction-House.git
synced 2024-11-30 06:43:40 +01:00
new Auction Statistic system properly stores data now after bin/auction sold/creation and money earned/spent events
Took 4 minutes
This commit is contained in:
parent
39177a1fbd
commit
fffea9121e
@ -89,6 +89,9 @@ public class AuctionHouse extends TweetyPlugin {
|
|||||||
@Getter
|
@Getter
|
||||||
private AuctionStatManager auctionStatManager;
|
private AuctionStatManager auctionStatManager;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private AuctionStatisticManager auctionStatisticManager;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private MinItemPriceManager minItemPriceManager;
|
private MinItemPriceManager minItemPriceManager;
|
||||||
|
|
||||||
@ -213,6 +216,9 @@ public class AuctionHouse extends TweetyPlugin {
|
|||||||
this.auctionStatManager = new AuctionStatManager();
|
this.auctionStatManager = new AuctionStatManager();
|
||||||
this.auctionStatManager.loadStats();
|
this.auctionStatManager.loadStats();
|
||||||
|
|
||||||
|
this.auctionStatisticManager = new AuctionStatisticManager();
|
||||||
|
this.auctionStatisticManager.loadStatistics();
|
||||||
|
|
||||||
// auction players
|
// auction players
|
||||||
this.auctionPlayerManager = new AuctionPlayerManager();
|
this.auctionPlayerManager = new AuctionPlayerManager();
|
||||||
this.auctionPlayerManager.loadPlayers();
|
this.auctionPlayerManager.loadPlayers();
|
||||||
|
@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
* Auction House
|
||||||
|
* Copyright 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.api.interfaces;
|
||||||
|
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
public interface Storeable<T> {
|
||||||
|
|
||||||
|
void store(Consumer<T> stored);
|
||||||
|
}
|
@ -392,9 +392,9 @@ public class DataManager extends DataManagerAbstract {
|
|||||||
|
|
||||||
public void insertStatistic(AuctionStatistic statistic, Callback<AuctionStatistic> callback) {
|
public void insertStatistic(AuctionStatistic statistic, Callback<AuctionStatistic> callback) {
|
||||||
this.thread.execute(() -> this.databaseConnector.connect(connection -> {
|
this.thread.execute(() -> this.databaseConnector.connect(connection -> {
|
||||||
try (PreparedStatement statement = connection.prepareStatement("INSERT INTO " + this.getTablePrefix() + "statistic (id, stat_owner, stat_type, value, time) VALUES (?, ?, ?, ?, ?)")) {
|
try (PreparedStatement statement = connection.prepareStatement("INSERT INTO " + this.getTablePrefix() + "statistic (uuid, stat_owner, stat_type, value, time) VALUES (?, ?, ?, ?, ?)")) {
|
||||||
|
|
||||||
PreparedStatement fetch = connection.prepareStatement("SELECT * FROM " + this.getTablePrefix() + "statistic WHERE id = ?");
|
PreparedStatement fetch = connection.prepareStatement("SELECT * FROM " + this.getTablePrefix() + "statistic WHERE uuid = ?");
|
||||||
|
|
||||||
fetch.setString(1, statistic.getId().toString());
|
fetch.setString(1, statistic.getId().toString());
|
||||||
statement.setString(1, statistic.getId().toString());
|
statement.setString(1, statistic.getId().toString());
|
||||||
@ -402,6 +402,7 @@ public class DataManager extends DataManagerAbstract {
|
|||||||
statement.setString(3, statistic.getStatisticType().name());
|
statement.setString(3, statistic.getStatisticType().name());
|
||||||
statement.setDouble(4, statistic.getValue());
|
statement.setDouble(4, statistic.getValue());
|
||||||
statement.setLong(5, statistic.getTime());
|
statement.setLong(5, statistic.getTime());
|
||||||
|
statement.executeUpdate();
|
||||||
|
|
||||||
if (callback != null) {
|
if (callback != null) {
|
||||||
ResultSet res = fetch.executeQuery();
|
ResultSet res = fetch.executeQuery();
|
||||||
|
@ -23,7 +23,7 @@ public class _16_StatisticVersionTwoMigration extends DataMigration {
|
|||||||
|
|
||||||
try (Statement statement = connection.createStatement()) {
|
try (Statement statement = connection.createStatement()) {
|
||||||
statement.execute("CREATE TABLE " + tablePrefix + "statistic (" +
|
statement.execute("CREATE TABLE " + tablePrefix + "statistic (" +
|
||||||
"id VARCHAR(36) PRIMARY KEY, " +
|
"uuid VARCHAR(36) PRIMARY KEY, " +
|
||||||
"stat_owner VARCHAR(36) NOT NULL, " +
|
"stat_owner VARCHAR(36) NOT NULL, " +
|
||||||
"stat_type VARCHAR(20) NOT NULL, " +
|
"stat_type VARCHAR(20) NOT NULL, " +
|
||||||
"value DOUBLE NOT NULL, " +
|
"value DOUBLE NOT NULL, " +
|
||||||
|
@ -6,8 +6,9 @@ import ca.tweetzy.auctionhouse.api.events.AuctionAdminEvent;
|
|||||||
import ca.tweetzy.auctionhouse.api.events.AuctionBidEvent;
|
import ca.tweetzy.auctionhouse.api.events.AuctionBidEvent;
|
||||||
import ca.tweetzy.auctionhouse.api.events.AuctionEndEvent;
|
import ca.tweetzy.auctionhouse.api.events.AuctionEndEvent;
|
||||||
import ca.tweetzy.auctionhouse.api.events.AuctionStartEvent;
|
import ca.tweetzy.auctionhouse.api.events.AuctionStartEvent;
|
||||||
import ca.tweetzy.auctionhouse.auction.AuctionStat;
|
import ca.tweetzy.auctionhouse.auction.AuctionStatistic;
|
||||||
import ca.tweetzy.auctionhouse.auction.enums.AuctionSaleType;
|
import ca.tweetzy.auctionhouse.auction.enums.AuctionSaleType;
|
||||||
|
import ca.tweetzy.auctionhouse.auction.enums.AuctionStatisticType;
|
||||||
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 org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
@ -25,9 +26,14 @@ public class AuctionListeners implements Listener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onAuctionStart(AuctionStartEvent e) {
|
public void onAuctionStart(AuctionStartEvent e) {
|
||||||
AuctionHouse.getInstance().getAuctionStatManager().insertOrUpdate(e.getSeller(), new AuctionStat<>(
|
|
||||||
1, 0, 0, 0D, 0D
|
// legacy stat stuff
|
||||||
));
|
// AuctionHouse.getInstance().getAuctionStatManager().insertOrUpdate(e.getSeller(), new AuctionStat<>(
|
||||||
|
// 1, 0, 0, 0D, 0D
|
||||||
|
// ));
|
||||||
|
|
||||||
|
// new stat system
|
||||||
|
new AuctionStatistic(e.getSeller().getUniqueId(), e.getAuctionItem().isBidItem() ? AuctionStatisticType.CREATED_AUCTION : AuctionStatisticType.CREATED_BIN, 1).store(null);
|
||||||
|
|
||||||
if (Settings.DISCORD_ENABLED.getBoolean() && Settings.DISCORD_ALERT_ON_AUCTION_START.getBoolean()) {
|
if (Settings.DISCORD_ENABLED.getBoolean() && Settings.DISCORD_ALERT_ON_AUCTION_START.getBoolean()) {
|
||||||
AuctionHouse.newChain().async(() -> {
|
AuctionHouse.newChain().async(() -> {
|
||||||
@ -48,21 +54,29 @@ public class AuctionListeners implements Listener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onAuctionEnd(AuctionEndEvent e) {
|
public void onAuctionEnd(AuctionEndEvent e) {
|
||||||
AuctionHouse.getInstance().getAuctionStatManager().insertOrUpdate(e.getOriginalOwner(), new AuctionStat<>(
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
e.getSaleType() == AuctionSaleType.USED_BIDDING_SYSTEM ? e.getAuctionItem().getCurrentPrice() : e.getAuctionItem().getBasePrice(),
|
|
||||||
0D
|
|
||||||
));
|
|
||||||
|
|
||||||
AuctionHouse.getInstance().getAuctionStatManager().insertOrUpdate(e.getBuyer(), new AuctionStat<>(
|
// legacy stat system
|
||||||
0,
|
// AuctionHouse.getInstance().getAuctionStatManager().insertOrUpdate(e.getOriginalOwner(), new AuctionStat<>(
|
||||||
0,
|
// 0,
|
||||||
0,
|
// 1,
|
||||||
0D,
|
// 0,
|
||||||
e.getSaleType() == AuctionSaleType.USED_BIDDING_SYSTEM ? e.getAuctionItem().getCurrentPrice() : e.getAuctionItem().getBasePrice()
|
// e.getSaleType() == AuctionSaleType.USED_BIDDING_SYSTEM ? e.getAuctionItem().getCurrentPrice() : e.getAuctionItem().getBasePrice(),
|
||||||
));
|
// 0D
|
||||||
|
// ));
|
||||||
|
|
||||||
|
// legacy stat system
|
||||||
|
// AuctionHouse.getInstance().getAuctionStatManager().insertOrUpdate(e.getBuyer(), new AuctionStat<>(
|
||||||
|
// 0,
|
||||||
|
// 0,
|
||||||
|
// 0,
|
||||||
|
// 0D,
|
||||||
|
// e.getSaleType() == AuctionSaleType.USED_BIDDING_SYSTEM ? e.getAuctionItem().getCurrentPrice() : e.getAuctionItem().getBasePrice()
|
||||||
|
// ));
|
||||||
|
|
||||||
|
// new stat system
|
||||||
|
new AuctionStatistic(e.getOriginalOwner().getUniqueId(), e.getAuctionItem().isBidItem() ? AuctionStatisticType.SOLD_AUCTION : AuctionStatisticType.SOLD_BIN, 1).store(null);
|
||||||
|
new AuctionStatistic(e.getOriginalOwner().getUniqueId(), AuctionStatisticType.MONEY_EARNED, e.getSaleType() == AuctionSaleType.USED_BIDDING_SYSTEM ? e.getAuctionItem().getCurrentPrice() : e.getAuctionItem().getBasePrice()).store(null);
|
||||||
|
new AuctionStatistic(e.getBuyer().getUniqueId(), AuctionStatisticType.MONEY_SPENT, e.getSaleType() == AuctionSaleType.USED_BIDDING_SYSTEM ? e.getAuctionItem().getCurrentPrice() : e.getAuctionItem().getBasePrice()).store(null);
|
||||||
|
|
||||||
AuctionHouse.newChain().async(() -> {
|
AuctionHouse.newChain().async(() -> {
|
||||||
if (Settings.RECORD_TRANSACTIONS.getBoolean()) {
|
if (Settings.RECORD_TRANSACTIONS.getBoolean()) {
|
||||||
|
@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* Auction House
|
||||||
|
* Copyright 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.managers;
|
||||||
|
|
||||||
|
import ca.tweetzy.auctionhouse.AuctionHouse;
|
||||||
|
import ca.tweetzy.auctionhouse.auction.AuctionStatistic;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public final class AuctionStatisticManager {
|
||||||
|
|
||||||
|
private final List<AuctionStatistic> statistics = Collections.synchronizedList(new ArrayList<>());
|
||||||
|
|
||||||
|
public void addStatistic(AuctionStatistic statistic) {
|
||||||
|
synchronized (this.statistics) {
|
||||||
|
if (this.statistics.contains(statistic)) return;
|
||||||
|
this.statistics.add(statistic);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addStatistics(List<AuctionStatistic> statisticsList) {
|
||||||
|
synchronized (this.statistics) {
|
||||||
|
statisticsList.forEach(this::addStatistic);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<AuctionStatistic> getStatistics() {
|
||||||
|
synchronized (this.statistics) {
|
||||||
|
return this.statistics;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadStatistics() {
|
||||||
|
AuctionHouse.getInstance().getDataManager().getStatistics((error, all) -> {
|
||||||
|
if (error == null)
|
||||||
|
all.forEach(this::addStatistic);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,8 @@
|
|||||||
import ca.tweetzy.auctionhouse.api.AuctionAPI;
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The current file has been created by Kiran Hart
|
* The current file has been created by Kiran Hart
|
||||||
@ -9,33 +13,23 @@ import ca.tweetzy.auctionhouse.api.AuctionAPI;
|
|||||||
public class Test {
|
public class Test {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
// System.out.println(TimeUtils.makeReadable(getSecondsFromString("2y")*1000));
|
|
||||||
// List<String> enchants = new ArrayList<>();
|
|
||||||
// enchants.add("Sharpness V");
|
|
||||||
// enchants.add("Sharpness I");
|
|
||||||
// enchants.add("Fire Aspect IV");
|
|
||||||
|
|
||||||
// System.out.println(StringUtils.join(enchants, ";=;"));
|
final List<TestObject> list = new ArrayList<>();
|
||||||
|
|
||||||
// final String uIDPartOne = "%%__US";
|
list.add(new TestObject(1, "Kiran"));
|
||||||
// final String uIDPartTwo = "ER__%%";
|
list.add(new TestObject(2, "Carl"));
|
||||||
//
|
list.add(new TestObject(3, "Orlando"));
|
||||||
// final String UID = "%%__USER_%%";
|
|
||||||
|
|
||||||
// System.out.println(UID.contains(uIDPartOne) && UID.contains(uIDPartTwo));
|
System.out.println(list.size());
|
||||||
|
}
|
||||||
|
|
||||||
// System.out.println(AuctionAPI.toTicks("1 day"));
|
@AllArgsConstructor
|
||||||
|
@Getter
|
||||||
|
static class TestObject {
|
||||||
|
|
||||||
// String arguments = "3d";
|
private final int id;
|
||||||
//
|
private final String name;
|
||||||
// System.out.println(getSecondsFromString(arguments));
|
|
||||||
|
|
||||||
// long future = System.currentTimeMillis() + 1000L * 10;
|
|
||||||
|
|
||||||
// System.out.println("16".compareTo(System.getProperty("java.version")) <= 0);
|
|
||||||
|
|
||||||
// final double max = 99999999999999999999999999999.0D;
|
|
||||||
System.out.println(AuctionAPI.getInstance().getFriendlyNumber(0));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static long getSecondsFromString(String time) {
|
public static long getSecondsFromString(String time) {
|
||||||
|
Loading…
Reference in New Issue
Block a user