mirror of
https://github.com/ViaVersion/ViaVersion.git
synced 2024-11-29 05:26:23 +01:00
Small cleanup
This commit is contained in:
parent
1b3c5b4032
commit
09b67fad63
@ -29,16 +29,18 @@ import it.unimi.dsi.fastutil.ints.IntLinkedOpenHashSet;
|
|||||||
import it.unimi.dsi.fastutil.ints.IntSortedSet;
|
import it.unimi.dsi.fastutil.ints.IntSortedSet;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
|
||||||
public class VelocityViaInjector implements ViaInjector {
|
public class VelocityViaInjector implements ViaInjector {
|
||||||
public static Method getPlayerInfoForwardingMode;
|
public static final Method GET_PLAYER_INFO_FORWARDING_MODE = getPlayerInfoForwardingModeMethod();
|
||||||
|
|
||||||
static {
|
private static @Nullable Method getPlayerInfoForwardingModeMethod() {
|
||||||
try {
|
try {
|
||||||
getPlayerInfoForwardingMode = Class.forName("com.velocitypowered.proxy.config.VelocityConfiguration").getMethod("getPlayerInfoForwardingMode");
|
return Class.forName("com.velocitypowered.proxy.config.VelocityConfiguration").getMethod("getPlayerInfoForwardingMode");
|
||||||
} catch (NoSuchMethodException | ClassNotFoundException e) {
|
} catch (NoSuchMethodException | ClassNotFoundException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,8 +97,8 @@ public class VelocityViaInjector implements ViaInjector {
|
|||||||
|
|
||||||
public static int getLowestSupportedProtocolVersion() {
|
public static int getLowestSupportedProtocolVersion() {
|
||||||
try {
|
try {
|
||||||
if (getPlayerInfoForwardingMode != null
|
if (GET_PLAYER_INFO_FORWARDING_MODE != null
|
||||||
&& ((Enum<?>) getPlayerInfoForwardingMode.invoke(VelocityPlugin.PROXY.getConfiguration()))
|
&& ((Enum<?>) GET_PLAYER_INFO_FORWARDING_MODE.invoke(VelocityPlugin.PROXY.getConfiguration()))
|
||||||
.name().equals("MODERN")) {
|
.name().equals("MODERN")) {
|
||||||
return ProtocolVersion.v1_13.getVersion();
|
return ProtocolVersion.v1_13.getVersion();
|
||||||
}
|
}
|
||||||
|
@ -28,15 +28,17 @@ import io.netty.channel.ChannelHandler;
|
|||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.stream.IntStream;
|
import java.util.stream.IntStream;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
public class VelocityVersionProvider extends BaseVersionProvider {
|
public class VelocityVersionProvider extends BaseVersionProvider {
|
||||||
private static Method getAssociation;
|
private static final Method GET_ASSOCIATION = getAssociationMethod();
|
||||||
|
|
||||||
static {
|
private static @Nullable Method getAssociationMethod() {
|
||||||
try {
|
try {
|
||||||
getAssociation = Class.forName("com.velocitypowered.proxy.connection.MinecraftConnection").getMethod("getAssociation");
|
return Class.forName("com.velocitypowered.proxy.connection.MinecraftConnection").getMethod("getAssociation");
|
||||||
} catch (NoSuchMethodException | ClassNotFoundException e) {
|
} catch (NoSuchMethodException | ClassNotFoundException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -48,8 +50,8 @@ public class VelocityVersionProvider extends BaseVersionProvider {
|
|||||||
private int getBackProtocol(UserConnection user) throws Exception {
|
private int getBackProtocol(UserConnection user) throws Exception {
|
||||||
//TODO use newly added Velocity netty event
|
//TODO use newly added Velocity netty event
|
||||||
ChannelHandler mcHandler = user.getChannel().pipeline().get("handler");
|
ChannelHandler mcHandler = user.getChannel().pipeline().get("handler");
|
||||||
return Via.proxyPlatform().protocolDetectorService().serverProtocolVersion(
|
ServerConnection serverConnection = (ServerConnection) GET_ASSOCIATION.invoke(mcHandler);
|
||||||
((ServerConnection) getAssociation.invoke(mcHandler)).getServerInfo().getName());
|
return Via.proxyPlatform().protocolDetectorService().serverProtocolVersion(serverConnection.getServerInfo().getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getFrontProtocol(UserConnection user) throws Exception {
|
private int getFrontProtocol(UserConnection user) throws Exception {
|
||||||
@ -59,30 +61,32 @@ public class VelocityVersionProvider extends BaseVersionProvider {
|
|||||||
.mapToInt(com.velocitypowered.api.network.ProtocolVersion::getProtocol);
|
.mapToInt(com.velocitypowered.api.network.ProtocolVersion::getProtocol);
|
||||||
|
|
||||||
// Modern forwarding mode needs 1.13 Login plugin message
|
// Modern forwarding mode needs 1.13 Login plugin message
|
||||||
if (VelocityViaInjector.getPlayerInfoForwardingMode != null
|
if (VelocityViaInjector.GET_PLAYER_INFO_FORWARDING_MODE != null
|
||||||
&& ((Enum<?>) VelocityViaInjector.getPlayerInfoForwardingMode.invoke(VelocityPlugin.PROXY.getConfiguration()))
|
&& ((Enum<?>) VelocityViaInjector.GET_PLAYER_INFO_FORWARDING_MODE.invoke(VelocityPlugin.PROXY.getConfiguration()))
|
||||||
.name().equals("MODERN")) {
|
.name().equals("MODERN")) {
|
||||||
versions = versions.filter(ver -> ver >= ProtocolVersion.v1_13.getVersion());
|
versions = versions.filter(ver -> ver >= ProtocolVersion.v1_13.getVersion());
|
||||||
}
|
}
|
||||||
int[] compatibleProtocols = versions.toArray();
|
int[] compatibleProtocols = versions.toArray();
|
||||||
|
|
||||||
// Bungee supports it
|
if (Arrays.binarySearch(compatibleProtocols, playerVersion) >= 0) {
|
||||||
if (Arrays.binarySearch(compatibleProtocols, playerVersion) >= 0)
|
// Velocity supports it
|
||||||
return playerVersion;
|
return playerVersion;
|
||||||
|
}
|
||||||
|
|
||||||
// Older than bungee supports, get the lowest version
|
|
||||||
if (playerVersion < compatibleProtocols[0]) {
|
if (playerVersion < compatibleProtocols[0]) {
|
||||||
|
// Older than Velocity supports, get the lowest version
|
||||||
return compatibleProtocols[0];
|
return compatibleProtocols[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Loop through all protocols to get the closest protocol id that bungee supports (and that viaversion does too)
|
// Loop through all protocols to get the closest protocol id that Velocity supports (and that Via does too)
|
||||||
|
|
||||||
// TODO: This needs a better fix, i.e checking ProtocolRegistry to see if it would work.
|
// TODO: This needs a better fix, i.e checking ProtocolRegistry to see if it would work.
|
||||||
// This is more of a workaround for snapshot support by bungee.
|
// This is more of a workaround for snapshot support
|
||||||
for (int i = compatibleProtocols.length - 1; i >= 0; i--) {
|
for (int i = compatibleProtocols.length - 1; i >= 0; i--) {
|
||||||
int protocol = compatibleProtocols[i];
|
int protocol = compatibleProtocols[i];
|
||||||
if (playerVersion > protocol && ProtocolVersion.isRegistered(protocol))
|
if (playerVersion > protocol && ProtocolVersion.isRegistered(protocol)) {
|
||||||
return protocol;
|
return protocol;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Via.getPlatform().getLogger().severe("Panic, no protocol id found for " + playerVersion);
|
Via.getPlatform().getLogger().severe("Panic, no protocol id found for " + playerVersion);
|
||||||
|
Loading…
Reference in New Issue
Block a user