Skip to content

Commit c2d7f13

Browse files
committed
fix(:ambulance:): Fixed duplicate item acquisition
1 parent 321d9be commit c2d7f13

File tree

3 files changed

+13
-23
lines changed

3 files changed

+13
-23
lines changed

bukkit/src/main/java/com/blank038/servermarket/dto/AbstractStorageHandler.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,14 @@
88
import org.bukkit.Bukkit;
99

1010
import java.util.HashMap;
11+
import java.util.Map;
1112
import java.util.UUID;
1213

1314
/**
1415
* @author Blank038
1516
*/
1617
public abstract class AbstractStorageHandler implements IStorageHandler {
17-
protected static final HashMap<UUID, PlayerCache> PLAYER_DATA_MAP = new HashMap<>();
18+
protected static final Map<UUID, PlayerCache> PLAYER_DATA_MAP = new HashMap<>();
1819

1920
protected final ServerMarket pluign = ServerMarket.getInstance();
2021

@@ -55,4 +56,8 @@ public void setLock(UUID uuid, boolean locked) {
5556
public boolean isLocked(UUID uuid) {
5657
return false;
5758
}
59+
60+
public void removePlyerData(UUID uuid) {
61+
PLAYER_DATA_MAP.entrySet().removeIf(entry -> entry.getKey().equals(uuid));
62+
}
5863
}

bukkit/src/main/java/com/blank038/servermarket/dto/impl/MysqlStorageHandlerImpl.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -240,12 +240,9 @@ public void save(String market, Map<String, SaleCache> map) {
240240
@Override
241241
public void removeTimeOutItem() {
242242
DataContainer.MARKET_DATA.forEach((k, v) -> {
243-
Iterator<Map.Entry<String, SaleCache>> iterator = this.getSaleItemsByMarket(k).entrySet().iterator();
244-
while (iterator.hasNext()) {
245-
Map.Entry<String, SaleCache> entry = iterator.next();
243+
for (Map.Entry<String, SaleCache> entry : this.getSaleItemsByMarket(k).entrySet()) {
246244
int second = (int) ((System.currentTimeMillis() - entry.getValue().getPostTime()) / 1000L);
247245
if (second >= v.getEffectiveTime()) {
248-
iterator.remove();
249246
UUID uuid = UUID.fromString(entry.getValue().getOwnerUUID());
250247
ServerMarket.getStorageHandler().removeSaleItem(k, entry.getKey()).ifPresent((sale) -> {
251248
ServerMarket.getStorageHandler().addItemToStore(uuid, sale.getSaleItem(), "timeout");
@@ -302,7 +299,7 @@ public void savePlayerData(PlayerCache playerCache, boolean removeCache) {
302299
}, "UPDATE " + playersTable + " SET data = ? WHERE player_uuid = ?;");
303300
}
304301
if (removeCache) {
305-
PLAYER_DATA_MAP.remove(playerCache.getOwnerUniqueId());
302+
this.removePlyerData(playerCache.getOwnerUniqueId());
306303
}
307304
}
308305

bukkit/src/main/java/com/blank038/servermarket/dto/impl/YamlStorageHandlerImpl.java

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import com.blank038.servermarket.internal.cache.other.SaleLog;
1111
import com.blank038.servermarket.internal.cache.player.PlayerCache;
1212
import com.blank038.servermarket.internal.cache.sale.SaleCache;
13-
import org.bukkit.Bukkit;
1413
import org.bukkit.configuration.ConfigurationSection;
1514
import org.bukkit.configuration.file.FileConfiguration;
1615
import org.bukkit.configuration.file.YamlConfiguration;
@@ -32,10 +31,6 @@ public class YamlStorageHandlerImpl extends AbstractStorageHandler {
3231
private static final Map<String, MarketCache> MARKET_STORAGE_DATA_MAP = new HashMap<>();
3332
private static final Map<String, ConfigurationSection> LOG_SECTION_MAP = new HashMap<>();
3433

35-
/*
36-
* self methods
37-
*/
38-
3934

4035
private void saveResults() {
4136
File resultFile = new File(this.pluign.getDataFolder(), "results.yml");
@@ -50,8 +45,7 @@ private void saveResults() {
5045
}
5146
}
5247

53-
54-
/*
48+
/**
5549
* AbstractStorageHandler methods
5650
*/
5751
private void saveLogs() {
@@ -210,13 +204,9 @@ public void removeTimeOutItem() {
210204
if (marketConfigData == null) {
211205
return;
212206
}
213-
// 开始计算
214-
Iterator<Map.Entry<String, SaleCache>> iterator = v.getSales().entrySet().iterator();
215-
while (iterator.hasNext()) {
216-
Map.Entry<String, SaleCache> entry = iterator.next();
207+
for (Map.Entry<String, SaleCache> entry : v.getSales().entrySet()) {
217208
int second = (int) ((System.currentTimeMillis() - entry.getValue().getPostTime()) / 1000L);
218-
if (second >= marketConfigData.getEffectiveTime()) {
219-
iterator.remove();
209+
if (second >= marketConfigData.getEffectiveTime() && this.removeSaleItem(k, entry.getValue().getSaleUUID()).isPresent()) {
220210
UUID uuid = UUID.fromString(entry.getValue().getOwnerUUID());
221211
ServerMarket.getStorageHandler().addItemToStore(uuid, entry.getValue().getSaleItem(), "timeout");
222212
}
@@ -227,9 +217,7 @@ public void removeTimeOutItem() {
227217
@Override
228218
public void saveAll() {
229219
this.saveAllPlayerData();
230-
for (Map.Entry<String, MarketCache> entry : MARKET_STORAGE_DATA_MAP.entrySet()) {
231-
this.save(entry.getKey(), entry.getValue().getSales());
232-
}
220+
MARKET_STORAGE_DATA_MAP.forEach((k, v) -> this.save(k, v.getSales()));
233221
this.saveResults();
234222
}
235223

@@ -248,7 +236,7 @@ public void savePlayerData(PlayerCache playerCache, boolean removeCache) {
248236
ServerMarket.getInstance().getLogger().log(Level.WARNING, e, () -> "cannot save player data: " + playerCache.getOwnerUniqueId().toString());
249237
}
250238
if (removeCache) {
251-
PLAYER_DATA_MAP.remove(playerCache.getOwnerUniqueId());
239+
this.removePlyerData(playerCache.getOwnerUniqueId());
252240
}
253241
}
254242

0 commit comments

Comments
 (0)