Mirror von
https://github.com/ViaVersion/ViaVersion.git
synchronisiert 2024-12-26 16:12:42 +01:00
Move PS compatibility to an addon
PS has long been dead, so moving it away removes unnecessary complexity/the extra module. The additional code when getting the protocol version was long dead as well, since all connections are injected.
Dieser Commit ist enthalten in:
Ursprung
fcfea24b36
Commit
d6b5b5dc3e
@ -78,7 +78,6 @@ public interface ViaAPI<T> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the protocol version of a player.
|
* Returns the protocol version of a player.
|
||||||
* This will also retrieve the version from ProtocolSupport if it's being used.
|
|
||||||
*
|
*
|
||||||
* @param player the platform's player object, e.g. Bukkit this is Player
|
* @param player the platform's player object, e.g. Bukkit this is Player
|
||||||
* @return protocol version, for example (47=1.8-1.8.8, 107=1.9, 108=1.9.1), or -1 if no longer connected
|
* @return protocol version, for example (47=1.8-1.8.8, 107=1.9, 108=1.9.1), or -1 if no longer connected
|
||||||
@ -89,7 +88,6 @@ public interface ViaAPI<T> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the protocol version of a player.
|
* Returns the protocol version of a player.
|
||||||
* This will also retrieve the version from ProtocolSupport if it's being used.
|
|
||||||
*
|
*
|
||||||
* @param player the platform's player object, e.g. Bukkit this is Player
|
* @param player the platform's player object, e.g. Bukkit this is Player
|
||||||
* @return the protocol version object (see {@link ProtocolVersion}), or ProtocolVersion.unknown if not connected
|
* @return the protocol version object (see {@link ProtocolVersion}), or ProtocolVersion.unknown if not connected
|
||||||
@ -109,7 +107,6 @@ public interface ViaAPI<T> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the protocol version of a player.
|
* Returns the protocol version of a player.
|
||||||
* This will also retrieve the version from ProtocolSupport if it's being used.
|
|
||||||
*
|
*
|
||||||
* @param uuid UUID of a player
|
* @param uuid UUID of a player
|
||||||
* @return the protocol version object (see {@link ProtocolVersion}), or ProtocolVersion.unknown if not connected
|
* @return the protocol version object (see {@link ProtocolVersion}), or ProtocolVersion.unknown if not connected
|
||||||
|
@ -54,7 +54,6 @@ public interface ConnectionManager {
|
|||||||
* Returns the frontend UserConnection from the player connected to this proxy server
|
* Returns the frontend UserConnection from the player connected to this proxy server
|
||||||
* Returns null when there isn't a server or connection was not found
|
* Returns null when there isn't a server or connection was not found
|
||||||
* When ViaVersion is reloaded, this method may not return some players.
|
* When ViaVersion is reloaded, this method may not return some players.
|
||||||
* May not return ProtocolSupport players.
|
|
||||||
* <p>
|
* <p>
|
||||||
* Note that connections are removed as soon as their channel is closed,
|
* Note that connections are removed as soon as their channel is closed,
|
||||||
* so avoid using this method during player quits for example.
|
* so avoid using this method during player quits for example.
|
||||||
@ -67,7 +66,6 @@ public interface ConnectionManager {
|
|||||||
* Returns the UUID from the frontend connection to this proxy server
|
* Returns the UUID from the frontend connection to this proxy server
|
||||||
* Returns null when there isn't a server or this connection isn't frontend, or it doesn't have an id
|
* Returns null when there isn't a server or this connection isn't frontend, or it doesn't have an id
|
||||||
* When ViaVersion is reloaded, this method may not return some players.
|
* When ViaVersion is reloaded, this method may not return some players.
|
||||||
* May not return ProtocolSupport players.
|
|
||||||
* <p>
|
* <p>
|
||||||
* Note that connections are removed as soon as their channel is closed,
|
* Note that connections are removed as soon as their channel is closed,
|
||||||
* so avoid using this method during player quits for example.
|
* so avoid using this method during player quits for example.
|
||||||
@ -81,7 +79,6 @@ public interface ConnectionManager {
|
|||||||
* May contain duplicated UUIDs on multiple ProtocolInfo.
|
* May contain duplicated UUIDs on multiple ProtocolInfo.
|
||||||
* May contain frontend, backend and/or client-sided connections.
|
* May contain frontend, backend and/or client-sided connections.
|
||||||
* When ViaVersion is reloaded, this method may not return some players.
|
* When ViaVersion is reloaded, this method may not return some players.
|
||||||
* May not contain ProtocolSupport players.
|
|
||||||
*
|
*
|
||||||
* @return connected UserConnections
|
* @return connected UserConnections
|
||||||
*/
|
*/
|
||||||
@ -91,7 +88,6 @@ public interface ConnectionManager {
|
|||||||
* Returns a map containing the UUIDs and frontend UserConnections from players connected to this proxy server
|
* Returns a map containing the UUIDs and frontend UserConnections from players connected to this proxy server
|
||||||
* Returns empty list when there isn't a server
|
* Returns empty list when there isn't a server
|
||||||
* When ViaVersion is reloaded, this method may not return some players.
|
* When ViaVersion is reloaded, this method may not return some players.
|
||||||
* May not contain ProtocolSupport players.
|
|
||||||
*
|
*
|
||||||
* @return map containing the UUIDs and frontend UserConnections from players connected to this proxy server
|
* @return map containing the UUIDs and frontend UserConnections from players connected to this proxy server
|
||||||
*/
|
*/
|
||||||
|
@ -200,15 +200,6 @@ public interface ViaPlatform<T> {
|
|||||||
*/
|
*/
|
||||||
JsonObject getDump();
|
JsonObject getDump();
|
||||||
|
|
||||||
/**
|
|
||||||
* Get if older clients are allowed using ViaVersion.
|
|
||||||
*
|
|
||||||
* @return True if allowed
|
|
||||||
*/
|
|
||||||
default boolean isOldClientsAllowed() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an immutable collection of classes to be checked as unsupported software with their software name.
|
* Returns an immutable collection of classes to be checked as unsupported software with their software name.
|
||||||
* If any of the classes exist at runtime, a warning about their potential instability will be given to the console.
|
* If any of the classes exist at runtime, a warning about their potential instability will be given to the console.
|
||||||
|
@ -1,61 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
|
|
||||||
* Copyright (C) 2016-2024 ViaVersion and contributors
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.viaversion.viaversion.bukkit.util;
|
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.util.logging.Level;
|
|
||||||
import com.viaversion.viaversion.api.Via;
|
|
||||||
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
|
|
||||||
import com.viaversion.viaversion.api.protocol.version.VersionType;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
public final class ProtocolSupportUtil {
|
|
||||||
private static final Method PROTOCOL_VERSION_METHOD;
|
|
||||||
private static final Method GET_ID_METHOD;
|
|
||||||
|
|
||||||
static {
|
|
||||||
Method protocolVersionMethod = null;
|
|
||||||
Method getIdMethod = null;
|
|
||||||
try {
|
|
||||||
protocolVersionMethod = Class.forName("protocolsupport.api.ProtocolSupportAPI").getMethod("getProtocolVersion", Player.class);
|
|
||||||
getIdMethod = Class.forName("protocolsupport.api.ProtocolVersion").getMethod("getId");
|
|
||||||
} catch (ReflectiveOperationException e) {
|
|
||||||
// ProtocolSupport not installed.
|
|
||||||
}
|
|
||||||
PROTOCOL_VERSION_METHOD = protocolVersionMethod;
|
|
||||||
GET_ID_METHOD = getIdMethod;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ProtocolVersion getProtocolVersion(Player player) {
|
|
||||||
if (PROTOCOL_VERSION_METHOD == null) {
|
|
||||||
return ProtocolVersion.unknown;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
final Object version = PROTOCOL_VERSION_METHOD.invoke(null, player);
|
|
||||||
final int id = (int) GET_ID_METHOD.invoke(version);
|
|
||||||
// List of pre netty (<= 1.6.4) versions supported by ProtocolSupport, needs to be updated if ProtocolSupport adds support for new versions.
|
|
||||||
final boolean preNetty = id == 78 || id == 74 || id == 73 || id == 61 || id == 60 || id == 51;
|
|
||||||
|
|
||||||
return ProtocolVersion.getProtocol(preNetty ? VersionType.RELEASE_INITIAL : VersionType.RELEASE, id);
|
|
||||||
} catch (IllegalAccessException | InvocationTargetException e) {
|
|
||||||
Via.getPlatform().getLogger().log(Level.SEVERE, "Failed to get ProtocolSupport version", e);
|
|
||||||
}
|
|
||||||
return ProtocolVersion.unknown;
|
|
||||||
}
|
|
||||||
}
|
|
@ -6,7 +6,6 @@ dependencies {
|
|||||||
exclude("com.google.code.gson", "gson")
|
exclude("com.google.code.gson", "gson")
|
||||||
exclude("javax.persistence", "persistence-api")
|
exclude("javax.persistence", "persistence-api")
|
||||||
}
|
}
|
||||||
compileOnly(projects.compat.protocolsupportCompat)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
publishShadowJar()
|
publishShadowJar()
|
||||||
|
@ -59,7 +59,6 @@ public class ViaVersionPlugin extends JavaPlugin implements ViaPlatform<Player>
|
|||||||
private final BukkitCommandHandler commandHandler = new BukkitCommandHandler();
|
private final BukkitCommandHandler commandHandler = new BukkitCommandHandler();
|
||||||
private final BukkitViaConfig conf;
|
private final BukkitViaConfig conf;
|
||||||
private final ViaAPI<Player> api = new BukkitViaAPI(this);
|
private final ViaAPI<Player> api = new BukkitViaAPI(this);
|
||||||
private boolean protocolSupport;
|
|
||||||
private boolean lateBind;
|
private boolean lateBind;
|
||||||
|
|
||||||
public ViaVersionPlugin() {
|
public ViaVersionPlugin() {
|
||||||
@ -78,7 +77,6 @@ public class ViaVersionPlugin extends JavaPlugin implements ViaPlatform<Player>
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoad() {
|
public void onLoad() {
|
||||||
protocolSupport = Bukkit.getPluginManager().getPlugin("ProtocolSupport") != null;
|
|
||||||
lateBind = !((BukkitViaInjector) Via.getManager().getInjector()).isBinded();
|
lateBind = !((BukkitViaInjector) Via.getManager().getInjector()).isBinded();
|
||||||
|
|
||||||
if (!lateBind) {
|
if (!lateBind) {
|
||||||
@ -241,11 +239,6 @@ public class ViaVersionPlugin extends JavaPlugin implements ViaPlatform<Player>
|
|||||||
return platformSpecific;
|
return platformSpecific;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isOldClientsAllowed() {
|
|
||||||
return !protocolSupport; // Use protocolsupport for older clients
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BukkitViaConfig getConf() {
|
public BukkitViaConfig getConf() {
|
||||||
return conf;
|
return conf;
|
||||||
@ -279,10 +272,6 @@ public class ViaVersionPlugin extends JavaPlugin implements ViaPlatform<Player>
|
|||||||
return lateBind;
|
return lateBind;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isProtocolSupport() {
|
|
||||||
return protocolSupport;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated use {@link Via#getAPI()} instead
|
* @deprecated use {@link Via#getAPI()} instead
|
||||||
*/
|
*/
|
||||||
|
@ -1,104 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
|
|
||||||
* Copyright (C) 2016-2024 ViaVersion and contributors
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.viaversion.viaversion.bukkit.compat;
|
|
||||||
|
|
||||||
import com.viaversion.viaversion.ViaVersionPlugin;
|
|
||||||
import com.viaversion.viaversion.api.Via;
|
|
||||||
import com.viaversion.viaversion.bukkit.util.NMSUtil;
|
|
||||||
import java.util.logging.Level;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.event.Event;
|
|
||||||
import org.bukkit.event.EventPriority;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
|
|
||||||
public final class ProtocolSupportCompat {
|
|
||||||
|
|
||||||
public static void registerPSConnectListener(ViaVersionPlugin plugin) {
|
|
||||||
Via.getPlatform().getLogger().info("Registering ProtocolSupport compat connection listener");
|
|
||||||
try {
|
|
||||||
//noinspection unchecked
|
|
||||||
Class<? extends Event> connectionOpenEvent = (Class<? extends Event>) Class.forName("protocolsupport.api.events.ConnectionOpenEvent");
|
|
||||||
Bukkit.getPluginManager().registerEvent(connectionOpenEvent, new Listener() {
|
|
||||||
}, EventPriority.HIGH, (listener, event) -> {
|
|
||||||
try {
|
|
||||||
Object connection = event.getClass().getMethod("getConnection").invoke(event);
|
|
||||||
ProtocolSupportConnectionListener connectListener = new ProtocolSupportConnectionListener(connection);
|
|
||||||
ProtocolSupportConnectionListener.ADD_PACKET_LISTENER_METHOD.invoke(connection, connectListener);
|
|
||||||
} catch (ReflectiveOperationException e) {
|
|
||||||
Via.getPlatform().getLogger().log(Level.WARNING, "Error when handling ProtocolSupport event", e);
|
|
||||||
}
|
|
||||||
}, plugin);
|
|
||||||
} catch (ClassNotFoundException e) {
|
|
||||||
Via.getPlatform().getLogger().log(Level.WARNING, "Unable to register ProtocolSupport listener", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isMultiplatformPS() {
|
|
||||||
try {
|
|
||||||
Class.forName("protocolsupport.zplatform.impl.spigot.network.pipeline.SpigotPacketEncoder");
|
|
||||||
return true;
|
|
||||||
} catch (ClassNotFoundException e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static HandshakeProtocolType handshakeVersionMethod() {
|
|
||||||
Class<?> clazz = null;
|
|
||||||
// Check for the mapped method
|
|
||||||
try {
|
|
||||||
clazz = NMSUtil.nms(
|
|
||||||
"PacketHandshakingInSetProtocol",
|
|
||||||
"net.minecraft.network.protocol.handshake.PacketHandshakingInSetProtocol"
|
|
||||||
);
|
|
||||||
clazz.getMethod("getProtocolVersion");
|
|
||||||
return HandshakeProtocolType.MAPPED;
|
|
||||||
} catch (ClassNotFoundException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
} catch (NoSuchMethodException ignored) {
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check for obfuscated b/c methods
|
|
||||||
try {
|
|
||||||
if (clazz.getMethod("b").getReturnType() == int.class) {
|
|
||||||
return HandshakeProtocolType.OBFUSCATED_B;
|
|
||||||
} else if (clazz.getMethod("c").getReturnType() == int.class) {
|
|
||||||
return HandshakeProtocolType.OBFUSCATED_C;
|
|
||||||
}
|
|
||||||
throw new UnsupportedOperationException("Protocol version method not found in " + clazz.getSimpleName());
|
|
||||||
} catch (ReflectiveOperationException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
enum HandshakeProtocolType {
|
|
||||||
|
|
||||||
MAPPED("getProtocolVersion"),
|
|
||||||
OBFUSCATED_B("b"),
|
|
||||||
OBFUSCATED_C("c");
|
|
||||||
|
|
||||||
private final String methodName;
|
|
||||||
|
|
||||||
HandshakeProtocolType(String methodName) {
|
|
||||||
this.methodName = methodName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String methodName() {
|
|
||||||
return methodName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,87 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
|
|
||||||
* Copyright (C) 2016-2024 ViaVersion and contributors
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.viaversion.viaversion.bukkit.compat;
|
|
||||||
|
|
||||||
import com.viaversion.viaversion.api.Via;
|
|
||||||
import com.viaversion.viaversion.bukkit.util.NMSUtil;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import protocolsupport.api.Connection;
|
|
||||||
|
|
||||||
final class ProtocolSupportConnectionListener extends Connection.PacketListener {
|
|
||||||
|
|
||||||
static final Method ADD_PACKET_LISTENER_METHOD;
|
|
||||||
private static final Class<?> HANDSHAKE_PACKET_CLASS;
|
|
||||||
private static final Method GET_VERSION_METHOD;
|
|
||||||
private static final Method SET_VERSION_METHOD;
|
|
||||||
private static final Method REMOVE_PACKET_LISTENER_METHOD;
|
|
||||||
private static final Method GET_LATEST_METHOD;
|
|
||||||
private static final Object PROTOCOL_VERSION_MINECRAFT_FUTURE;
|
|
||||||
private static final Object PROTOCOL_TYPE_PC;
|
|
||||||
|
|
||||||
static {
|
|
||||||
try {
|
|
||||||
HANDSHAKE_PACKET_CLASS = NMSUtil.nms(
|
|
||||||
"PacketHandshakingInSetProtocol",
|
|
||||||
"net.minecraft.network.protocol.handshake.PacketHandshakingInSetProtocol"
|
|
||||||
);
|
|
||||||
|
|
||||||
final Class<?> connectionImplClass = Class.forName("protocolsupport.protocol.ConnectionImpl");
|
|
||||||
final Class<?> connectionClass = Class.forName("protocolsupport.api.Connection");
|
|
||||||
final Class<?> packetListenerClass = Class.forName("protocolsupport.api.Connection$PacketListener");
|
|
||||||
final Class<?> protocolVersionClass = Class.forName("protocolsupport.api.ProtocolVersion");
|
|
||||||
final Class<?> protocolTypeClass = Class.forName("protocolsupport.api.ProtocolType");
|
|
||||||
GET_VERSION_METHOD = connectionClass.getDeclaredMethod("getVersion");
|
|
||||||
SET_VERSION_METHOD = connectionImplClass.getDeclaredMethod("setVersion", protocolVersionClass);
|
|
||||||
PROTOCOL_VERSION_MINECRAFT_FUTURE = protocolVersionClass.getDeclaredField("MINECRAFT_FUTURE").get(null);
|
|
||||||
GET_LATEST_METHOD = protocolVersionClass.getDeclaredMethod("getLatest", protocolTypeClass);
|
|
||||||
PROTOCOL_TYPE_PC = protocolTypeClass.getDeclaredField("PC").get(null);
|
|
||||||
ADD_PACKET_LISTENER_METHOD = connectionClass.getDeclaredMethod("addPacketListener", packetListenerClass);
|
|
||||||
REMOVE_PACKET_LISTENER_METHOD = connectionClass.getDeclaredMethod("removePacketListener", packetListenerClass);
|
|
||||||
} catch (final ReflectiveOperationException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private final Object connection;
|
|
||||||
|
|
||||||
ProtocolSupportConnectionListener(final Object connection) {
|
|
||||||
this.connection = connection;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPacketReceiving(final Connection.PacketListener.PacketEvent event) {
|
|
||||||
try {
|
|
||||||
// Check if we are getting handshake packet.
|
|
||||||
if (HANDSHAKE_PACKET_CLASS.isInstance(event.getPacket()) && GET_VERSION_METHOD.invoke(connection) == PROTOCOL_VERSION_MINECRAFT_FUTURE) {
|
|
||||||
final Object packet = event.getPacket();
|
|
||||||
final int protocolVersion = (int) HANDSHAKE_PACKET_CLASS.getDeclaredMethod(ProtocolSupportCompat.handshakeVersionMethod().methodName()).invoke(packet);
|
|
||||||
|
|
||||||
// ViaVersion has at this point already spoofed the connectionversion. (Since it is higher up the pipeline)
|
|
||||||
// If via has put the protoVersion to the server we can spoof ProtocolSupport's version.
|
|
||||||
if (protocolVersion == Via.getAPI().getServerVersion().lowestSupportedVersion()) {
|
|
||||||
SET_VERSION_METHOD.invoke(connection, GET_LATEST_METHOD.invoke(null, PROTOCOL_TYPE_PC));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Id version is not serverversion viaversion will not spoof. ProtocolSupport will handle the rest.
|
|
||||||
// In any case, remove the packet listener and wrap up.
|
|
||||||
REMOVE_PACKET_LISTENER_METHOD.invoke(connection, this);
|
|
||||||
} catch (final ReflectiveOperationException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -22,10 +22,8 @@ import com.viaversion.viaversion.ViaVersionPlugin;
|
|||||||
import com.viaversion.viaversion.api.Via;
|
import com.viaversion.viaversion.api.Via;
|
||||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||||
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
|
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
|
||||||
import com.viaversion.viaversion.bukkit.util.ProtocolSupportUtil;
|
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
public class BukkitViaAPI extends ViaAPIBase<Player> {
|
public class BukkitViaAPI extends ViaAPIBase<Player> {
|
||||||
@ -46,13 +44,6 @@ public class BukkitViaAPI extends ViaAPIBase<Player> {
|
|||||||
if (connection != null) {
|
if (connection != null) {
|
||||||
return connection.getProtocolInfo().protocolVersion();
|
return connection.getProtocolInfo().protocolVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isProtocolSupport()) {
|
|
||||||
Player player = Bukkit.getPlayer(uuid);
|
|
||||||
if (player != null) {
|
|
||||||
return ProtocolSupportUtil.getProtocolVersion(player);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ProtocolVersion.unknown;
|
return ProtocolVersion.unknown;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,13 +51,4 @@ public class BukkitViaAPI extends ViaAPIBase<Player> {
|
|||||||
public void sendRawPacket(Player player, ByteBuf packet) throws IllegalArgumentException {
|
public void sendRawPacket(Player player, ByteBuf packet) throws IllegalArgumentException {
|
||||||
sendRawPacket(player.getUniqueId(), packet);
|
sendRawPacket(player.getUniqueId(), packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns if ProtocolSupport is also being used.
|
|
||||||
*
|
|
||||||
* @return true if ProtocolSupport is used
|
|
||||||
*/
|
|
||||||
public boolean isProtocolSupport() {
|
|
||||||
return plugin.isProtocolSupport();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,6 @@ import com.viaversion.viaversion.api.connection.UserConnection;
|
|||||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||||
import com.viaversion.viaversion.api.platform.ViaPlatformLoader;
|
import com.viaversion.viaversion.api.platform.ViaPlatformLoader;
|
||||||
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
|
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
|
||||||
import com.viaversion.viaversion.bukkit.compat.ProtocolSupportCompat;
|
|
||||||
import com.viaversion.viaversion.bukkit.listeners.UpdateListener;
|
import com.viaversion.viaversion.bukkit.listeners.UpdateListener;
|
||||||
import com.viaversion.viaversion.bukkit.listeners.multiversion.PlayerSneakListener;
|
import com.viaversion.viaversion.bukkit.listeners.multiversion.PlayerSneakListener;
|
||||||
import com.viaversion.viaversion.bukkit.listeners.protocol1_15to1_14_4.EntityToggleGlideListener;
|
import com.viaversion.viaversion.bukkit.listeners.protocol1_15to1_14_4.EntityToggleGlideListener;
|
||||||
@ -76,12 +75,6 @@ public class BukkitViaLoader implements ViaPlatformLoader {
|
|||||||
|
|
||||||
/* Base Protocol */
|
/* Base Protocol */
|
||||||
final ViaVersionPlugin plugin = (ViaVersionPlugin) Bukkit.getPluginManager().getPlugin("ViaVersion");
|
final ViaVersionPlugin plugin = (ViaVersionPlugin) Bukkit.getPluginManager().getPlugin("ViaVersion");
|
||||||
|
|
||||||
// Add ProtocolSupport ConnectListener if necessary.
|
|
||||||
if (plugin.isProtocolSupport() && ProtocolSupportCompat.isMultiplatformPS()) {
|
|
||||||
ProtocolSupportCompat.registerPSConnectListener(plugin);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Via.getAPI().getServerVersion().isKnown()) {
|
if (!Via.getAPI().getServerVersion().isKnown()) {
|
||||||
Via.getPlatform().getLogger().severe("Server version has not been loaded yet, cannot register additional listeners");
|
Via.getPlatform().getLogger().severe("Server version has not been loaded yet, cannot register additional listeners");
|
||||||
return;
|
return;
|
||||||
|
@ -84,7 +84,7 @@ public class BaseProtocol extends AbstractProtocol<BaseClientboundPacket, BaseCl
|
|||||||
|
|
||||||
// Only allow newer clients (or 1.9.2 on 1.9.4 server if the server supports it)
|
// Only allow newer clients (or 1.9.2 on 1.9.4 server if the server supports it)
|
||||||
ProtocolManager protocolManager = Via.getManager().getProtocolManager();
|
ProtocolManager protocolManager = Via.getManager().getProtocolManager();
|
||||||
if (info.protocolVersion().newerThanOrEqualTo(serverProtocol) || Via.getPlatform().isOldClientsAllowed()) {
|
if (info.protocolVersion().newerThanOrEqualTo(serverProtocol)) {
|
||||||
protocolPath = protocolManager.getProtocolPath(info.protocolVersion(), serverProtocol);
|
protocolPath = protocolManager.getProtocolPath(info.protocolVersion(), serverProtocol);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,7 +108,7 @@ public class BaseProtocol1_7 extends AbstractProtocol<BaseClientboundPacket, Bas
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<ProtocolPathEntry> protocols = null;
|
List<ProtocolPathEntry> protocols = null;
|
||||||
if (info.protocolVersion().newerThanOrEqualTo(closestServerProtocol) || Via.getPlatform().isOldClientsAllowed()) {
|
if (info.protocolVersion().newerThanOrEqualTo(closestServerProtocol)) {
|
||||||
protocols = Via.getManager().getProtocolManager()
|
protocols = Via.getManager().getProtocolManager()
|
||||||
.getProtocolPath(info.protocolVersion(), closestServerProtocol);
|
.getProtocolPath(info.protocolVersion(), closestServerProtocol);
|
||||||
}
|
}
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
dependencies {
|
|
||||||
}
|
|
@ -1,18 +0,0 @@
|
|||||||
package protocolsupport.api;
|
|
||||||
|
|
||||||
public abstract class Connection {
|
|
||||||
|
|
||||||
public abstract static class PacketListener {
|
|
||||||
|
|
||||||
public void onPacketReceiving(PacketEvent event) {
|
|
||||||
throw new UnsupportedOperationException();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class PacketEvent {
|
|
||||||
|
|
||||||
public Object getPacket() {
|
|
||||||
throw new UnsupportedOperationException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -27,7 +27,7 @@ rootProject.name = "viaversion-parent"
|
|||||||
|
|
||||||
includeBuild("build-logic")
|
includeBuild("build-logic")
|
||||||
|
|
||||||
include("compat", "compat:snakeyaml-compat-common", "compat:snakeyaml2-compat", "compat:snakeyaml1-compat", "compat:protocolsupport-compat")
|
include("compat", "compat:snakeyaml-compat-common", "compat:snakeyaml2-compat", "compat:snakeyaml1-compat")
|
||||||
|
|
||||||
setupViaSubproject("api")
|
setupViaSubproject("api")
|
||||||
setupViaSubproject("common")
|
setupViaSubproject("common")
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren