Prefer use of limbo.yml ofr plugin loading

Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com>
This commit is contained in:
Joshua Castle 2025-07-14 09:22:11 -07:00
parent 1bfe4cf7d4
commit a0382bd64c
No known key found for this signature in database
GPG Key ID: 7ECA1A2FC38ABA9F
1 changed files with 61 additions and 42 deletions

View File

@ -55,18 +55,35 @@ public class PluginManager {
protected void loadPlugins() {
for (File file : pluginFolder.listFiles()) {
if (file.isFile() && file.getName().endsWith(".jar")) {
boolean found = false;
try (ZipInputStream zip = new ZipInputStream(new FileInputStream(file))) {
ZipEntry limboYmlEntry = null;
ZipEntry pluginYmlEntry = null;
while (true) {
ZipEntry entry = zip.getNextEntry();
if (entry == null) {
break;
}
String name = entry.getName();
if (name.endsWith("plugin.yml") || name.endsWith("limbo.yml")) {
found = true;
if (name.endsWith("limbo.yml")) {
limboYmlEntry = entry;
} else if (name.endsWith("plugin.yml")) {
pluginYmlEntry = entry;
}
}
FileConfiguration pluginYaml = new FileConfiguration(zip);
ZipEntry chosenEntry = limboYmlEntry != null ? limboYmlEntry : pluginYmlEntry;
if (chosenEntry != null) {
try (ZipInputStream processZip = new ZipInputStream(new FileInputStream(file))) {
while (true) {
ZipEntry currentEntry = processZip.getNextEntry();
if (currentEntry == null) {
break;
}
if (currentEntry.getName().equals(chosenEntry.getName())) {
FileConfiguration pluginYaml = new FileConfiguration(processZip);
String main = pluginYaml.get("main", String.class);
String pluginName = pluginYaml.get("name", String.class);
@ -74,7 +91,8 @@ public class PluginManager {
System.err.println("Ambiguous plugin name in " + file.getName() + " with the plugin \"" + plugins.get(pluginName).getClass().getName() + "\"");
break;
}
URLClassLoader child = new URLClassLoader(new URL[] {file.toURI().toURL()}, Limbo.getInstance().getClass().getClassLoader());
URLClassLoader child = new URLClassLoader(new URL[]{file.toURI().toURL()}, Limbo.getInstance().getClass().getClassLoader());
Class<?> clazz = Class.forName(main, true, child);
LimboPlugin plugin = (LimboPlugin) clazz.getDeclaredConstructor().newInstance();
plugin.setInfo(pluginYaml, file);
@ -84,13 +102,14 @@ public class PluginManager {
break;
}
}
}
} else {
System.err.println("Jar file " + file.getName() + " has no plugin.yml or limbo.yml!");
}
} catch (Exception e) {
System.err.println("Unable to load plugin \"" + file.getName() + "\"");
e.printStackTrace();
}
if (!found) {
System.err.println("Jar file " + file.getName() + " has no plugin.yml!");
}
}
}
}