mirror of
https://github.com/TuxCoding/FastLogin.git
synced 2025-07-31 19:24:47 +02:00
Replace Field- and MethodUtils from breaking changes in ProtocolLib
This commit is contained in:
@@ -29,6 +29,10 @@
|
|||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<nettyVersion>4.1.77.Final</nettyVersion>
|
||||||
|
</properties>
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.github.games647</groupId>
|
<groupId>com.github.games647</groupId>
|
||||||
<artifactId>fastlogin</artifactId>
|
<artifactId>fastlogin</artifactId>
|
||||||
@@ -371,14 +375,22 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.netty</groupId>
|
<groupId>io.netty</groupId>
|
||||||
<artifactId>netty-transport</artifactId>
|
<artifactId>netty-transport</artifactId>
|
||||||
<version>4.1.77.Final</version>
|
<version>${nettyVersion}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.netty</groupId>
|
<groupId>io.netty</groupId>
|
||||||
<artifactId>netty-codec</artifactId>
|
<artifactId>netty-codec</artifactId>
|
||||||
<version>4.1.77.Final</version>
|
<version>${nettyVersion}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Provided by the spigot, required for testing ProtocolLib -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-lang</groupId>
|
||||||
|
<artifactId>commons-lang</artifactId>
|
||||||
|
<version>2.6</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
@@ -25,7 +25,8 @@
|
|||||||
*/
|
*/
|
||||||
package com.github.games647.fastlogin.bukkit.hook;
|
package com.github.games647.fastlogin.bukkit.hook;
|
||||||
|
|
||||||
import com.comphenix.protocol.reflect.FieldUtils;
|
import com.comphenix.protocol.reflect.accessors.Accessors;
|
||||||
|
import com.comphenix.protocol.reflect.accessors.FieldAccessor;
|
||||||
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
|
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
|
||||||
import com.github.games647.fastlogin.core.hooks.AuthPlugin;
|
import com.github.games647.fastlogin.core.hooks.AuthPlugin;
|
||||||
|
|
||||||
@@ -135,14 +136,7 @@ public class CrazyLoginHook implements AuthPlugin<Player> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected PlayerListener getListener() {
|
protected PlayerListener getListener() {
|
||||||
PlayerListener listener;
|
FieldAccessor accessor = Accessors.getFieldAccessor(crazyLoginPlugin.getClass(), PlayerListener.class, true);
|
||||||
try {
|
return (PlayerListener) accessor.get(crazyLoginPlugin);
|
||||||
listener = (PlayerListener) FieldUtils.readField(crazyLoginPlugin, "playerListener", true);
|
|
||||||
} catch (IllegalAccessException ex) {
|
|
||||||
plugin.getLog().error("Failed to get the listener instance for auto login", ex);
|
|
||||||
listener = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return listener;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -25,18 +25,12 @@
|
|||||||
*/
|
*/
|
||||||
package com.github.games647.fastlogin.bukkit.listener.protocollib;
|
package com.github.games647.fastlogin.bukkit.listener.protocollib;
|
||||||
|
|
||||||
import com.comphenix.protocol.reflect.MethodUtils;
|
|
||||||
import com.comphenix.protocol.reflect.accessors.Accessors;
|
|
||||||
import com.comphenix.protocol.reflect.accessors.MethodAccessor;
|
|
||||||
import com.comphenix.protocol.utility.MinecraftReflection;
|
|
||||||
import com.comphenix.protocol.wrappers.WrappedGameProfile;
|
import com.comphenix.protocol.wrappers.WrappedGameProfile;
|
||||||
import com.comphenix.protocol.wrappers.WrappedSignedProperty;
|
import com.comphenix.protocol.wrappers.WrappedSignedProperty;
|
||||||
import com.github.games647.craftapi.model.skin.Textures;
|
import com.github.games647.craftapi.model.skin.Textures;
|
||||||
import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
|
import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
|
||||||
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
|
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
@@ -46,9 +40,6 @@ import org.bukkit.event.player.PlayerLoginEvent.Result;
|
|||||||
|
|
||||||
public class SkinApplyListener implements Listener {
|
public class SkinApplyListener implements Listener {
|
||||||
|
|
||||||
private static final Class<?> GAME_PROFILE = MinecraftReflection.getGameProfileClass();
|
|
||||||
private static final MethodAccessor GET_PROPERTIES = Accessors.getMethodAccessor(GAME_PROFILE, "getProperties");
|
|
||||||
|
|
||||||
private final FastLoginBukkit plugin;
|
private final FastLoginBukkit plugin;
|
||||||
|
|
||||||
public SkinApplyListener(FastLoginBukkit plugin) {
|
public SkinApplyListener(FastLoginBukkit plugin) {
|
||||||
@@ -78,16 +69,6 @@ public class SkinApplyListener implements Listener {
|
|||||||
WrappedGameProfile gameProfile = WrappedGameProfile.fromPlayer(player);
|
WrappedGameProfile gameProfile = WrappedGameProfile.fromPlayer(player);
|
||||||
|
|
||||||
WrappedSignedProperty skin = WrappedSignedProperty.fromValues(Textures.KEY, skinData, signature);
|
WrappedSignedProperty skin = WrappedSignedProperty.fromValues(Textures.KEY, skinData, signature);
|
||||||
try {
|
|
||||||
gameProfile.getProperties().put(Textures.KEY, skin);
|
gameProfile.getProperties().put(Textures.KEY, skin);
|
||||||
} catch (ClassCastException castException) {
|
|
||||||
//Cauldron, MCPC, Thermos, ...
|
|
||||||
Object map = GET_PROPERTIES.invoke(gameProfile.getHandle());
|
|
||||||
try {
|
|
||||||
MethodUtils.invokeMethod(map, "put", new Object[]{Textures.KEY, skin.getHandle()});
|
|
||||||
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) {
|
|
||||||
plugin.getLog().error("Error setting premium skin of: {}", player, ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -30,8 +30,9 @@ import com.comphenix.protocol.events.PacketContainer;
|
|||||||
import com.comphenix.protocol.events.PacketEvent;
|
import com.comphenix.protocol.events.PacketEvent;
|
||||||
import com.comphenix.protocol.injector.temporary.TemporaryPlayerFactory;
|
import com.comphenix.protocol.injector.temporary.TemporaryPlayerFactory;
|
||||||
import com.comphenix.protocol.reflect.EquivalentConverter;
|
import com.comphenix.protocol.reflect.EquivalentConverter;
|
||||||
import com.comphenix.protocol.reflect.FieldUtils;
|
|
||||||
import com.comphenix.protocol.reflect.FuzzyReflection;
|
import com.comphenix.protocol.reflect.FuzzyReflection;
|
||||||
|
import com.comphenix.protocol.reflect.accessors.Accessors;
|
||||||
|
import com.comphenix.protocol.reflect.accessors.FieldAccessor;
|
||||||
import com.comphenix.protocol.utility.MinecraftReflection;
|
import com.comphenix.protocol.utility.MinecraftReflection;
|
||||||
import com.comphenix.protocol.utility.MinecraftVersion;
|
import com.comphenix.protocol.utility.MinecraftVersion;
|
||||||
import com.comphenix.protocol.wrappers.BukkitConverters;
|
import com.comphenix.protocol.wrappers.BukkitConverters;
|
||||||
@@ -184,7 +185,10 @@ public class VerifyResponseTask implements Runnable {
|
|||||||
try {
|
try {
|
||||||
Object networkManager = getNetworkManager();
|
Object networkManager = getNetworkManager();
|
||||||
//https://github.com/bergerkiller/CraftSource/blob/master/net.minecraft.server/NetworkManager.java#L69
|
//https://github.com/bergerkiller/CraftSource/blob/master/net.minecraft.server/NetworkManager.java#L69
|
||||||
FieldUtils.writeField(networkManager, "spoofedUUID", premiumUUID, true);
|
|
||||||
|
Class<?> managerClass = networkManager.getClass();
|
||||||
|
FieldAccessor accessor = Accessors.getFieldAccessorOrNull(managerClass, "spoofedUUID", UUID.class);
|
||||||
|
accessor.set(networkManager, premiumUUID);
|
||||||
} catch (Exception exc) {
|
} catch (Exception exc) {
|
||||||
plugin.getLog().error("Error setting premium uuid of {}", player, exc);
|
plugin.getLog().error("Error setting premium uuid of {}", player, exc);
|
||||||
}
|
}
|
||||||
@@ -198,7 +202,10 @@ public class VerifyResponseTask implements Runnable {
|
|||||||
// ChannelInjector
|
// ChannelInjector
|
||||||
Class<?> injectorClass = Class.forName("com.comphenix.protocol.injector.netty.Injector");
|
Class<?> injectorClass = Class.forName("com.comphenix.protocol.injector.netty.Injector");
|
||||||
Object rawInjector = FuzzyReflection.getFieldValue(injectorContainer, injectorClass, true);
|
Object rawInjector = FuzzyReflection.getFieldValue(injectorContainer, injectorClass, true);
|
||||||
return FieldUtils.readField(rawInjector, "networkManager", true);
|
|
||||||
|
Class<?> rawInjectorClass = rawInjector.getClass();
|
||||||
|
FieldAccessor accessor = Accessors.getFieldAccessorOrNull(rawInjectorClass, "networkManager", Object.class);
|
||||||
|
return accessor.get(rawInjector);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean enableEncryption(SecretKey loginKey) throws IllegalArgumentException {
|
private boolean enableEncryption(SecretKey loginKey) throws IllegalArgumentException {
|
||||||
|
@@ -25,9 +25,11 @@
|
|||||||
*/
|
*/
|
||||||
package com.github.games647.fastlogin.bukkit;
|
package com.github.games647.fastlogin.bukkit;
|
||||||
|
|
||||||
import com.comphenix.protocol.reflect.FieldUtils;
|
import com.comphenix.protocol.reflect.accessors.Accessors;
|
||||||
|
import com.comphenix.protocol.reflect.accessors.FieldAccessor;
|
||||||
|
|
||||||
import fr.xephi.authme.api.v3.AuthMeApi;
|
import fr.xephi.authme.api.v3.AuthMeApi;
|
||||||
|
import fr.xephi.authme.process.Management;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
@@ -37,6 +39,7 @@ class ReflectionTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testAuthMeManagementField() {
|
void testAuthMeManagementField() {
|
||||||
assertNotNull(FieldUtils.getField(AuthMeApi.class, "management", true));
|
FieldAccessor accessor = Accessors.getFieldAccessor(AuthMeApi.class, Management.class, true);
|
||||||
|
assertNotNull(accessor.getField());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -25,9 +25,11 @@
|
|||||||
*/
|
*/
|
||||||
package com.github.games647.fastlogin.bukkit.hook;
|
package com.github.games647.fastlogin.bukkit.hook;
|
||||||
|
|
||||||
import com.comphenix.protocol.reflect.FieldUtils;
|
import com.comphenix.protocol.reflect.accessors.Accessors;
|
||||||
|
import com.comphenix.protocol.reflect.accessors.FieldAccessor;
|
||||||
|
|
||||||
import de.st_ddt.crazylogin.CrazyLogin;
|
import de.st_ddt.crazylogin.CrazyLogin;
|
||||||
|
import de.st_ddt.crazylogin.listener.PlayerListener;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
@@ -37,7 +39,8 @@ class CrazyLoginHookTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testPlayerListener() {
|
void testPlayerListener() {
|
||||||
assertNotNull(FieldUtils.getField(CrazyLogin.class, "playerListener", true));
|
FieldAccessor accessor = Accessors.getFieldAccessor(CrazyLogin.class, PlayerListener.class, true);
|
||||||
|
assertNotNull(accessor.getField());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -26,7 +26,8 @@
|
|||||||
package com.github.games647.fastlogin.bukkit.listener.protocollib;
|
package com.github.games647.fastlogin.bukkit.listener.protocollib;
|
||||||
|
|
||||||
import com.comphenix.protocol.injector.packet.PacketRegistry;
|
import com.comphenix.protocol.injector.packet.PacketRegistry;
|
||||||
import com.comphenix.protocol.reflect.FieldUtils;
|
import com.comphenix.protocol.reflect.accessors.Accessors;
|
||||||
|
import com.comphenix.protocol.reflect.accessors.FieldAccessor;
|
||||||
import com.comphenix.protocol.utility.MinecraftReflection;
|
import com.comphenix.protocol.utility.MinecraftReflection;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@@ -42,6 +43,9 @@ import static org.mockito.Mockito.mockStatic;
|
|||||||
|
|
||||||
class VerifyResponseTaskTest {
|
class VerifyResponseTaskTest {
|
||||||
|
|
||||||
|
private static final String NETTY_INJECTOR_CLASS =
|
||||||
|
"com.comphenix.protocol.injector.netty.channel.NettyChannelInjector";
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void getNetworkManagerReflection() throws ClassNotFoundException {
|
void getNetworkManagerReflection() throws ClassNotFoundException {
|
||||||
try (
|
try (
|
||||||
@@ -56,8 +60,9 @@ class VerifyResponseTaskTest {
|
|||||||
registryMock.when(() -> PacketRegistry.tryGetPacketClass(any())).thenReturn(Optional.empty());
|
registryMock.when(() -> PacketRegistry.tryGetPacketClass(any())).thenReturn(Optional.empty());
|
||||||
|
|
||||||
|
|
||||||
Class<?> injectorClass = Class.forName("com.comphenix.protocol.injector.netty.channel.NettyChannelInjector");
|
Class<?> injectorClass = Class.forName(NETTY_INJECTOR_CLASS);
|
||||||
assertNotNull(FieldUtils.getField(injectorClass, "networkManager", true));
|
FieldAccessor accessor = Accessors.getFieldAccessorOrNull(injectorClass, "networkManager", Object.class);
|
||||||
|
assertNotNull(accessor.getField());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user