From 390f9bb913b9e4238c67f436f5fa0e9312b23131 Mon Sep 17 00:00:00 2001 From: Aikar Date: Thu, 10 May 2018 23:01:52 -0400 Subject: [PATCH] Improve Profile API to directly extend Yggdrasil, Resolves #1117 This improves plugins like Citizens that rely on direct instance of Yggdrasil implementations. Instead of wrapping, directly extend and override the methods. Went ahead and wrapped all of the services in prep in the base patch, then features modify what they need --- .../0213-Basic-PlayerProfile-API.patch | 127 +++++++++++++++++- .../0215-Profile-Lookup-Events.patch | 64 ++++----- .../0262-Fill-Profile-Property-Events.patch | 103 +++----------- ...nt-extended-PaperServerListPingEvent.patch | 20 +-- 4 files changed, 179 insertions(+), 135 deletions(-) diff --git a/Spigot-Server-Patches/0213-Basic-PlayerProfile-API.patch b/Spigot-Server-Patches/0213-Basic-PlayerProfile-API.patch index 6492ecf860..fcd7d68824 100644 --- a/Spigot-Server-Patches/0213-Basic-PlayerProfile-API.patch +++ b/Spigot-Server-Patches/0213-Basic-PlayerProfile-API.patch @@ -1,8 +1,9 @@ -From 0609cc1f82cd0a16e7d0acf66c5e6cbf9b7f24ac Mon Sep 17 00:00:00 2001 +From 2fdd15767ecdb067c881c2a93cd8f0a679fefdaa Mon Sep 17 00:00:00 2001 From: Aikar Date: Mon, 15 Jan 2018 22:11:48 -0500 Subject: [PATCH] Basic PlayerProfile API +Establishes base extension of profile systems for future edits too diff --git a/src/main/java/com/destroystokyo/paper/profile/CraftPlayerProfile.java b/src/main/java/com/destroystokyo/paper/profile/CraftPlayerProfile.java new file mode 100644 @@ -291,6 +292,117 @@ index 000000000..9ad5853de + } + } +} +diff --git a/src/main/java/com/destroystokyo/paper/profile/PaperAuthenticationService.java b/src/main/java/com/destroystokyo/paper/profile/PaperAuthenticationService.java +new file mode 100644 +index 000000000..25836b975 +--- /dev/null ++++ b/src/main/java/com/destroystokyo/paper/profile/PaperAuthenticationService.java +@@ -0,0 +1,30 @@ ++package com.destroystokyo.paper.profile; ++ ++import com.mojang.authlib.Agent; ++import com.mojang.authlib.GameProfileRepository; ++import com.mojang.authlib.UserAuthentication; ++import com.mojang.authlib.minecraft.MinecraftSessionService; ++import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; ++ ++import java.net.Proxy; ++ ++public class PaperAuthenticationService extends YggdrasilAuthenticationService { ++ public PaperAuthenticationService(Proxy proxy, String clientToken) { ++ super(proxy, clientToken); ++ } ++ ++ @Override ++ public UserAuthentication createUserAuthentication(Agent agent) { ++ return new PaperUserAuthentication(this, agent); ++ } ++ ++ @Override ++ public MinecraftSessionService createMinecraftSessionService() { ++ return new PaperMinecraftSessionService(this); ++ } ++ ++ @Override ++ public GameProfileRepository createProfileRepository() { ++ return new PaperGameProfileRepository(this); ++ } ++} +diff --git a/src/main/java/com/destroystokyo/paper/profile/PaperGameProfileRepository.java b/src/main/java/com/destroystokyo/paper/profile/PaperGameProfileRepository.java +new file mode 100644 +index 000000000..3bcdb8f93 +--- /dev/null ++++ b/src/main/java/com/destroystokyo/paper/profile/PaperGameProfileRepository.java +@@ -0,0 +1,17 @@ ++package com.destroystokyo.paper.profile; ++ ++import com.mojang.authlib.Agent; ++import com.mojang.authlib.ProfileLookupCallback; ++import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; ++import com.mojang.authlib.yggdrasil.YggdrasilGameProfileRepository; ++ ++public class PaperGameProfileRepository extends YggdrasilGameProfileRepository { ++ public PaperGameProfileRepository(YggdrasilAuthenticationService authenticationService) { ++ super(authenticationService); ++ } ++ ++ @Override ++ public void findProfilesByNames(String[] names, Agent agent, ProfileLookupCallback callback) { ++ super.findProfilesByNames(names, agent, callback); ++ } ++} +diff --git a/src/main/java/com/destroystokyo/paper/profile/PaperMinecraftSessionService.java b/src/main/java/com/destroystokyo/paper/profile/PaperMinecraftSessionService.java +new file mode 100644 +index 000000000..4b2a67423 +--- /dev/null ++++ b/src/main/java/com/destroystokyo/paper/profile/PaperMinecraftSessionService.java +@@ -0,0 +1,29 @@ ++package com.destroystokyo.paper.profile; ++ ++import com.mojang.authlib.GameProfile; ++import com.mojang.authlib.minecraft.MinecraftProfileTexture; ++import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; ++import com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService; ++ ++import java.util.Map; ++ ++public class PaperMinecraftSessionService extends YggdrasilMinecraftSessionService { ++ protected PaperMinecraftSessionService(YggdrasilAuthenticationService authenticationService) { ++ super(authenticationService); ++ } ++ ++ @Override ++ public Map getTextures(GameProfile profile, boolean requireSecure) { ++ return super.getTextures(profile, requireSecure); ++ } ++ ++ @Override ++ public GameProfile fillProfileProperties(GameProfile profile, boolean requireSecure) { ++ return super.fillProfileProperties(profile, requireSecure); ++ } ++ ++ @Override ++ protected GameProfile fillGameProfile(GameProfile profile, boolean requireSecure) { ++ return super.fillGameProfile(profile, requireSecure); ++ } ++} +diff --git a/src/main/java/com/destroystokyo/paper/profile/PaperUserAuthentication.java b/src/main/java/com/destroystokyo/paper/profile/PaperUserAuthentication.java +new file mode 100644 +index 000000000..3aceb0ea8 +--- /dev/null ++++ b/src/main/java/com/destroystokyo/paper/profile/PaperUserAuthentication.java +@@ -0,0 +1,11 @@ ++package com.destroystokyo.paper.profile; ++ ++import com.mojang.authlib.Agent; ++import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; ++import com.mojang.authlib.yggdrasil.YggdrasilUserAuthentication; ++ ++public class PaperUserAuthentication extends YggdrasilUserAuthentication { ++ public PaperUserAuthentication(YggdrasilAuthenticationService authenticationService, Agent agent) { ++ super(authenticationService, agent); ++ } ++} diff --git a/src/main/java/net/minecraft/server/MCUtil.java b/src/main/java/net/minecraft/server/MCUtil.java index 02940d697..4539b5601 100644 --- a/src/main/java/net/minecraft/server/MCUtil.java @@ -317,9 +429,18 @@ index 02940d697..4539b5601 100644 * Calculates distance between 2 entities * @param e1 diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index e8bddc171..3b01ebd96 100644 +index e8bddc171..fcf6bac08 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java +@@ -1018,7 +1018,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs + */ // CraftBukkit end + + String s1 = "."; // PAIL? +- YggdrasilAuthenticationService yggdrasilauthenticationservice = new YggdrasilAuthenticationService(Proxy.NO_PROXY, UUID.randomUUID().toString()); ++ YggdrasilAuthenticationService yggdrasilauthenticationservice = new com.destroystokyo.paper.profile.PaperAuthenticationService(Proxy.NO_PROXY, UUID.randomUUID().toString()); // Paper + MinecraftSessionService minecraftsessionservice = yggdrasilauthenticationservice.createMinecraftSessionService(); + GameProfileRepository gameprofilerepository = yggdrasilauthenticationservice.createProfileRepository(); + UserCache usercache = new UserCache(gameprofilerepository, new File(s1, MinecraftServer.a.getName())); @@ -1538,6 +1538,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs this.H = i; } @@ -402,5 +523,5 @@ index 77c16fe2c..2dd7ed96a 100644 // Paper end } -- -2.16.2 +2.17.0 diff --git a/Spigot-Server-Patches/0215-Profile-Lookup-Events.patch b/Spigot-Server-Patches/0215-Profile-Lookup-Events.patch index 57913022d7..6c900dc619 100644 --- a/Spigot-Server-Patches/0215-Profile-Lookup-Events.patch +++ b/Spigot-Server-Patches/0215-Profile-Lookup-Events.patch @@ -1,4 +1,4 @@ -From bc59867ea93608a0e6e541d286b76d8579ab3df7 Mon Sep 17 00:00:00 2001 +From fc959e2e4dd778595b3aa4e546534a83c9e8cf18 Mon Sep 17 00:00:00 2001 From: Aikar Date: Sat, 17 Jun 2017 17:00:32 -0400 Subject: [PATCH] Profile Lookup Events @@ -6,35 +6,33 @@ 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/WrappedGameProfileRepository.java b/src/main/java/com/destroystokyo/paper/profile/WrappedGameProfileRepository.java -new file mode 100644 -index 00000000..bffba6a6 ---- /dev/null -+++ b/src/main/java/com/destroystokyo/paper/profile/WrappedGameProfileRepository.java -@@ -0,0 +1,70 @@ -+package com.destroystokyo.paper.profile; -+ +diff --git a/src/main/java/com/destroystokyo/paper/profile/PaperGameProfileRepository.java b/src/main/java/com/destroystokyo/paper/profile/PaperGameProfileRepository.java +index 3bcdb8f93..bb9894318 100644 +--- a/src/main/java/com/destroystokyo/paper/profile/PaperGameProfileRepository.java ++++ b/src/main/java/com/destroystokyo/paper/profile/PaperGameProfileRepository.java +@@ -1,17 +1,68 @@ + 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.Agent; + import com.mojang.authlib.Agent; +import com.mojang.authlib.GameProfile; -+import com.mojang.authlib.GameProfileRepository; -+import com.mojang.authlib.ProfileLookupCallback; -+import com.mojang.authlib.properties.Property; -+ -+import javax.annotation.Nonnull; + import com.mojang.authlib.ProfileLookupCallback; + import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; + import com.mojang.authlib.yggdrasil.YggdrasilGameProfileRepository; + +import java.util.Set; + -+public class WrappedGameProfileRepository implements GameProfileRepository { + public class PaperGameProfileRepository extends YggdrasilGameProfileRepository { + -+ private final GameProfileRepository orig; -+ public WrappedGameProfileRepository(@Nonnull GameProfileRepository orig) { -+ this.orig = orig; -+ } -+ -+ @Override -+ public void findProfilesByNames(String[] names, Agent agent, ProfileLookupCallback callback) { + public PaperGameProfileRepository(YggdrasilAuthenticationService authenticationService) { + super(authenticationService); + } + + @Override + public void findProfilesByNames(String[] names, Agent agent, ProfileLookupCallback callback) { +- super.findProfilesByNames(names, agent, callback); + Set unfoundNames = Sets.newHashSet(); + for (String name : names) { + PreLookupProfileEvent event = new PreLookupProfileEvent(name); @@ -58,7 +56,7 @@ index 00000000..bffba6a6 + // Some things were not found.... Proceed to look up. + if (!unfoundNames.isEmpty()) { + String[] namesArr = unfoundNames.toArray(new String[unfoundNames.size()]); -+ orig.findProfilesByNames(namesArr, agent, new PreProfileLookupCallback(callback)); ++ super.findProfilesByNames(namesArr, agent, new PreProfileLookupCallback(callback)); + } + } + @@ -80,20 +78,8 @@ index 00000000..bffba6a6 + public void onProfileLookupFailed(GameProfile gameProfile, Exception e) { + callback.onProfileLookupFailed(gameProfile, e); + } -+ } -+} -diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 3b01ebd9..85b9ac98 100644 ---- a/src/main/java/net/minecraft/server/MinecraftServer.java -+++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1021,6 +1021,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs - YggdrasilAuthenticationService yggdrasilauthenticationservice = new YggdrasilAuthenticationService(Proxy.NO_PROXY, UUID.randomUUID().toString()); - MinecraftSessionService minecraftsessionservice = yggdrasilauthenticationservice.createMinecraftSessionService(); - GameProfileRepository gameprofilerepository = yggdrasilauthenticationservice.createProfileRepository(); -+ gameprofilerepository = new com.destroystokyo.paper.profile.WrappedGameProfileRepository(gameprofilerepository); // Paper - UserCache usercache = new UserCache(gameprofilerepository, new File(s1, MinecraftServer.a.getName())); - final DedicatedServer dedicatedserver = new DedicatedServer(options, DataConverterRegistry.a(), yggdrasilauthenticationservice, minecraftsessionservice, gameprofilerepository, usercache); - + } + } -- -2.14.3 +2.17.0 diff --git a/Spigot-Server-Patches/0262-Fill-Profile-Property-Events.patch b/Spigot-Server-Patches/0262-Fill-Profile-Property-Events.patch index 741a036afa..aaacf9b351 100644 --- a/Spigot-Server-Patches/0262-Fill-Profile-Property-Events.patch +++ b/Spigot-Server-Patches/0262-Fill-Profile-Property-Events.patch @@ -1,4 +1,4 @@ -From 00ec1784d8da4298b04ae652324c5ff1df3285aa Mon Sep 17 00:00:00 2001 +From 778f0a583f0d95f233434b8eef9e7136915455a9 Mon Sep 17 00:00:00 2001 From: Aikar Date: Tue, 2 Jan 2018 00:31:26 -0500 Subject: [PATCH] Fill Profile Property Events @@ -10,96 +10,33 @@ 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 00000000..9914f98c ---- /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; -+ +diff --git a/src/main/java/com/destroystokyo/paper/profile/PaperMinecraftSessionService.java b/src/main/java/com/destroystokyo/paper/profile/PaperMinecraftSessionService.java +index 4b2a67423..f83aa5ef0 100644 +--- a/src/main/java/com/destroystokyo/paper/profile/PaperMinecraftSessionService.java ++++ b/src/main/java/com/destroystokyo/paper/profile/PaperMinecraftSessionService.java +@@ -1,5 +1,7 @@ + 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 getTextures(GameProfile profile, boolean requireSecure) { -+ return orig.getTextures(profile, requireSecure); -+ } -+ -+ @Override -+ public GameProfile fillProfileProperties(GameProfile profile, boolean requireSecure) { + import com.mojang.authlib.GameProfile; + import com.mojang.authlib.minecraft.MinecraftProfileTexture; + import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; +@@ -19,7 +21,13 @@ public class PaperMinecraftSessionService extends YggdrasilMinecraftSessionServi + + @Override + public GameProfile fillProfileProperties(GameProfile profile, boolean requireSecure) { +- return super.fillProfileProperties(profile, requireSecure); + new PreFillProfileEvent(CraftPlayerProfile.asBukkitMirror(profile)).callEvent(); + if (profile.isComplete() && profile.getProperties().containsKey("textures")) { + return profile; + } -+ GameProfile gameProfile = orig.fillProfileProperties(profile, requireSecure); ++ GameProfile gameProfile = super.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 85b9ac98..ed0e2acc 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())); + @Override -- -2.14.3 +2.17.0 diff --git a/Spigot-Server-Patches/0273-Implement-extended-PaperServerListPingEvent.patch b/Spigot-Server-Patches/0273-Implement-extended-PaperServerListPingEvent.patch index b623510d53..1619755ed1 100644 --- a/Spigot-Server-Patches/0273-Implement-extended-PaperServerListPingEvent.patch +++ b/Spigot-Server-Patches/0273-Implement-extended-PaperServerListPingEvent.patch @@ -1,4 +1,4 @@ -From 79ba50cb7dd573b4448adc4f3f0d7be96995933b Mon Sep 17 00:00:00 2001 +From 6499c96e7d9c95cf8aa2181bb0558d45aa7f69b0 Mon Sep 17 00:00:00 2001 From: Minecrell Date: Wed, 11 Oct 2017 15:56:26 +0200 Subject: [PATCH] Implement extended PaperServerListPingEvent @@ -6,7 +6,7 @@ Subject: [PATCH] Implement extended PaperServerListPingEvent diff --git a/src/main/java/com/destroystokyo/paper/network/PaperServerListPingEventImpl.java b/src/main/java/com/destroystokyo/paper/network/PaperServerListPingEventImpl.java new file mode 100644 -index 00000000..c1a8e295 +index 000000000..c1a8e295b --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/network/PaperServerListPingEventImpl.java @@ -0,0 +1,31 @@ @@ -43,7 +43,7 @@ index 00000000..c1a8e295 +} diff --git a/src/main/java/com/destroystokyo/paper/network/PaperStatusClient.java b/src/main/java/com/destroystokyo/paper/network/PaperStatusClient.java new file mode 100644 -index 00000000..a2a409e6 +index 000000000..a2a409e63 --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/network/PaperStatusClient.java @@ -0,0 +1,11 @@ @@ -60,7 +60,7 @@ index 00000000..a2a409e6 +} diff --git a/src/main/java/com/destroystokyo/paper/network/StandardPaperServerListPingEventImpl.java b/src/main/java/com/destroystokyo/paper/network/StandardPaperServerListPingEventImpl.java new file mode 100644 -index 00000000..35041052 +index 000000000..350410527 --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/network/StandardPaperServerListPingEventImpl.java @@ -0,0 +1,112 @@ @@ -177,7 +177,7 @@ index 00000000..35041052 + +} diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 579f0ba0..99cfe1ae 100644 +index 3092913f5..f82e22b23 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -768,7 +768,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs @@ -189,7 +189,7 @@ index 579f0ba0..99cfe1ae 100644 int j = MathHelper.nextInt(this.r, 0, this.H() - agameprofile.length); for (int k = 0; k < agameprofile.length; ++k) { -@@ -1116,10 +1116,12 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs +@@ -1115,10 +1115,12 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs return "1.12.2"; } @@ -203,7 +203,7 @@ index 579f0ba0..99cfe1ae 100644 return this.v.getMaxPlayers(); } diff --git a/src/main/java/net/minecraft/server/PacketStatusListener.java b/src/main/java/net/minecraft/server/PacketStatusListener.java -index 313bb000..f3c25367 100644 +index 313bb0007..f3c25367d 100644 --- a/src/main/java/net/minecraft/server/PacketStatusListener.java +++ b/src/main/java/net/minecraft/server/PacketStatusListener.java @@ -30,6 +30,8 @@ public class PacketStatusListener implements PacketStatusInListener { @@ -226,7 +226,7 @@ index 313bb000..f3c25367 100644 // CraftBukkit end } diff --git a/src/main/java/net/minecraft/server/ServerPing.java b/src/main/java/net/minecraft/server/ServerPing.java -index 98158221..ac161f50 100644 +index 981582212..ac161f505 100644 --- a/src/main/java/net/minecraft/server/ServerPing.java +++ b/src/main/java/net/minecraft/server/ServerPing.java @@ -29,6 +29,7 @@ public class ServerPing { @@ -251,7 +251,7 @@ index 98158221..ac161f50 100644 this.c = agameprofile; } diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java -index cc1f3ac9..4f9fd4bc 100644 +index cc1f3ac96..4f9fd4bc6 100644 --- a/src/main/java/org/spigotmc/SpigotConfig.java +++ b/src/main/java/org/spigotmc/SpigotConfig.java @@ -281,7 +281,7 @@ public class SpigotConfig @@ -264,5 +264,5 @@ index cc1f3ac9..4f9fd4bc 100644 } -- -2.14.3 +2.17.0