Caches result of getOfflinePlayer in PortalOwner

This commit is contained in:
2024-04-21 15:31:13 +02:00
parent 29bae9d793
commit 484d4f4cf1

View File

@@ -3,10 +3,11 @@ package net.knarcraft.stargate.portal.property;
import net.knarcraft.stargate.Stargate; import net.knarcraft.stargate.Stargate;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID; import java.util.UUID;
/** /**
@@ -14,6 +15,7 @@ import java.util.UUID;
*/ */
public class PortalOwner { public class PortalOwner {
private static final Map<String, OfflinePlayer> fetchedPlayers = new HashMap<>();
private UUID ownerUUID; private UUID ownerUUID;
private String ownerName; private String ownerName;
@@ -23,7 +25,13 @@ public class PortalOwner {
* @param ownerIdentifier <p>A UUID, or a username for legacy support</p> * @param ownerIdentifier <p>A UUID, or a username for legacy support</p>
*/ */
public PortalOwner(@NotNull String ownerIdentifier) { public PortalOwner(@NotNull String ownerIdentifier) {
parseIdentifier(ownerIdentifier); if (fetchedPlayers.containsKey(ownerIdentifier)) {
OfflinePlayer player = fetchedPlayers.get(ownerIdentifier);
this.ownerUUID = player.getUniqueId();
this.ownerName = player.getName();
} else {
parseIdentifier(ownerIdentifier);
}
} }
/** /**
@@ -31,7 +39,7 @@ public class PortalOwner {
* *
* @param player <p>The player which is the owner of the portal</p> * @param player <p>The player which is the owner of the portal</p>
*/ */
public PortalOwner(@NotNull Player player) { public PortalOwner(@NotNull OfflinePlayer player) {
this.ownerUUID = player.getUniqueId(); this.ownerUUID = player.getUniqueId();
this.ownerName = player.getName(); this.ownerName = player.getName();
} }
@@ -106,6 +114,7 @@ public class PortalOwner {
try { try {
ownerUUID = UUID.fromString(ownerIdentifier); ownerUUID = UUID.fromString(ownerIdentifier);
OfflinePlayer offlineOwner = Bukkit.getServer().getOfflinePlayer(ownerUUID); OfflinePlayer offlineOwner = Bukkit.getServer().getOfflinePlayer(ownerUUID);
fetchedPlayers.put(ownerIdentifier, offlineOwner);
ownerName = offlineOwner.getName(); ownerName = offlineOwner.getName();
} catch (IllegalArgumentException exception) { } catch (IllegalArgumentException exception) {
//Invalid as UUID and username, so just keep it as owner name and hope the server owner fixes it //Invalid as UUID and username, so just keep it as owner name and hope the server owner fixes it