Search in sources :

Example 1 with LibraryLoader

use of me.devtec.shared.utility.LibraryLoader in project TheAPI by TheDevTec.

the class BukkitLoader method initTheAPI.

private static void initTheAPI(JavaPlugin plugin) {
    // OfflineCache support!
    API.initOfflineCache(Bukkit.getOnlineMode(), new Config("plugins/TheAPI/Cache.dat"));
    Ref.init(Ref.getClass("net.md_5.bungee.api.ChatColor") != null ? (Ref.getClass("net.kyori.adventure.Adventure") != null ? ServerType.PAPER : ServerType.SPIGOT) : ServerType.BUKKIT, // Server version
    Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]);
    if (Ref.serverType() != ServerType.BUKKIT)
        ComponentAPI.init((Bungee<?>) Ref.newInstanceByClass(Ref.getClass("me.devtec.shared.components.BungeeComponentAPI")), Ref.serverType() == ServerType.PAPER ? (Adventure<?>) Ref.newInstanceByClass(Ref.getClass("me.devtec.shared.components.AdventureComponentAPI")) : null);
    if (Ref.isNewerThan(7))
        // Modern version of Guava
        Json.init(new ModernJsonReader(), new ModernJsonWriter());
    else
        // Old version of Guava
        Json.init((JReader) Ref.newInstanceByClass(Ref.getClass("me.devtec.shared.json.legacy.LegacyJsonReader")), (JWriter) Ref.newInstanceByClass(Ref.getClass("me.devtec.shared.json.legacy.LegacyJsonWriter")));
    API.library = new LibraryLoader() {

        List<File> loaded = new ArrayList<>();

        ImplementableJar jar;

        SimpleClassLoader lloader;

        @Override
        public void load(File file) {
            if (isLoaded(file) || !file.exists())
                return;
            loaded.add(file);
            ClassLoader loader = plugin.getClass().getClassLoader();
            if (getJavaVersion() <= 15) {
                if (addUrl == null)
                    addUrl = Ref.method(URLClassLoader.class, "addURL", URL.class);
                try {
                    // Simple!
                    Ref.invoke(loader, addUrl, file.toURI().toURL());
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                }
            } else {
                if (Ref.isNewerThan(16) || Ref.isNewerThan(15) && Ref.serverType() == ServerType.PAPER) {
                    // 1.16.X with Paper or 1.17 and newer
                    if (lloader == null) {
                        try {
                            lloader = new SimpleClassLoader(new URL[] { file.toURI().toURL() });
                        } catch (MalformedURLException e) {
                            e.printStackTrace();
                        }
                        Ref.set(loader, "library", lloader);
                    } else
                        try {
                            lloader.addURL(file.toURI().toURL());
                        } catch (MalformedURLException e) {
                            e.printStackTrace();
                        }
                }
                try {
                    // Just small hack for modern Java.. - Does not working for files inside jar
                    if (jar == null) {
                        jar = new ImplementableJar((File) Ref.get(loader, "file"));
                        Ref.set(loader, "manifest", jar);
                        Ref.set(loader, "jar", jar);
                    }
                    jar.file.add(new JarFile(file));
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        @Override
        public boolean isLoaded(File file) {
            return loaded.contains(file);
        }
    };
    API.basics().load();
    StringUtils.rainbowSplit = Pattern.compile("(#[A-Fa-f0-9]{6}([&§][K-Ok-oRr])*|[&§][Xx]([&§][A-Fa-f0-9]){6}([&§][K-Ok-oRr])*|[&§][A-Fa-f0-9K-ORrk-oUuXx]([&§][K-Ok-oRr])*)");
    StringUtils.color = new ColormaticFactory() {

        char[] characters = "abcdef0123456789".toCharArray();

        Random random = new Random();

        Pattern getLast = Pattern.compile("(#[A-Fa-f0-9k-oK-ORrXxUu]{6}|§[Xx](§[A-Fa-f0-9k-oK-ORrXxUu]){6}|§[A-Fa-f0-9k-oK-ORrXxUu]|&[Uu])"), hex = Pattern.compile("(#[a-fA-F0-9]{6})");

        @Override
        public String gradient(String msg, String fromHex, String toHex) {
            return API.basics().gradient(msg, fromHex, toHex);
        }

        @Override
        public String generateColor() {
            StringBuilder b = new StringBuilder("#");
            for (int i = 0; i < 6; ++i) b.append(characters[random.nextInt(16)]);
            return b.toString();
        }

        @Override
        public String[] getLastColors(String text) {
            return API.basics().getLastColors(getLast, text);
        }

        @Override
        public String replaceHex(String msg) {
            Matcher match = hex.matcher(msg);
            while (match.find()) {
                String color = match.group();
                String hex = "§x";
                for (char c : color.substring(1).toCharArray()) hex += "§" + c;
                msg = msg.replace(color, hex);
            }
            return msg;
        }
    };
}
Also used : ModernJsonReader(me.devtec.shared.json.modern.ModernJsonReader) MalformedURLException(java.net.MalformedURLException) Matcher(java.util.regex.Matcher) Config(me.devtec.shared.dataholder.Config) Bungee(me.devtec.shared.components.Bungee) ArrayList(java.util.ArrayList) LibraryLoader(me.devtec.shared.utility.LibraryLoader) URL(java.net.URL) Random(java.util.Random) ColormaticFactory(me.devtec.shared.utility.StringUtils.ColormaticFactory) URLClassLoader(java.net.URLClassLoader) JReader(me.devtec.shared.json.JReader) Pattern(java.util.regex.Pattern) JWriter(me.devtec.shared.json.JWriter) IOException(java.io.IOException) JarFile(java.util.jar.JarFile) ModernJsonWriter(me.devtec.shared.json.modern.ModernJsonWriter) URLClassLoader(java.net.URLClassLoader) JarFile(java.util.jar.JarFile) File(java.io.File)

Example 2 with LibraryLoader

use of me.devtec.shared.utility.LibraryLoader in project TheAPI by TheDevTec.

the class BungeeLoader method initTheAPI.

public static void initTheAPI() {
    // OfflineCache support!
    API.initOfflineCache(ProxyServer.getInstance().getConfig().isOnlineMode(), new Config("plugins/TheAPI/Cache.dat"));
    // Server version
    Ref.init(ServerType.BUNGEECORD, Ref.getClass("io.github.waterfallmc.waterfall.log4j.WaterfallLogger") != null ? "WaterFall" : "BungeeCord");
    ComponentAPI.init(new BungeeComponentAPI<>(), null);
    // Modern version of Guava
    Json.init(new ModernJsonReader(), new ModernJsonWriter());
    API.library = new LibraryLoader() {

        List<File> loaded = new ArrayList<>();

        Constructor<?> c = Ref.constructor(Ref.getClass("net.md_5.bungee.api.plugin.PluginClassloader"), ProxyServer.class, PluginDescription.class, URL[].class);

        @Override
        public void load(File file) {
            if (isLoaded(file) || !file.exists())
                return;
            loaded.add(file);
            try {
                Ref.newInstance(c, null, null, new URL[] { file.toURI().toURL() });
            } catch (MalformedURLException e) {
                e.printStackTrace();
            }
        }

        @Override
        public boolean isLoaded(File file) {
            return loaded.contains(file);
        }
    };
    API.basics().load();
    StringUtils.rainbowSplit = Pattern.compile("(#[A-Fa-f0-9]{6}([&§][K-Ok-oRr])*|[&§][Xx]([&§][A-Fa-f0-9]){6}([&§][K-Ok-oRr])*|[&§][A-Fa-f0-9K-ORrk-oUuXx]([&§][K-Ok-oRr])*)");
    StringUtils.color = new ColormaticFactory() {

        char[] characters = "abcdef0123456789".toCharArray();

        Random random = new Random();

        Pattern getLast = Pattern.compile("(#[A-Fa-f0-9k-oK-ORrXxUu]{6}|§[Xx](§[A-Fa-f0-9k-oK-ORrXxUu]){6}|§[A-Fa-f0-9k-oK-ORrXxUu]|&[Uu])"), hex = Pattern.compile("(#[a-fA-F0-9]{6})");

        @Override
        public String gradient(String msg, String fromHex, String toHex) {
            return API.basics().gradient(msg, fromHex, toHex);
        }

        @Override
        public String generateColor() {
            StringBuilder b = new StringBuilder("#");
            for (int i = 0; i < 6; ++i) b.append(characters[random.nextInt(16)]);
            return b.toString();
        }

        @Override
        public String[] getLastColors(String text) {
            return API.basics().getLastColors(getLast, text);
        }

        @Override
        public String replaceHex(String msg) {
            Matcher match = hex.matcher(msg);
            while (match.find()) {
                String color = match.group();
                String hex = "§x";
                for (char c : color.substring(1).toCharArray()) hex += "§" + c;
                msg = msg.replace(color, hex);
            }
            return msg;
        }
    };
}
Also used : ModernJsonReader(me.devtec.shared.json.modern.ModernJsonReader) Pattern(java.util.regex.Pattern) MalformedURLException(java.net.MalformedURLException) Matcher(java.util.regex.Matcher) Config(me.devtec.shared.dataholder.Config) ArrayList(java.util.ArrayList) LibraryLoader(me.devtec.shared.utility.LibraryLoader) URL(java.net.URL) Random(java.util.Random) ModernJsonWriter(me.devtec.shared.json.modern.ModernJsonWriter) ColormaticFactory(me.devtec.shared.utility.StringUtils.ColormaticFactory) File(java.io.File)

Example 3 with LibraryLoader

use of me.devtec.shared.utility.LibraryLoader in project TheAPI by TheDevTec.

the class VelocityLoader method initTheAPI.

public static void initTheAPI(ProxyServer server) {
    // OfflineCache support!
    API.initOfflineCache(server.getConfiguration().isOnlineMode(), new Config("plugins/TheAPI/Cache.dat"));
    // Server version
    Ref.init(ServerType.VELOCITY, "Velocity");
    ComponentAPI.init(null, new AdventureComponentAPI<>());
    // Modern version of Guava
    Json.init(new ModernJsonReader(), new ModernJsonWriter());
    API.library = new LibraryLoader() {

        List<File> loaded = new ArrayList<>();

        @SuppressWarnings("resource")
        @Override
        public void load(File file) {
            if (isLoaded(file) || !file.exists())
                return;
            loaded.add(file);
            try {
                new PluginClassLoader(new URL[] { file.toURI().toURL() }).addToClassloaders();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            }
        }

        @Override
        public boolean isLoaded(File file) {
            return loaded.contains(file);
        }
    };
    API.basics().load();
    StringUtils.rainbowSplit = Pattern.compile("(&?#[A-Fa-f0-9]{6}([&§][K-Ok-oRr])*|[&§][Xx]([&§][A-Fa-f0-9]){6}([&§][K-Ok-oRr])*|[&§][A-Fa-f0-9K-ORrk-oUuXx]([&§][K-Ok-oRr])*)");
    StringUtils.color = new ColormaticFactory() {

        char[] characters = "abcdef0123456789".toCharArray();

        Random random = new Random();

        Pattern getLast = Pattern.compile("(&?#[A-Fa-f0-9k-oK-ORrXxUu]{6}|§[Xx](§[A-Fa-f0-9k-oK-ORrXxUu]){6}|§[A-Fa-f0-9k-oK-ORrXxUu]|&[Uu])"), hex = Pattern.compile("(&?#[a-fA-F0-9]{6})");

        @Override
        public String gradient(String msg, String fromHex, String toHex) {
            return API.basics().gradient(msg, fromHex, toHex);
        }

        @Override
        public String generateColor() {
            StringBuilder b = new StringBuilder("&#");
            for (int i = 0; i < 6; ++i) b.append(characters[random.nextInt(16)]);
            return b.toString();
        }

        @Override
        public String[] getLastColors(String text) {
            return API.basics().getLastColors(getLast, text);
        }

        @Override
        public String replaceHex(String msg) {
            Matcher match = hex.matcher(msg);
            while (match.find()) {
                String color = match.group();
                if (!color.startsWith("&"))
                    msg = msg.replace(color, "&" + color);
            }
            return msg;
        }
    };
}
Also used : ModernJsonReader(me.devtec.shared.json.modern.ModernJsonReader) Pattern(java.util.regex.Pattern) MalformedURLException(java.net.MalformedURLException) Matcher(java.util.regex.Matcher) Config(me.devtec.shared.dataholder.Config) ArrayList(java.util.ArrayList) LibraryLoader(me.devtec.shared.utility.LibraryLoader) Random(java.util.Random) ModernJsonWriter(me.devtec.shared.json.modern.ModernJsonWriter) ColormaticFactory(me.devtec.shared.utility.StringUtils.ColormaticFactory) File(java.io.File) PluginClassLoader(com.velocitypowered.proxy.plugin.PluginClassLoader)

Aggregations

File (java.io.File)3 MalformedURLException (java.net.MalformedURLException)3 ArrayList (java.util.ArrayList)3 Random (java.util.Random)3 Matcher (java.util.regex.Matcher)3 Pattern (java.util.regex.Pattern)3 Config (me.devtec.shared.dataholder.Config)3 ModernJsonReader (me.devtec.shared.json.modern.ModernJsonReader)3 ModernJsonWriter (me.devtec.shared.json.modern.ModernJsonWriter)3 LibraryLoader (me.devtec.shared.utility.LibraryLoader)3 ColormaticFactory (me.devtec.shared.utility.StringUtils.ColormaticFactory)3 URL (java.net.URL)2 PluginClassLoader (com.velocitypowered.proxy.plugin.PluginClassLoader)1 IOException (java.io.IOException)1 URLClassLoader (java.net.URLClassLoader)1 JarFile (java.util.jar.JarFile)1 Bungee (me.devtec.shared.components.Bungee)1 JReader (me.devtec.shared.json.JReader)1 JWriter (me.devtec.shared.json.JWriter)1