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