Mirror von
https://github.com/ViaVersion/ViaVersion.git
synchronisiert 2024-12-28 00:50:13 +01:00
Remove more of the old compat layer
Dieser Commit ist enthalten in:
Ursprung
58fd0bdc9e
Commit
0355447d53
@ -34,7 +34,6 @@ import com.viaversion.viaversion.bukkit.platform.BukkitViaConfig;
|
|||||||
import com.viaversion.viaversion.bukkit.platform.BukkitViaInjector;
|
import com.viaversion.viaversion.bukkit.platform.BukkitViaInjector;
|
||||||
import com.viaversion.viaversion.bukkit.platform.BukkitViaLoader;
|
import com.viaversion.viaversion.bukkit.platform.BukkitViaLoader;
|
||||||
import com.viaversion.viaversion.bukkit.platform.BukkitViaTask;
|
import com.viaversion.viaversion.bukkit.platform.BukkitViaTask;
|
||||||
import com.viaversion.viaversion.bukkit.util.NMSUtil;
|
|
||||||
import com.viaversion.viaversion.dump.PluginInfo;
|
import com.viaversion.viaversion.dump.PluginInfo;
|
||||||
import com.viaversion.viaversion.unsupported.UnsupportedPlugin;
|
import com.viaversion.viaversion.unsupported.UnsupportedPlugin;
|
||||||
import com.viaversion.viaversion.unsupported.UnsupportedServerSoftware;
|
import com.viaversion.viaversion.unsupported.UnsupportedServerSoftware;
|
||||||
@ -50,6 +49,7 @@ import java.util.Collection;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
public class ViaVersionPlugin extends JavaPlugin implements ViaPlatform<Player> {
|
public class ViaVersionPlugin extends JavaPlugin implements ViaPlatform<Player> {
|
||||||
private static ViaVersionPlugin instance;
|
private static ViaVersionPlugin instance;
|
||||||
@ -59,8 +59,6 @@ public class ViaVersionPlugin extends JavaPlugin implements ViaPlatform<Player>
|
|||||||
private final List<Runnable> queuedTasks = new ArrayList<>();
|
private final List<Runnable> queuedTasks = new ArrayList<>();
|
||||||
private final List<Runnable> asyncQueuedTasks = new ArrayList<>();
|
private final List<Runnable> asyncQueuedTasks = new ArrayList<>();
|
||||||
private final boolean protocolSupport;
|
private final boolean protocolSupport;
|
||||||
private boolean compatSpigotBuild;
|
|
||||||
private boolean spigot = true;
|
|
||||||
private boolean lateBind;
|
private boolean lateBind;
|
||||||
|
|
||||||
public ViaVersionPlugin() {
|
public ViaVersionPlugin() {
|
||||||
@ -88,33 +86,19 @@ public class ViaVersionPlugin extends JavaPlugin implements ViaPlatform<Player>
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoad() {
|
public void onLoad() {
|
||||||
// Spigot detector
|
|
||||||
try {
|
|
||||||
Class.forName("org.spigotmc.SpigotConfig");
|
|
||||||
} catch (ClassNotFoundException e) {
|
|
||||||
spigot = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if it's a spigot build with a protocol mod
|
|
||||||
try {
|
|
||||||
NMSUtil.nms(
|
|
||||||
"PacketEncoder",
|
|
||||||
"net.minecraft.network.PacketEncoder"
|
|
||||||
).getDeclaredField("version");
|
|
||||||
compatSpigotBuild = true;
|
|
||||||
} catch (Exception e) {
|
|
||||||
compatSpigotBuild = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getServer().getPluginManager().getPlugin("ViaBackwards") != null) {
|
if (getServer().getPluginManager().getPlugin("ViaBackwards") != null) {
|
||||||
MappingDataLoader.enableMappingsCache();
|
MappingDataLoader.enableMappingsCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate classes needed (only works if it's compat or ps)
|
try {
|
||||||
ClassGenerator.generate();
|
ClassGenerator.generate();
|
||||||
|
} catch (Exception e) {
|
||||||
|
getLogger().log(Level.WARNING, "Error generating classes for compatibility layer", e);
|
||||||
|
}
|
||||||
|
|
||||||
lateBind = !((BukkitViaInjector) Via.getManager().getInjector()).isBinded();
|
lateBind = !((BukkitViaInjector) Via.getManager().getInjector()).isBinded();
|
||||||
|
|
||||||
getLogger().info("ViaVersion " + getDescription().getVersion() + (compatSpigotBuild ? "compat" : "") + " is now loaded" + (lateBind ? ", waiting for boot. (late-bind)" : ", injecting!"));
|
getLogger().info("ViaVersion " + getDescription().getVersion() + " is now loaded" + (lateBind ? ", waiting for boot. (late-bind)" : ", injecting!"));
|
||||||
if (!lateBind) {
|
if (!lateBind) {
|
||||||
((ViaManagerImpl) Via.getManager()).init();
|
((ViaManagerImpl) Via.getManager()).init();
|
||||||
}
|
}
|
||||||
@ -130,7 +114,7 @@ public class ViaVersionPlugin extends JavaPlugin implements ViaPlatform<Player>
|
|||||||
getCommand("viaversion").setTabCompleter(commandHandler);
|
getCommand("viaversion").setTabCompleter(commandHandler);
|
||||||
|
|
||||||
// Warn them if they have anti-xray on and they aren't using spigot
|
// Warn them if they have anti-xray on and they aren't using spigot
|
||||||
if (conf.isAntiXRay() && !spigot) {
|
if (conf.isAntiXRay() && !isSpigot()) {
|
||||||
getLogger().info("You have anti-xray on in your config, since you're not using spigot it won't fix xray!");
|
getLogger().info("You have anti-xray on in your config, since you're not using spigot it won't fix xray!");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -300,18 +284,19 @@ public class ViaVersionPlugin extends JavaPlugin implements ViaPlatform<Player>
|
|||||||
return lateBind;
|
return lateBind;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isCompatSpigotBuild() {
|
|
||||||
return compatSpigotBuild;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isSpigot() {
|
|
||||||
return this.spigot;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isProtocolSupport() {
|
public boolean isProtocolSupport() {
|
||||||
return protocolSupport;
|
return protocolSupport;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isSpigot() {
|
||||||
|
try {
|
||||||
|
Class.forName("org.spigotmc.SpigotConfig");
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public static ViaVersionPlugin getInstance() {
|
public static ViaVersionPlugin getInstance() {
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
@ -18,21 +18,16 @@
|
|||||||
package com.viaversion.viaversion.bukkit.classgenerator;
|
package com.viaversion.viaversion.bukkit.classgenerator;
|
||||||
|
|
||||||
import com.viaversion.viaversion.ViaVersionPlugin;
|
import com.viaversion.viaversion.ViaVersionPlugin;
|
||||||
import com.viaversion.viaversion.bukkit.handlers.BukkitDecodeHandler;
|
import com.viaversion.viaversion.api.Via;
|
||||||
import com.viaversion.viaversion.bukkit.handlers.BukkitEncodeHandler;
|
|
||||||
import com.viaversion.viaversion.bukkit.util.NMSUtil;
|
import com.viaversion.viaversion.bukkit.util.NMSUtil;
|
||||||
import com.viaversion.viaversion.classgenerator.generated.HandlerSupplier;
|
import com.viaversion.viaversion.classgenerator.generated.HandlerSupplier;
|
||||||
import javassist.CannotCompileException;
|
import javassist.CannotCompileException;
|
||||||
import javassist.ClassPool;
|
import javassist.ClassPool;
|
||||||
import javassist.CtClass;
|
import javassist.CtClass;
|
||||||
import javassist.CtField;
|
import javassist.CtField;
|
||||||
import javassist.CtMethod;
|
|
||||||
import javassist.CtNewConstructor;
|
import javassist.CtNewConstructor;
|
||||||
import javassist.CtNewMethod;
|
import javassist.CtNewMethod;
|
||||||
import javassist.LoaderClassPath;
|
import javassist.LoaderClassPath;
|
||||||
import javassist.NotFoundException;
|
|
||||||
import javassist.expr.ConstructorCall;
|
|
||||||
import javassist.expr.ExprEditor;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
import org.bukkit.event.EventException;
|
import org.bukkit.event.EventException;
|
||||||
@ -47,93 +42,18 @@ import java.lang.reflect.Method;
|
|||||||
//TODO maybe clean this up a bit 👀
|
//TODO maybe clean this up a bit 👀
|
||||||
public final class ClassGenerator {
|
public final class ClassGenerator {
|
||||||
private static final boolean useModules = hasModuleMethod();
|
private static final boolean useModules = hasModuleMethod();
|
||||||
private static HandlerSupplier constructor = new HandlerSupplier.DefaultHandlerSupplier();
|
|
||||||
private static Class psConnectListener;
|
private static Class psConnectListener;
|
||||||
|
|
||||||
public static HandlerSupplier handlerSupplier() {
|
|
||||||
return constructor;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void generate() {
|
public static void generate() {
|
||||||
if (ViaVersionPlugin.getInstance().isCompatSpigotBuild() || ViaVersionPlugin.getInstance().isProtocolSupport()) {
|
if (ViaVersionPlugin.getInstance().isProtocolSupport() && isMultiplatformPS()) {
|
||||||
try {
|
|
||||||
ClassPool pool = ClassPool.getDefault();
|
ClassPool pool = ClassPool.getDefault();
|
||||||
pool.insertClassPath(new LoaderClassPath(Bukkit.class.getClassLoader()));
|
pool.insertClassPath(new LoaderClassPath(Bukkit.class.getClassLoader()));
|
||||||
for (Plugin p : Bukkit.getPluginManager().getPlugins()) {
|
for (Plugin p : Bukkit.getPluginManager().getPlugins()) {
|
||||||
pool.insertClassPath(new LoaderClassPath(p.getClass().getClassLoader()));
|
pool.insertClassPath(new LoaderClassPath(p.getClass().getClassLoader()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ViaVersionPlugin.getInstance().isCompatSpigotBuild()) {
|
Via.getPlatform().getLogger().info("Generating ProtocolSupport compatibility connect listener...");
|
||||||
Class decodeSuper = NMSUtil.nms("PacketDecoder", "net.minecraft.network.PacketDecoder");
|
|
||||||
Class encodeSuper = NMSUtil.nms("PacketEncoder", "net.minecraft.network.PacketEncoder");
|
|
||||||
// Generate the classes
|
|
||||||
addSpigotCompatibility(pool, BukkitDecodeHandler.class, decodeSuper);
|
|
||||||
addSpigotCompatibility(pool, BukkitEncodeHandler.class, encodeSuper);
|
|
||||||
} else {
|
|
||||||
// ProtocolSupport compatibility
|
|
||||||
if (isMultiplatformPS()) {
|
|
||||||
psConnectListener = makePSConnectListener(pool);
|
psConnectListener = makePSConnectListener(pool);
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Implement Constructor
|
|
||||||
CtClass generated = pool.makeClass("com.viaversion.viaversion.classgenerator.generated.GeneratedConstructor");
|
|
||||||
CtClass handlerInterface = pool.get(HandlerSupplier.class.getName());
|
|
||||||
|
|
||||||
generated.setInterfaces(new CtClass[]{handlerInterface});
|
|
||||||
// Import required classes
|
|
||||||
pool.importPackage("com.viaversion.viaversion.classgenerator.generated");
|
|
||||||
pool.importPackage("com.viaversion.viaversion.classgenerator");
|
|
||||||
pool.importPackage("com.viaversion.viaversion.api.connection");
|
|
||||||
pool.importPackage("io.netty.handler.codec");
|
|
||||||
// Implement Methods
|
|
||||||
generated.addMethod(CtMethod.make("public MessageToMessageEncoder<ByteBuf> newEncodeHandler(UserConnection connection) {\n" +
|
|
||||||
" return new BukkitEncodeHandler(connection);\n" +
|
|
||||||
" }", generated));
|
|
||||||
generated.addMethod(CtMethod.make("public MessageToMessageDecoder<ByteBuf> newDecodeHandler(UserConnection connection) {\n" +
|
|
||||||
" return new BukkitDecodeHandler(connection);\n" +
|
|
||||||
" }", generated));
|
|
||||||
|
|
||||||
constructor = (HandlerSupplier) toClass(generated).getConstructor().newInstance();
|
|
||||||
} catch (ReflectiveOperationException | CannotCompileException | NotFoundException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void addSpigotCompatibility(ClassPool pool, Class input, Class superclass) {
|
|
||||||
String newName = "com.viaversion.viaversion.classgenerator.generated." + input.getSimpleName();
|
|
||||||
|
|
||||||
try {
|
|
||||||
CtClass generated = pool.getAndRename(input.getName(), newName);
|
|
||||||
if (superclass != null) {
|
|
||||||
CtClass toExtend = pool.get(superclass.getName());
|
|
||||||
generated.setSuperclass(toExtend);
|
|
||||||
|
|
||||||
// If it's NMS satisfy constructor.
|
|
||||||
if (superclass.getName().startsWith("net.minecraft")) {
|
|
||||||
// Modify constructor to call super
|
|
||||||
if (generated.getConstructors().length != 0) {
|
|
||||||
generated.getConstructors()[0].instrument(new ExprEditor() {
|
|
||||||
@Override
|
|
||||||
public void edit(ConstructorCall c) throws CannotCompileException {
|
|
||||||
if (c.isSuper()) {
|
|
||||||
// Constructor for both has a stats thing.
|
|
||||||
c.replace("super(null);");
|
|
||||||
}
|
|
||||||
super.edit(c);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
toClass(generated);
|
|
||||||
} catch (NotFoundException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
} catch (CannotCompileException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
package com.viaversion.viaversion.bukkit.handlers;
|
package com.viaversion.viaversion.bukkit.handlers;
|
||||||
|
|
||||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||||
import com.viaversion.viaversion.bukkit.classgenerator.ClassGenerator;
|
|
||||||
import com.viaversion.viaversion.bukkit.platform.PaperViaInjector;
|
import com.viaversion.viaversion.bukkit.platform.PaperViaInjector;
|
||||||
import com.viaversion.viaversion.connection.UserConnectionImpl;
|
import com.viaversion.viaversion.connection.UserConnectionImpl;
|
||||||
import com.viaversion.viaversion.platform.WrappedChannelInitializer;
|
import com.viaversion.viaversion.platform.WrappedChannelInitializer;
|
||||||
@ -87,8 +86,8 @@ public final class BukkitChannelInitializer extends ChannelInitializer<Channel>
|
|||||||
|
|
||||||
// Add our transformers
|
// Add our transformers
|
||||||
final ChannelPipeline pipeline = channel.pipeline();
|
final ChannelPipeline pipeline = channel.pipeline();
|
||||||
pipeline.addBefore(MINECRAFT_ENCODER, VIA_ENCODER, ClassGenerator.handlerSupplier().newEncodeHandler(connection));
|
pipeline.addBefore(MINECRAFT_ENCODER, VIA_ENCODER, new BukkitEncodeHandler(connection));
|
||||||
pipeline.addBefore(MINECRAFT_DECODER, VIA_DECODER, ClassGenerator.handlerSupplier().newDecodeHandler(connection));
|
pipeline.addBefore(MINECRAFT_DECODER, VIA_DECODER, new BukkitDecodeHandler(connection));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -58,16 +58,6 @@ public class BukkitViaAPI extends ViaAPIBase<Player> {
|
|||||||
sendRawPacket(player.getUniqueId(), packet);
|
sendRawPacket(player.getUniqueId(), packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns if this version is a compatibility build for spigot.
|
|
||||||
* Eg. 1.9.1 / 1.9.2 allow certain versions to connect
|
|
||||||
*
|
|
||||||
* @return true if compat Spigot build
|
|
||||||
*/
|
|
||||||
public boolean isCompatSpigotBuild() {
|
|
||||||
return plugin.isCompatSpigotBuild();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns if ProtocolSupport is also being used.
|
* Returns if ProtocolSupport is also being used.
|
||||||
*
|
*
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren