mirror of
https://github.com/kiranhart/Auction-House.git
synced 2025-03-12 13:19:20 +01:00
2.18.3 -> moved main auction lists over to concurrent hashmaps instead.
This commit is contained in:
parent
efaf934499
commit
d12b1ece28
2
pom.xml
2
pom.xml
@ -6,7 +6,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>ca.tweetzy</groupId>
|
||||
<artifactId>auctionhouse</artifactId>
|
||||
<version>2.18.2</version>
|
||||
<version>2.18.3</version>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
|
@ -35,7 +35,7 @@ public class AuctionPlayer {
|
||||
}
|
||||
|
||||
public List<AuctionItem> getItems(boolean getExpired) {
|
||||
return AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems().stream().filter(item -> item.getOwner().equals(this.player.getUniqueId()) && !AuctionHouse.getInstance().getAuctionItemManager().getGarbageBin().contains(item) && item.isExpired() == getExpired).collect(Collectors.toList());
|
||||
return AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems().values().stream().filter(item -> item.getOwner().equals(this.player.getUniqueId()) && !AuctionHouse.getInstance().getAuctionItemManager().getGarbageBin().contains(item) && item.isExpired() == getExpired).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public void resetFilter() {
|
||||
|
@ -2,19 +2,15 @@ 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.helpers.MaterialCategorizer;
|
||||
import ca.tweetzy.auctionhouse.settings.Settings;
|
||||
import ca.tweetzy.core.commands.AbstractCommand;
|
||||
import ca.tweetzy.core.compatibility.XMaterial;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* The current file has been created by Kiran Hart
|
||||
@ -34,15 +30,19 @@ public class CommandAdmin extends AbstractCommand {
|
||||
|
||||
switch (args[0].toLowerCase()) {
|
||||
case "endall":
|
||||
AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems().forEach(item -> item.setExpired(true));
|
||||
for (UUID id : AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems().keySet()) {
|
||||
AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems().get(id).setExpired(true);
|
||||
}
|
||||
AuctionHouse.getInstance().getLocale().getMessage("general.endedallauctions").sendPrefixedMessage(sender);
|
||||
break;
|
||||
case "relistall":
|
||||
int relistTime = args.length == 1 ? Settings.DEFAULT_AUCTION_TIME.getInt() : Integer.parseInt(args[1]);
|
||||
AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems().stream().filter(AuctionItem::isExpired).forEach(item -> {
|
||||
item.setRemainingTime(relistTime);
|
||||
item.setExpired(false);
|
||||
});
|
||||
for (UUID id : AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems().keySet()) {
|
||||
if (AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems().get(id).isExpired()) {
|
||||
AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems().get(id).setRemainingTime(relistTime);
|
||||
AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems().get(id).setExpired(false);
|
||||
}
|
||||
}
|
||||
AuctionHouse.getInstance().getLocale().getMessage("general.relisteditems").sendPrefixedMessage(sender);
|
||||
break;
|
||||
case "cleanunknownusers":
|
||||
@ -54,11 +54,12 @@ public class CommandAdmin extends AbstractCommand {
|
||||
AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems().clear();
|
||||
case "clean":
|
||||
// Don't tell ppl that this exists
|
||||
AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems().forEach(item -> {
|
||||
if (AuctionAPI.getInstance().deserializeItem(item.getRawItem()) == null || XMaterial.isAir(XMaterial.matchXMaterial(AuctionAPI.getInstance().deserializeItem(item.getRawItem())))) {
|
||||
AuctionHouse.getInstance().getAuctionItemManager().sendToGarbage(item);
|
||||
for (UUID id : AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems().keySet()) {
|
||||
ItemStack deserialize = AuctionAPI.getInstance().deserializeItem(AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems().get(id).getRawItem());
|
||||
if (deserialize == null || XMaterial.isAir(XMaterial.matchXMaterial(deserialize))) {
|
||||
AuctionHouse.getInstance().getAuctionItemManager().sendToGarbage(AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems().get(id));
|
||||
}
|
||||
});
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -23,11 +23,10 @@ public class CommandStatus extends AbstractCommand {
|
||||
@Override
|
||||
protected ReturnType runCommand(CommandSender sender, String... args) {
|
||||
AuctionHouse.newChain().async(() -> {
|
||||
List<AuctionItem> items = AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems();
|
||||
|
||||
int totalItems = items.size();
|
||||
int activeItems = (int) items.stream().filter(item -> !item.isExpired()).count();
|
||||
int expiredItems = (int) items.stream().filter(AuctionItem::isExpired).count();
|
||||
int totalItems = AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems().size();
|
||||
int activeItems = (int) AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems().values().stream().filter(item -> !item.isExpired()).count();
|
||||
int expiredItems = (int) AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems().values().stream().filter(AuctionItem::isExpired).count();
|
||||
int totalTransactions = AuctionHouse.getInstance().getTransactionManager().getTransactions().size();
|
||||
|
||||
sender.sendMessage(TextUtils.formatText("&eAuction House Statistics"));
|
||||
|
@ -9,6 +9,7 @@ import ca.tweetzy.core.commands.AbstractCommand;
|
||||
import ca.tweetzy.core.utils.TextUtils;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -45,7 +46,7 @@ public class CommandUpload extends AbstractCommand {
|
||||
AuctionHouse.getInstance().getData().set("transactions", null);
|
||||
AuctionHouse.getInstance().getData().save();
|
||||
|
||||
AuctionHouse.getInstance().getDataManager().saveItems(AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems(), true);
|
||||
AuctionHouse.getInstance().getDataManager().saveItems(new ArrayList<>(AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems().values()), 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);
|
||||
|
@ -69,7 +69,17 @@ public class GUIAuctionHouse extends Gui {
|
||||
|
||||
private void drawItems() {
|
||||
AuctionHouse.newChain().asyncFirst(() -> {
|
||||
this.items = new ArrayList<>(AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems()).stream().filter(item -> !item.isExpired() && item.getRemainingTime() >= 1 && !AuctionHouse.getInstance().getAuctionItemManager().getGarbageBin().contains(item)).collect(Collectors.toList());
|
||||
// this.items = new ArrayList<>(AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems()).stream().filter(item -> !item.isExpired() && item.getRemainingTime() >= 1 && !AuctionHouse.getInstance().getAuctionItemManager().getGarbageBin().contains(item)).collect(Collectors.toList());
|
||||
this.items = new ArrayList<>();
|
||||
|
||||
for (Map.Entry<UUID, AuctionItem> entry : AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems().entrySet()) {
|
||||
AuctionItem auctionItem = entry.getValue();
|
||||
if (!auctionItem.isExpired() && auctionItem.getRemainingTime() >= 1 && !AuctionHouse.getInstance().getAuctionItemManager().getGarbageBin().containsKey(auctionItem.getKey())) {
|
||||
this.items.add(auctionItem);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (this.searchPhrase != null && this.searchPhrase.length() != 0) {
|
||||
this.items = this.items.stream().filter(item -> checkSearchCriteria(this.searchPhrase, item)).collect(Collectors.toList());
|
||||
}
|
||||
|
@ -84,7 +84,8 @@ public class GUIConfirmPurchase extends Gui {
|
||||
// Re-select the item to ensure that it's available
|
||||
try {
|
||||
// if the item is in the garbage then just don't continue
|
||||
if (AuctionHouse.getInstance().getAuctionItemManager().getGarbageBin().stream().anyMatch(items -> items.getKey().equals(this.auctionItem.getKey()))) return;
|
||||
if (AuctionHouse.getInstance().getAuctionItemManager().getGarbageBin().containsKey(this.auctionItem.getKey()))
|
||||
return;
|
||||
AuctionItem located = AuctionHouse.getInstance().getAuctionItemManager().getItem(this.auctionItem.getKey());
|
||||
preItemChecks(e, located);
|
||||
|
||||
@ -138,6 +139,7 @@ public class GUIConfirmPurchase extends Gui {
|
||||
AuctionHouse.getInstance().getTransactionManager().removeAllRelatedPlayers(auctionItem.getKey());
|
||||
player.closeInventory();
|
||||
});
|
||||
e.gui.close();
|
||||
} catch (ItemNotFoundException exception) {
|
||||
AuctionHouse.getInstance().getLogger().info("Tried to purchase item that was bought, or does not exist");
|
||||
}
|
||||
|
@ -8,6 +8,7 @@ import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@ -19,35 +20,34 @@ import java.util.stream.Collectors;
|
||||
|
||||
public class AuctionItemManager {
|
||||
|
||||
private final ArrayList<AuctionItem> auctionItems = new ArrayList<>();
|
||||
private final Set<AuctionItem> garbageBin = new HashSet<>();
|
||||
private final ConcurrentHashMap<UUID, AuctionItem> auctionItems = new ConcurrentHashMap<>();
|
||||
private final ConcurrentHashMap<UUID, AuctionItem> garbageBin = new ConcurrentHashMap<>();
|
||||
|
||||
public void addItem(AuctionItem auctionItem) {
|
||||
if (auctionItem == null) return;
|
||||
this.auctionItems.add(auctionItem);
|
||||
this.auctionItems.put(auctionItem.getKey(), auctionItem);
|
||||
}
|
||||
|
||||
public void sendToGarbage(AuctionItem auctionItem) {
|
||||
if (auctionItem == null) return;
|
||||
this.garbageBin.add(auctionItem);
|
||||
this.garbageBin.put(auctionItem.getKey(), auctionItem);
|
||||
}
|
||||
|
||||
public void removeUnknownOwnerItems() {
|
||||
List<UUID> knownOfflinePlayers = Arrays.stream(Bukkit.getOfflinePlayers()).map(OfflinePlayer::getUniqueId).collect(Collectors.toList());
|
||||
this.auctionItems.removeIf(item -> !knownOfflinePlayers.contains(item.getOwner()));
|
||||
this.auctionItems.keySet().removeIf(id -> !knownOfflinePlayers.contains(id));
|
||||
}
|
||||
|
||||
public AuctionItem getItem(UUID uuid) {
|
||||
return this.auctionItems.stream().filter(item -> item.getKey().equals(uuid)).findFirst().orElse(null);
|
||||
return this.auctionItems.getOrDefault(uuid, null);
|
||||
}
|
||||
|
||||
public List<AuctionItem> getAuctionItems() {
|
||||
public ConcurrentHashMap<UUID, AuctionItem> getAuctionItems() {
|
||||
return this.auctionItems;
|
||||
}
|
||||
|
||||
|
||||
public Set<AuctionItem> getGarbageBin() {
|
||||
return garbageBin;
|
||||
public ConcurrentHashMap<UUID, AuctionItem> getGarbageBin() {
|
||||
return this.garbageBin;
|
||||
}
|
||||
|
||||
public void loadItems(boolean useDatabase) {
|
||||
@ -67,9 +67,9 @@ public class AuctionItemManager {
|
||||
|
||||
public void saveItems(boolean useDatabase, boolean async) {
|
||||
if (useDatabase) {
|
||||
AuctionHouse.getInstance().getDataManager().saveItems(getAuctionItems(), async);
|
||||
AuctionHouse.getInstance().getDataManager().saveItems(new ArrayList<>(this.getAuctionItems().values()), async);
|
||||
} else {
|
||||
this.adjustItemsInFile(this.getAuctionItems());
|
||||
this.adjustItemsInFile(new ArrayList<>(this.getAuctionItems().values()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6,6 +6,7 @@ import lombok.Getter;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
* The current file has been created by Kiran Hart
|
||||
@ -17,14 +18,13 @@ import java.util.*;
|
||||
@Getter
|
||||
public class AuctionPlayerManager {
|
||||
|
||||
private final ArrayList<AuctionPlayer> auctionPlayers = new ArrayList<>();
|
||||
private final ConcurrentHashMap<UUID, AuctionPlayer> auctionPlayers = new ConcurrentHashMap<>();
|
||||
private final HashMap<UUID, ItemStack> sellHolding = new HashMap<>();
|
||||
private final HashMap<UUID, Long> cooldowns = new HashMap<>();
|
||||
|
||||
public void addPlayer(AuctionPlayer auctionPlayer) {
|
||||
if (auctionPlayer == null) return;
|
||||
if (this.auctionPlayers.stream().anyMatch(player -> player.getPlayer().getUniqueId().equals(auctionPlayer.getPlayer().getUniqueId()))) return;
|
||||
this.auctionPlayers.add(auctionPlayer);
|
||||
this.auctionPlayers.put(auctionPlayer.getPlayer().getUniqueId(), auctionPlayer);
|
||||
}
|
||||
|
||||
public void addItemToSellHolding(UUID uuid, ItemStack itemStack) {
|
||||
@ -37,15 +37,15 @@ public class AuctionPlayerManager {
|
||||
}
|
||||
|
||||
public void removePlayer(UUID uuid) {
|
||||
this.auctionPlayers.removeIf(player -> player.getPlayer().getUniqueId().equals(uuid));
|
||||
this.auctionPlayers.remove(uuid);
|
||||
}
|
||||
|
||||
public AuctionPlayer getPlayer(UUID uuid) {
|
||||
return this.auctionPlayers.stream().filter(item -> item.getPlayer().getUniqueId().equals(uuid)).findFirst().orElse(null);
|
||||
return this.auctionPlayers.getOrDefault(uuid, null);
|
||||
}
|
||||
|
||||
public List<AuctionPlayer> getAuctionPlayers() {
|
||||
return Collections.unmodifiableList(auctionPlayers);
|
||||
public ConcurrentHashMap<UUID, AuctionPlayer> getAuctionPlayers() {
|
||||
return this.auctionPlayers;
|
||||
}
|
||||
|
||||
public void addCooldown(UUID uuid) {
|
||||
|
@ -13,6 +13,9 @@ import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* The current file has been created by Kiran Hart
|
||||
@ -36,14 +39,15 @@ public class TickAuctionsTask extends BukkitRunnable {
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
// check if the auction stack even has items
|
||||
Iterator<AuctionItem> auctionItemIterator = AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems().listIterator();
|
||||
Set<Map.Entry<UUID, AuctionItem>> entrySet = AuctionHouse.getInstance().getAuctionItemManager().getAuctionItems().entrySet();
|
||||
Iterator<Map.Entry<UUID, AuctionItem>> auctionItemIterator = entrySet.iterator();
|
||||
|
||||
while (auctionItemIterator.hasNext()) {
|
||||
AuctionItem auctionItem = auctionItemIterator.next();
|
||||
Map.Entry<UUID, AuctionItem> entry = auctionItemIterator.next();
|
||||
AuctionItem auctionItem = entry.getValue();
|
||||
|
||||
if (AuctionHouse.getInstance().getAuctionItemManager().getGarbageBin().contains(auctionItem)) {
|
||||
AuctionHouse.getInstance().getAuctionItemManager().getGarbageBin().remove(auctionItem);
|
||||
if (AuctionHouse.getInstance().getAuctionItemManager().getGarbageBin().containsKey(auctionItem.getKey())) {
|
||||
AuctionHouse.getInstance().getAuctionItemManager().getGarbageBin().remove(auctionItem.getKey());
|
||||
auctionItemIterator.remove();
|
||||
continue;
|
||||
}
|
||||
@ -83,6 +87,7 @@ public class TickAuctionsTask extends BukkitRunnable {
|
||||
}
|
||||
|
||||
if (auctionWinner.isOnline()) {
|
||||
assert auctionWinner.getPlayer() != null;
|
||||
AuctionHouse.getInstance().getLocale().getMessage("auction.bidwon")
|
||||
.processPlaceholder("item", WordUtils.capitalizeFully(AuctionAPI.getInstance().deserializeItem(auctionItem.getRawItem()).getType().name().replace("_", " ")))
|
||||
.processPlaceholder("amount", AuctionAPI.getInstance().deserializeItem(auctionItem.getRawItem()).getAmount())
|
||||
|
Loading…
Reference in New Issue
Block a user