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;
   }
}