performance improvement: cache each OfflinePlayer for max 30 minutes Corpium/Corpium#201
This commit is contained in:
7 files changed
+41
-12
No files matched your search
+2
-2
@@ -1,4 +1,4 @@
|
||||
/target
|
||||
target/
|
||||
|
||||
.project
|
||||
.metadata
|
||||
@@ -16,4 +16,4 @@ local.properties
|
||||
*.iml
|
||||
.idea
|
||||
dependency-reduced-pom.xml
|
||||
desktop.ini
|
||||
desktop.ini
|
||||
@@ -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>
|
||||
|
||||
+19
@@ -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);
|
||||
}
|
||||
}
|
||||
+2
-1
@@ -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());
|
||||
}
|
||||
|
||||
+1
@@ -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;
|
||||
|
||||
|
||||
Reference in new issue
Block a user