105 lines
5.2 KiB
Diff
105 lines
5.2 KiB
Diff
From ab9a259b3a06cfb7d65b6a3e246eb3c732765814 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Tue, 2 Jan 2018 00:31:26 -0500
|
|
Subject: [PATCH] Fill Profile Property Events
|
|
|
|
Allows plugins to populate profile properties from local sources to avoid calls out to Mojang API
|
|
to fill in textures for example.
|
|
|
|
If Mojang API does need to be hit, event fire so you can get the results.
|
|
|
|
This is useful for implementing a ProfileCache for Player Skulls
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/profile/WrappedMinecraftSessionService.java b/src/main/java/com/destroystokyo/paper/profile/WrappedMinecraftSessionService.java
|
|
new file mode 100644
|
|
index 000000000..9914f98c2
|
|
--- /dev/null
|
|
+++ b/src/main/java/com/destroystokyo/paper/profile/WrappedMinecraftSessionService.java
|
|
@@ -0,0 +1,71 @@
|
|
+/*
|
|
+ * Copyright (c) 2018 Daniel Ennis (Aikar) MIT License
|
|
+ *
|
|
+ * Permission is hereby granted, free of charge, to any person obtaining
|
|
+ * a copy of this software and associated documentation files (the
|
|
+ * "Software"), to deal in the Software without restriction, including
|
|
+ * without limitation the rights to use, copy, modify, merge, publish,
|
|
+ * distribute, sublicense, and/or sell copies of the Software, and to
|
|
+ * permit persons to whom the Software is furnished to do so, subject to
|
|
+ * the following conditions:
|
|
+ *
|
|
+ * The above copyright notice and this permission notice shall be
|
|
+ * included in all copies or substantial portions of the Software.
|
|
+ *
|
|
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
+ */
|
|
+
|
|
+package com.destroystokyo.paper.profile;
|
|
+
|
|
+import com.destroystokyo.paper.event.profile.FillProfileEvent;
|
|
+import com.destroystokyo.paper.event.profile.PreFillProfileEvent;
|
|
+import com.mojang.authlib.GameProfile;
|
|
+import com.mojang.authlib.exceptions.AuthenticationException;
|
|
+import com.mojang.authlib.exceptions.AuthenticationUnavailableException;
|
|
+import com.mojang.authlib.minecraft.MinecraftProfileTexture;
|
|
+import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type;
|
|
+import com.mojang.authlib.minecraft.MinecraftSessionService;
|
|
+
|
|
+import java.net.InetAddress;
|
|
+import java.util.Map;
|
|
+
|
|
+public class WrappedMinecraftSessionService implements MinecraftSessionService {
|
|
+
|
|
+ private final MinecraftSessionService orig;
|
|
+
|
|
+ public WrappedMinecraftSessionService(MinecraftSessionService orig) {
|
|
+ this.orig = orig;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void joinServer(GameProfile profile, String authenticationToken, String serverId) throws AuthenticationException {
|
|
+ orig.joinServer(profile, authenticationToken, serverId);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public GameProfile hasJoinedServer(GameProfile user, String serverId, InetAddress address) throws AuthenticationUnavailableException {
|
|
+ return orig.hasJoinedServer(user, serverId, address);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public Map<Type, MinecraftProfileTexture> getTextures(GameProfile profile, boolean requireSecure) {
|
|
+ return orig.getTextures(profile, requireSecure);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public GameProfile fillProfileProperties(GameProfile profile, boolean requireSecure) {
|
|
+ new PreFillProfileEvent(CraftPlayerProfile.asBukkitMirror(profile)).callEvent();
|
|
+ if (profile.isComplete() && profile.getProperties().containsKey("textures")) {
|
|
+ return profile;
|
|
+ }
|
|
+ GameProfile gameProfile = orig.fillProfileProperties(profile, requireSecure);
|
|
+ new FillProfileEvent(CraftPlayerProfile.asBukkitMirror(gameProfile)).callEvent();
|
|
+ return gameProfile;
|
|
+ }
|
|
+}
|
|
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
index 6159cf4c0..95d1ac442 100644
|
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
@@ -1019,7 +1019,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs
|
|
|
|
String s1 = "."; // PAIL?
|
|
YggdrasilAuthenticationService yggdrasilauthenticationservice = new YggdrasilAuthenticationService(Proxy.NO_PROXY, UUID.randomUUID().toString());
|
|
- MinecraftSessionService minecraftsessionservice = yggdrasilauthenticationservice.createMinecraftSessionService();
|
|
+ MinecraftSessionService minecraftsessionservice = new com.destroystokyo.paper.profile.WrappedMinecraftSessionService(yggdrasilauthenticationservice.createMinecraftSessionService()); // Paper
|
|
GameProfileRepository gameprofilerepository = yggdrasilauthenticationservice.createProfileRepository();
|
|
gameprofilerepository = new com.destroystokyo.paper.profile.WrappedGameProfileRepository(gameprofilerepository); // Paper
|
|
UserCache usercache = new UserCache(gameprofilerepository, new File(s1, MinecraftServer.a.getName()));
|
|
--
|
|
2.15.1
|
|
|