Search in sources :

Example 1 with Config

use of me.devtec.shared.dataholder.Config 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 Config

use of me.devtec.shared.dataholder.Config 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 Config

use of me.devtec.shared.dataholder.Config in project TheAPI by TheDevTec.

the class Client method reconnect.

public void reconnect(int trottle) {
    exit();
    new Thread(new Runnable() {

        int c = 0;

        public void run() {
            while (API.enabled && c < trottle) {
                try {
                    s = new Socket(ip, port);
                    closed = false;
                } catch (Exception e2) {
                    ++c;
                    try {
                        Thread.sleep(3000);
                    } catch (Exception e) {
                    }
                    continue;
                }
                if (isConnected()) {
                    try {
                        receive = new BufferedReader(new InputStreamReader(s.getInputStream()));
                        send = new PrintWriter(s.getOutputStream(), true);
                        send.println("login:" + name);
                        send.flush();
                        send.println("password:" + pas);
                        send.flush();
                        if (receive.readLine() != null) {
                            // logged in
                            logged = true;
                            if (postQueue != null && !postQueue.isEmpty()) {
                                for (String s : postQueue) {
                                    send.println(s);
                                    send.flush();
                                }
                                postQueue.clear();
                            }
                        }
                    } catch (Exception e) {
                        try {
                            s.close();
                        } catch (Exception e1) {
                        }
                        continue;
                    }
                    new Thread(new Runnable() {

                        public void run() {
                            while (isConnected()) {
                                try {
                                    Thread.sleep(100);
                                } catch (Exception e1) {
                                }
                                try {
                                    String read = receive.readLine();
                                    if (read == null)
                                        continue;
                                    if (read.equals("exit")) {
                                        closed = true;
                                        break;
                                    }
                                    Config reader = new Config();
                                    reader.reload(read);
                                    read(reader);
                                } catch (Exception e) {
                                }
                            }
                            reconnect(trottle);
                        }
                    }).start();
                    break;
                }
            }
        }
    }).start();
}
Also used : InputStreamReader(java.io.InputStreamReader) Config(me.devtec.shared.dataholder.Config) BufferedReader(java.io.BufferedReader) Socket(java.net.Socket) PrintWriter(java.io.PrintWriter)

Example 4 with Config

use of me.devtec.shared.dataholder.Config in project TheAPI by TheDevTec.

the class ClientHandler method run.

@Override
public void run() {
    while (isConnected()) {
        try {
            String read = dis.readLine();
            if (read == null)
                continue;
            if (read.startsWith("login:")) {
                if (!access) {
                    access = true;
                    name = read.substring(6);
                }
                continue;
            }
            if (read.startsWith("password:")) {
                if (access && !accessFull && ser.pas.equals(read.substring(9)))
                    accessFull = true;
                dos.println("logged");
                dos.flush();
                if (postQueue != null && !postQueue.isEmpty()) {
                    for (String s : postQueue) dos.println(s);
                    dos.flush();
                    postQueue.clear();
                }
                continue;
            }
            if (read.equals("exit")) {
                closed = true;
                break;
            }
            if (access && accessFull) {
                Config data = new Config();
                data.reload(read);
                ser.read(c, data);
            }
        } catch (Exception e) {
            break;
        }
    }
    exit();
}
Also used : Config(me.devtec.shared.dataholder.Config)

Example 5 with Config

use of me.devtec.shared.dataholder.Config in project TheAPI by TheDevTec.

the class BukkitLoader method onLoad.

public void onLoad() {
    initTheAPI(this);
    new Metrics(this, 10581);
    boolean mohist = false;
    try {
        if (Class.forName("com.mohistmc.MohistMC", true, getClassLoader()) != null)
            mohist = true;
    } catch (Exception | NoClassDefFoundError err) {
    }
    try {
        nmsProvider = (NmsProvider) Class.forName("me.devtec.theapi.bukkit.nms." + Ref.serverVersion() + (mohist ? "_Mohist" : ""), true, getClassLoader()).newInstance();
    } catch (InstantiationException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    if (nmsProvider != null)
        nmsProvider.loadParticles();
    if (new File("spigot.yml").exists() && new Config("spigot.yml").getBoolean("settings.late-bind")) {
        new Thread(() -> {
            // ASYNC
            if (Ref.isNewerThan(7))
                handler = new PacketHandler_New(true);
            else
                handler = (PacketHandler<?>) Ref.newInstanceByClass("me.devtec.theapi.bukkit.packetlistener.PacketHandler_Legacy", true);
        }).start();
    } else {
        if (Ref.isNewerThan(7))
            handler = new PacketHandler_New(false);
        else
            handler = (PacketHandler<?>) Ref.newInstanceByClass("me.devtec.theapi.bukkit.packetlistener.PacketHandler_Legacy", false);
    }
    resource = Ref.nmsOrOld("network.protocol.game.PacketPlayInResourcePackStatus", "PacketPlayInResourcePackStatus");
    close = Ref.nmsOrOld("network.protocol.game.PacketPlayInCloseWindow", "PacketPlayInCloseWindow");
    click = Ref.nmsOrOld("network.protocol.game.PacketPlayInWindowClick", "PacketPlayInWindowClick");
    itemname = Ref.nmsOrOld("network.protocol.game.PacketPlayInItemName", "PacketPlayInItemName");
    airBlock = Ref.invoke(Ref.getNulled(Ref.field(Ref.nmsOrOld("world.level.block.Block", "Block"), "AIR")), "getBlockData");
    if (airBlock == null)
        airBlock = Ref.getNulled(Ref.field(Ref.nmsOrOld("world.level.block.Blocks", "Blocks"), "AIR"));
    if (airBlock == null && Ref.isNewerThan(12))
        airBlock = Ref.invoke(Ref.get(Ref.cast(Ref.craft("block.data.CraftBlockData"), Bukkit.createBlockData(Material.AIR)), "state"), "getBlock");
    // BOSSBAR API: 1.7.10 - 1.8.8
    if (Ref.isOlderThan(9)) {
        new Tasker() {

            public void run() {
                for (BossBar s : bossbars) s.move();
            }
        }.runRepeating(0, 20);
    } else
        bossbars = null;
    new PacketListener() {

        @Override
        public boolean PacketPlayOut(String player, Object packet, Object channel) {
            return false;
        }

        public boolean isAllowedChatCharacter(char var0) {
            return var0 != 167 && var0 >= ' ' && var0 != 127;
        }

        public String buildText(String var0) {
            StringBuilder var1 = new StringBuilder();
            char[] var2 = var0.toCharArray();
            int var3 = var2.length;
            for (int var4 = 0; var4 < var3; ++var4) {
                char var5 = var2[var4];
                if (isAllowedChatCharacter(var5)) {
                    var1.append(var5);
                }
            }
            return var1.toString();
        }

        public boolean PacketPlayIn(String nick, Object packet, Object channel) {
            // NPC
            if (nick == null)
                return false;
            // ResourcePackAPI
            if (resource != null && packet.getClass() == resource) {
                Player player = Bukkit.getPlayer(nick);
                if (player == null)
                    return false;
                if (ResourcePackAPI.getResourcePack(player) == null || ResourcePackAPI.getHandlingPlayer(player) == null)
                    return false;
                ResourcePackAPI.getHandlingPlayer(player).onHandle(player, ResourcePackAPI.getResourcePack(player), ResourcePackResult.valueOf(Ref.isNewerThan(16) ? getLegacyNameOf(Ref.get(packet, Ref.isNewerThan(16) ? "a" : "status").toString()) : Ref.get(packet, Ref.isNewerThan(16) ? "a" : "status").toString()));
                return false;
            }
            // GUIS
            if (packet.getClass() == itemname) {
                Player player = Bukkit.getPlayer(nick);
                if (player == null)
                    return false;
                HolderGUI gui = BukkitLoader.gui.get(player.getUniqueId());
                if (gui != null && gui instanceof AnvilGUI) {
                    nmsProvider.postToMainThread(() -> {
                        ((AnvilGUI) gui).setRepairText(buildText(Ref.get(packet, "a") + ""));
                    });
                    return true;
                }
            }
            if (packet.getClass() == close) {
                Player player = Bukkit.getPlayer(nick);
                if (player == null)
                    return false;
                HolderGUI gui = BukkitLoader.gui.remove(player.getUniqueId());
                if (gui == null)
                    return false;
                gui.closeWithoutPacket(player);
                return true;
            }
            if (packet.getClass() == click) {
                Player player = Bukkit.getPlayer(nick);
                if (player == null)
                    return false;
                HolderGUI gui = BukkitLoader.gui.get(player.getUniqueId());
                return gui == null ? false : nmsProvider.processInvClickPacket(player, gui, packet);
            }
            return false;
        }

        private String getLegacyNameOf(String string) {
            switch(string.charAt(0)) {
                case 'a':
                    return "SUCCESSFULLY_LOADED";
                case 'b':
                    return "DECLINED";
                case 'c':
                    return "FAILED_DOWNLOAD";
                case 'd':
                    return "ACCEPTED";
            }
            return null;
        }
    }.register();
}
Also used : AnvilGUI(me.devtec.theapi.bukkit.gui.AnvilGUI) Player(org.bukkit.entity.Player) OfflinePlayer(org.bukkit.OfflinePlayer) HolderGUI(me.devtec.theapi.bukkit.gui.HolderGUI) Config(me.devtec.shared.dataholder.Config) BossBar(me.devtec.theapi.bukkit.bossbar.BossBar) PacketHandler_New(me.devtec.theapi.bukkit.packetlistener.PacketHandler_New) PacketListener(me.devtec.theapi.bukkit.packetlistener.PacketListener) MalformedURLException(java.net.MalformedURLException) IOException(java.io.IOException) Tasker(me.devtec.shared.scheduler.Tasker) PacketHandler(me.devtec.theapi.bukkit.packetlistener.PacketHandler) JarFile(java.util.jar.JarFile) File(java.io.File)

Aggregations

Config (me.devtec.shared.dataholder.Config)7 File (java.io.File)4 MalformedURLException (java.net.MalformedURLException)4 ArrayList (java.util.ArrayList)3 Random (java.util.Random)3 Matcher (java.util.regex.Matcher)3 Pattern (java.util.regex.Pattern)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 IOException (java.io.IOException)2 URL (java.net.URL)2 JarFile (java.util.jar.JarFile)2 PluginClassLoader (com.velocitypowered.proxy.plugin.PluginClassLoader)1 BufferedReader (java.io.BufferedReader)1 InputStreamReader (java.io.InputStreamReader)1 PrintWriter (java.io.PrintWriter)1 Socket (java.net.Socket)1 URLClassLoader (java.net.URLClassLoader)1