PaperMC/patches/server/0138-Profile-Lookup-Events.patch

74 lines
3.5 KiB
Diff
Raw Normal View History

2021-06-11 14:02:28 +02:00
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Sat, 17 Jun 2017 17:00:32 -0400
Subject: [PATCH] Profile Lookup Events
Adds a Pre Lookup Event and a Post Lookup Event so that plugins may prefill in profile data, and cache the responses from
profiles that had to be looked up.
diff --git a/src/main/java/com/destroystokyo/paper/profile/PaperGameProfileRepository.java b/src/main/java/com/destroystokyo/paper/profile/PaperGameProfileRepository.java
2023-09-22 04:31:59 +02:00
index 7b9e797b42c88b17d6a7c590a423f4e85d99a59d..fd841c62c659a427dd08da5dbdf0e2e625391bc0 100644
2021-06-11 14:02:28 +02:00
--- a/src/main/java/com/destroystokyo/paper/profile/PaperGameProfileRepository.java
+++ b/src/main/java/com/destroystokyo/paper/profile/PaperGameProfileRepository.java
2023-09-22 04:31:59 +02:00
@@ -1,9 +1,14 @@
2021-06-11 14:02:28 +02:00
package com.destroystokyo.paper.profile;
+import com.destroystokyo.paper.event.profile.LookupProfileEvent;
+import com.destroystokyo.paper.event.profile.PreLookupProfileEvent;
+import com.google.common.collect.Sets;
import com.mojang.authlib.Environment;
+import com.mojang.authlib.GameProfile;
import com.mojang.authlib.ProfileLookupCallback;
import com.mojang.authlib.yggdrasil.YggdrasilGameProfileRepository;
2023-09-22 04:31:59 +02:00
import java.net.Proxy;
2021-06-11 14:02:28 +02:00
+import java.util.Set;
2023-09-22 04:31:59 +02:00
2021-06-11 14:02:28 +02:00
public class PaperGameProfileRepository extends YggdrasilGameProfileRepository {
2023-09-22 04:31:59 +02:00
public PaperGameProfileRepository(Proxy proxy, Environment environment) {
@@ -12,6 +17,44 @@ public class PaperGameProfileRepository extends YggdrasilGameProfileRepository {
2021-06-11 14:02:28 +02:00
@Override
2023-09-22 04:31:59 +02:00
public void findProfilesByNames(String[] names, ProfileLookupCallback callback) {
- super.findProfilesByNames(names, callback);
2021-06-11 14:02:28 +02:00
+ Set<String> unfoundNames = Sets.newHashSet();
+ for (String name : names) {
+ PreLookupProfileEvent event = new PreLookupProfileEvent(name);
+ event.callEvent();
+ if (event.getUUID() != null) {
+ // Plugin provided UUI, we can skip network call.
+ GameProfile gameprofile = new GameProfile(event.getUUID(), name);
+ // We might even have properties!
+ Set<ProfileProperty> profileProperties = event.getProfileProperties();
+ if (!profileProperties.isEmpty()) {
+ for (ProfileProperty property : profileProperties) {
+ gameprofile.getProperties().put(property.getName(), CraftPlayerProfile.asAuthlib(property));
+ }
+ }
+ callback.onProfileLookupSucceeded(gameprofile);
+ } else {
+ unfoundNames.add(name);
+ }
+ }
+
+ // Some things were not found.... Proceed to look up.
+ if (!unfoundNames.isEmpty()) {
+ String[] namesArr = unfoundNames.toArray(new String[unfoundNames.size()]);
2023-09-22 04:31:59 +02:00
+ super.findProfilesByNames(namesArr, new PreProfileLookupCallback(callback));
2021-06-11 14:02:28 +02:00
+ }
+ }
+
2023-09-22 04:31:59 +02:00
+ private record PreProfileLookupCallback(ProfileLookupCallback callback) implements ProfileLookupCallback {
2021-06-11 14:02:28 +02:00
+ @Override
+ public void onProfileLookupSucceeded(GameProfile gameProfile) {
+ PlayerProfile from = CraftPlayerProfile.asBukkitMirror(gameProfile);
+ new LookupProfileEvent(from).callEvent();
2023-09-22 04:31:59 +02:00
+ this.callback.onProfileLookupSucceeded(gameProfile);
2021-06-11 14:02:28 +02:00
+ }
+
+ @Override
2023-09-22 04:31:59 +02:00
+ public void onProfileLookupFailed(final String profileName, final Exception exception) {
+ this.callback.onProfileLookupFailed(profileName, exception);
2021-06-11 14:02:28 +02:00
+ }
}
}