EarlyPluginLoader class
Пакет: com.hypixel.hytale.plugin.early
Файл: com/hypixel/hytale/plugin/early/EarlyPluginLoader.java
Поля (7)
| Модификаторы | Тип | Имя |
|---|---|---|
|
|
pluginClassLoader |
|
ObjectArrayList |
var1 |
|
ObjectArrayList |
var1 |
|
String |
var3 |
|
Console |
var4 |
|
boolean |
var6 |
|
boolean |
var8 |
Методы (12)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
static |
void |
collectPluginJarsvoid collectPluginJars(Path var0, List<URL> var1) |
abstract |
|
collectPluginJars collectPluginJars(EARLY_PLUGINS_PATH, var1) |
abstract |
|
collectPluginJars collectPluginJars(var3, var1) |
|
|
for for(int var2 = 0; var2 < var0.length; var2++) |
|
|
for for(String var5 : var0) |
|
|
for for(Path var4 : var2) |
static |
List<ClassTransformer> |
getTransformersList<ClassTransformer> getTransformers() |
static |
boolean |
hasFlagboolean hasFlag(String[] var0, String var1) |
static |
boolean |
hasTransformersboolean hasTransformers() |
|
|
if if(!var6 && !var8) |
static |
void |
loadEarlyPluginsvoid loadEarlyPlugins(@Nonnull String[] var0) |
static |
List<Path> |
parseEarlyPluginPathsList<Path> parseEarlyPluginPaths(@Nonnull String[] var0) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.plugin.early;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.io.Console;
class="kw">import java.io.IOException;
class="kw">import java.net.URL;
class="kw">import java.net.URLClassLoader;
class="kw">import java.nio.file.DirectoryStream;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.util.Collections;
class="kw">import java.util.Comparator;
class="kw">import java.util.List;
class="kw">import java.util.ServiceLoader;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class="kw">final class EarlyPluginLoader {
@Nonnull
class="kw">public class="kw">static class="kw">final Path EARLY_PLUGINS_PATH = Path.of("earlyplugins");
@Nonnull
class="kw">private class="kw">static class="kw">final List<ClassTransformer> transformers = new ObjectArrayList();
@Nullable
class="kw">private class="kw">static URLClassLoader pluginClassLoader;
class="kw">private EarlyPluginLoader() {
}
class="kw">public class="kw">static void loadEarlyPlugins(@Nonnull String[] var0) {
ObjectArrayList var1 = new ObjectArrayList();
collectPluginJars(EARLY_PLUGINS_PATH, var1);
for (Path var3 : parseEarlyPluginPaths(var0)) {
collectPluginJars(var3, var1);
}
if (!var1.isEmpty()) {
pluginClassLoader = new URLClassLoader((URL[])var1.toArray(URL[]::new), EarlyPluginLoader.class.getClassLoader());
for (ClassTransformer var7 : ServiceLoader.load(ClassTransformer.class, pluginClassLoader)) {
System.out.println("[EarlyPlugin] Loading transformer: " + var7.getClass().getName() + " (priority=" + var7.priority() + ")");
transformers.add(var7);
}
transformers.sort(Comparator.comparingInt(ClassTransformer::priority).reversed());
if (!transformers.isEmpty()) {
System.err
.printf(
"===============================================================================================\n Loaded %d class transformer(s)!!\n===============================================================================================\n This is unsupported and may cause stability issues.\n Use at your own risk!!\n===============================================================================================\n",
transformers.size()
);
boolean var6 = hasFlag(var0, "--singleplayer");
boolean var8 = hasFlag(var0, "--accept-early-plugins");
if (!var6 && !var8) {
Console var4 = System.console();
if (!var4.isTerminal()) {
System.err.println("ERROR: Early plugins require interactive confirmation, but no console is available.");
System.err.println("Pass --accept-early-plugins to accept the risk and class="kw">continue.");
System.exit(1);
}
System.err.print("Press ENTER to accept and class="kw">continue...");
var4.readLine();
}
}
}
}
class="kw">private class="kw">static List<Path> parseEarlyPluginPaths(@Nonnull String[] var0) {
ObjectArrayList var1 = new ObjectArrayList();
for (int var2 = 0; var2 < var0.length; var2++) {
if (var0[var2].equals("--early-plugins") && var2 + 1 < var0.length) {
for (String var11 : var0[var2 + 1].split(",", 0)) {
var1.add(Path.of(var11.trim()));
}
} else if (var0[var2].startsWith("--early-plugins=")) {
String var3 = var0[var2].substring("--early-plugins=".length());
for (String var7 : var3.split(",", 0)) {
var1.add(Path.of(var7.trim()));
}
}
}
class="kw">return var1;
}
class="kw">private class="kw">static boolean hasFlag(String[] var0, String var1) {
for (String var5 : var0) {
if (var5.equals(var1)) {
class="kw">return true;
}
}
class="kw">return false;
}
class="kw">private class="kw">static void collectPluginJars(Path var0, List<URL> var1) {
if (Files.isDirectory(var0)) {
try (DirectoryStream var2 = Files.newDirectoryStream(var0, "*.jar")) {
for (Path var4 : var2) {
if (Files.isRegularFile(var4)) {
var1.add(var4.toUri().toURL());
System.out.println("[EarlyPlugin] Found: " + var4.getFileName());
}
}
} catch (IOException var7) {
System.err.println("[EarlyPlugin] Failed to scan directory " + var0 + ": " + var7.getMessage());
}
}
}
class="kw">public class="kw">static boolean hasTransformers() {
class="kw">return !transformers.isEmpty();
}
class="kw">public class="kw">static List<ClassTransformer> getTransformers() {
class="kw">return Collections.unmodifiableList(transformers);
}
@Nullable
class="kw">public class="kw">static URLClassLoader getPluginClassLoader() {
class="kw">return pluginClassLoader;
}
}