1
0
mirror of https://github.com/lucko/LuckPerms.git synced 2025-09-03 11:22:33 +02:00

Implement jar-in-jar loader system (#2899)

This fixes an issue that prevented LuckPerms from loading on Java 16
This commit is contained in:
lucko
2021-02-18 12:21:17 +00:00
committed by GitHub
parent cb5f403043
commit 75d8f00400
61 changed files with 790 additions and 339 deletions

View File

@@ -35,8 +35,8 @@ import com.velocitypowered.api.plugin.annotation.DataDirectory;
import com.velocitypowered.api.proxy.Player;
import com.velocitypowered.api.proxy.ProxyServer;
import me.lucko.luckperms.common.dependencies.classloader.PluginClassLoader;
import me.lucko.luckperms.common.plugin.bootstrap.LuckPermsBootstrap;
import me.lucko.luckperms.common.plugin.classpath.ClassPathAppender;
import me.lucko.luckperms.common.plugin.logging.PluginLogger;
import me.lucko.luckperms.common.plugin.logging.Slf4jPluginLogger;
import me.lucko.luckperms.common.plugin.scheduler.SchedulerAdapter;
@@ -45,7 +45,6 @@ import net.luckperms.api.platform.Platform;
import org.slf4j.Logger;
import java.io.InputStream;
import java.nio.file.Path;
import java.time.Instant;
import java.util.ArrayList;
@@ -79,9 +78,9 @@ public class LPVelocityBootstrap implements LuckPermsBootstrap {
private final SchedulerAdapter schedulerAdapter;
/**
* The plugin classloader
* The plugin class path appender
*/
private final PluginClassLoader classLoader;
private final ClassPathAppender classPathAppender;
/**
* The plugin instance
@@ -108,7 +107,7 @@ public class LPVelocityBootstrap implements LuckPermsBootstrap {
public LPVelocityBootstrap(Logger logger) {
this.logger = new Slf4jPluginLogger(logger);
this.schedulerAdapter = new VelocitySchedulerAdapter(this);
this.classLoader = new VelocityClassLoader(this);
this.classPathAppender = new VelocityClassPathAppender(this);
this.plugin = new LPVelocityPlugin(this);
}
@@ -125,8 +124,8 @@ public class LPVelocityBootstrap implements LuckPermsBootstrap {
}
@Override
public PluginClassLoader getPluginClassLoader() {
return this.classLoader;
public ClassPathAppender getClassPathAppender() {
return this.classPathAppender;
}
// lifecycle
@@ -202,11 +201,6 @@ public class LPVelocityBootstrap implements LuckPermsBootstrap {
return this.configDirectory.toAbsolutePath();
}
@Override
public InputStream getResourceStream(String path) {
return getClass().getClassLoader().getResourceAsStream(path);
}
@Override
public Optional<Player> getPlayer(UUID uniqueId) {
return this.proxy.getPlayer(uniqueId);

View File

@@ -41,7 +41,6 @@ import me.lucko.luckperms.common.plugin.util.AbstractConnectionListener;
import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.tasks.CacheHousekeepingTask;
import me.lucko.luckperms.common.tasks.ExpireTemporaryTask;
import me.lucko.luckperms.common.util.MoreFiles;
import me.lucko.luckperms.velocity.calculator.VelocityCalculatorFactory;
import me.lucko.luckperms.velocity.context.VelocityContextManager;
import me.lucko.luckperms.velocity.context.VelocityPlayerCalculator;
@@ -52,10 +51,6 @@ import me.lucko.luckperms.velocity.messaging.VelocityMessagingFactory;
import net.luckperms.api.LuckPerms;
import net.luckperms.api.query.QueryOptions;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@@ -101,7 +96,7 @@ public class LPVelocityPlugin extends AbstractLuckPermsPlugin {
@Override
protected ConfigurationAdapter provideConfigurationAdapter() {
return new VelocityConfigAdapter(this, resolveConfig());
return new VelocityConfigAdapter(this, resolveConfig("config.yml"));
}
@Override
@@ -169,22 +164,6 @@ public class LPVelocityPlugin extends AbstractLuckPermsPlugin {
}
private Path resolveConfig() {
Path path = this.bootstrap.getConfigDirectory().resolve("config.yml");
if (!Files.exists(path)) {
try {
MoreFiles.createDirectoriesIfNotExists(this.bootstrap.getConfigDirectory());
try (InputStream is = getClass().getClassLoader().getResourceAsStream("config.yml")) {
Files.copy(is, path);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return path;
}
@Override
public Optional<QueryOptions> getQueryOptionsForUser(User user) {
return this.bootstrap.getPlayer(user.getUniqueId()).map(player -> this.contextManager.getQueryOptions(player));

View File

@@ -25,14 +25,14 @@
package me.lucko.luckperms.velocity;
import me.lucko.luckperms.common.dependencies.classloader.PluginClassLoader;
import me.lucko.luckperms.common.plugin.classpath.ClassPathAppender;
import java.nio.file.Path;
public class VelocityClassLoader implements PluginClassLoader {
public class VelocityClassPathAppender implements ClassPathAppender {
private final LPVelocityBootstrap bootstrap;
public VelocityClassLoader(LPVelocityBootstrap bootstrap) {
public VelocityClassPathAppender(LPVelocityBootstrap bootstrap) {
this.bootstrap = bootstrap;
}