performance improvement: cache each OfflinePlayer for max 30 minutes Corpium/Corpium#201

This commit is contained in:
kikelkik committed 2025-01-24 16:15:01 +01:00
1 parent beebc540cc
commit 46bf338709
7 files changed
+41 -12

No files matched your search

+2 -2
View File
@@ -1,4 +1,4 @@
/target
target/
.project
.metadata
@@ -16,4 +16,4 @@ local.properties
*.iml
.idea
dependency-reduced-pom.xml
desktop.ini
desktop.ini
+6
View File
@@ -119,6 +119,12 @@
<version>3.0.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<!-- high-performance caching library -->
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>3.2.0</version>
</dependency>
<!--Project Modules-->
<dependency>
<groupId>net.alex9849.advancedregionmarket</groupId>
@@ -0,0 +1,19 @@
package net.alex9849.arm.adapters.util;
import com.github.benmanes.caffeine.cache.Caffeine;
import com.github.benmanes.caffeine.cache.LoadingCache;
import java.time.Duration;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
public class OfflinePlayerCache {
private static final LoadingCache<UUID, OfflinePlayer> cache = Caffeine.newBuilder()
.expireAfterAccess(Duration.ofMinutes(30))
.build(Bukkit::getOfflinePlayer);
public static OfflinePlayer get(UUID uuid) {
return cache.get(uuid);
}
}
@@ -1,6 +1,7 @@
package net.alex9849.arm.inactivityexpiration;
import net.alex9849.arm.AdvancedRegionMarket;
import net.alex9849.arm.adapters.util.OfflinePlayerCache;
import net.alex9849.arm.regions.Region;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
@@ -55,7 +56,7 @@ public class PlayerInactivityGroupMapper {
HashMap<UUID, InactivityExpirationGroup> resetUuidMap = newBestResetAfterMap.get(regionWorld);
HashMap<UUID, InactivityExpirationGroup> takeoverUuidMap = newBestTakeoverAfterMap.get(regionWorld);
if (resetUuidMap.get(owner) == null) {
OfflinePlayer oPlayerOwner = Bukkit.getOfflinePlayer(owner);
OfflinePlayer oPlayerOwner = OfflinePlayerCache.get(owner);
resetUuidMap.put(owner, InactivityExpirationGroup.getBestResetAfterMs(oPlayerOwner, regionWorld));
takeoverUuidMap.put(owner, InactivityExpirationGroup.getBestTakeOverAfterMs(oPlayerOwner, regionWorld));
}
@@ -5,6 +5,7 @@ import net.alex9849.arm.Messages;
import net.alex9849.arm.Permission;
import net.alex9849.arm.adapters.WGRegion;
import net.alex9849.arm.adapters.signs.SignData;
import net.alex9849.arm.adapters.util.OfflinePlayerCache;
import net.alex9849.arm.events.PreExtendEvent;
import net.alex9849.arm.exceptions.*;
import net.alex9849.arm.regions.price.Autoprice.AutoPrice;
@@ -74,7 +75,7 @@ public class ContractRegion extends CountdownRegion {
if (owner == null) {
this.extend();
} else {
OfflinePlayer oplayer = Bukkit.getOfflinePlayer(owner);
OfflinePlayer oplayer = OfflinePlayerCache.get(owner);
if (AdvancedRegionMarket.getInstance().getEcon().hasAccount(oplayer)) {
PreExtendEvent preExtendEvent = new PreExtendEvent(this);
Bukkit.getServer().getPluginManager().callEvent(preExtendEvent);
@@ -6,6 +6,7 @@ import net.alex9849.arm.Messages;
import net.alex9849.arm.Permission;
import net.alex9849.arm.adapters.WGRegion;
import net.alex9849.arm.adapters.signs.SignData;
import net.alex9849.arm.adapters.util.OfflinePlayerCache;
import net.alex9849.arm.adapters.util.Saveable;
import net.alex9849.arm.adapters.util.StringReplacer;
import net.alex9849.arm.adapters.util.TimeUtil;
@@ -687,7 +688,7 @@ public abstract class Region implements Saveable {
variableReplacements.put("%isinactivityreset%", () ->
Messages.convertYesNo(this.isInactivityReset()));
variableReplacements.put("%landlord%", () ->
Messages.getStringValue(this.getLandlord(), x -> Messages.getStringValue(Bukkit.getOfflinePlayer(x).getName(), y -> y, Messages.UNKNOWN_UUID), Messages.LANDLORD_SERVER));
Messages.getStringValue(this.getLandlord(), x -> Messages.getStringValue(OfflinePlayerCache.get(x).getName(), y -> y, Messages.UNKNOWN_UUID), Messages.LANDLORD_SERVER));
variableReplacements.put("%lastownerlogin%", () -> {
if (this.getLastLogin() == 0) {
return Messages.NEVER;
@@ -714,7 +715,7 @@ public abstract class Region implements Saveable {
Messages.getStringList(this.subregions, x -> x.getRegion().getId(), ", "));
variableReplacements.put("%members%", () ->
Messages.getStringList(this.getRegion().getMembers(), x ->
Messages.getStringValue(Bukkit.getOfflinePlayer(x).getName(), y -> y, Messages.UNKNOWN_UUID)
Messages.getStringValue(OfflinePlayerCache.get(x).getName(), y -> y, Messages.UNKNOWN_UUID)
, ", "));
variableReplacements.put("%takeoverin-date%", () ->
this.getTakeoverCountdown(true, false, false));
@@ -806,7 +807,7 @@ public abstract class Region implements Saveable {
return null;
}
if (this.ownerName == null || this.ownerUUID != ownerUUID) {
this.ownerName = Bukkit.getOfflinePlayer(ownerUUID).getName();
this.ownerName = OfflinePlayerCache.get(ownerUUID).getName();
}
return this.ownerName;
}
@@ -816,7 +817,7 @@ public abstract class Region implements Saveable {
if (landlordUUID == null) {
return;
}
OfflinePlayer subRegionOwner = Bukkit.getOfflinePlayer(landlordUUID);
OfflinePlayer subRegionOwner = OfflinePlayerCache.get(landlordUUID);
AdvancedRegionMarket.getInstance().getEcon().depositPlayer(subRegionOwner, amount);
}
@@ -1063,12 +1064,12 @@ public abstract class Region implements Saveable {
if (!noMoney && amount > 0 && owner != null) {
if (landlord != null) {
if (AdvancedRegionMarket.getInstance().getEcon().getBalance(Bukkit.getOfflinePlayer(landlord)) < amount) {
if (AdvancedRegionMarket.getInstance().getEcon().getBalance(OfflinePlayerCache.get(landlord)) < amount) {
throw new NotEnoughMoneyException(this.replaceVariables(Messages.SELLBACK_LANDLORD_NOT_ENOUGH_MONEY));
}
AdvancedRegionMarket.getInstance().getEcon().withdrawPlayer(Bukkit.getOfflinePlayer(landlord), amount);
AdvancedRegionMarket.getInstance().getEcon().withdrawPlayer(OfflinePlayerCache.get(landlord), amount);
}
AdvancedRegionMarket.getInstance().getEcon().depositPlayer(Bukkit.getOfflinePlayer(owner), amount);
AdvancedRegionMarket.getInstance().getEcon().depositPlayer(OfflinePlayerCache.get(owner), amount);
}
this.automaticResetRegion(ActionReason.USER_SELL, true);
@@ -1329,7 +1330,7 @@ public abstract class Region implements Saveable {
List<UUID> uuidList = this.getRegion().getMembers();
for (UUID uuids : uuidList) {
OfflinePlayer oplayer = Bukkit.getOfflinePlayer(uuids);
OfflinePlayer oplayer = OfflinePlayerCache.get(uuids);
if (oplayer != null && oplayer.getName().toLowerCase().startsWith(args)) {
returnme.add(oplayer.getName());
}
@@ -2,6 +2,7 @@ package net.alex9849.advancedregionmarket.placeholders.implementations;
import net.alex9849.advancedregionmarket.placeholders.AbstractOfflinePlayerPlaceholder;
import net.alex9849.arm.AdvancedRegionMarket;
import net.alex9849.arm.adapters.util.OfflinePlayerCache;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;