How do I reduce lag with my OnJoin class?

Discussion in 'Plugin Development' started by Agentleader1, Mar 27, 2015.

Thread Status:
Not open for further replies.
  1. Offline

    Agentleader1

    My OnJoin class is clearly causing lag, because 65% of the time, when I join the server, it keeps me imobilized and does scoreboard flashing. Then, it teleports me, after like 5-30+ seconds.

    Code (open)

    Code:
    package com.Agentleader1.DarkThunder.Listeners;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.logging.Logger;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.inventory.meta.SkullMeta;
    import org.bukkit.potion.PotionEffectType;
    import org.bukkit.util.Vector;
    
    import com.Agentleader1.DarkThunder.Main;
    import com.Agentleader1.DarkThunder.ScoreboardManagement;
    
    import ru.tehkode.permissions.PermissionUser;
    import ru.tehkode.permissions.bukkit.PermissionsEx;
    @SuppressWarnings({"deprecation"})
    public class OnJoin implements Listener{
        private HashMap<String, Boolean> muted = Main.instance.muted;
        private FileConfiguration config = Main.instance.getConfig();
        private HashMap<String, Integer> pvpswordlevel = Main.instance.pvpswordlevel;
        private HashMap<String, Integer> armorlevel = Main.instance.armorlevel;
        private String pluginprefix = Main.instance.pluginprefix;
        private HashMap<String, Boolean> pvp = Main.instance.pvp;
        private ArrayList<Player> hide_players = Main.instance.hide_players;
        private HashMap<String, Boolean> doublejumping = Main.instance.doublejumping;
        private ItemStack paintballgun = Main.instance.paintballgun;
        private ItemStack specialgadgets = Main.instance.specialgadgets;
        private final Logger logger = Main.instance.logger;
        private HashMap<String, Boolean> shoot = Main.instance.shoot;
        private HashMap<String, Boolean> reloading = Main.instance.reloading;
        private HashMap<String, Boolean> doublejumped = Main.instance.doublejumped;
        private HashMap<String, Integer> Tokens = Main.instance.tokens;
        private HashMap<String, Integer> flyingup = Main.instance.flyingup;
        public void saveConfig(){
            Main.instance.saveConfig();
        }
        @EventHandler
        public void onJoin(PlayerJoinEvent pje){
            flyingup.put(pje.getPlayer().getName(), 0);
            Main.instance.doublejumpmode.put(pje.getPlayer().getUniqueId().toString(), "Forward");
            final Player player = pje.getPlayer();
            try{
                int tokens = config.getInt("Tokens." + player.getUniqueId().toString() + ".Count");
                Tokens.put(player.getName(), tokens);
            }catch(Exception ex){
                config.set("Tokens." + player.getUniqueId().toString() + ".Count", 0);
                Tokens.put(player.getName(), 0);
            }
            doublejumped.put(player.getName(), false);
            doublejumping.put(player.getName(), false);
            player.removePotionEffect(PotionEffectType.SPEED);
            muted.put(player.getName(), false);
            saveConfig();
            Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "clear " + player.getName());
            try{
                int x = config.getInt("PvP." + player.getUniqueId().toString() + ".Sword");
                if(x == 0){
                    x = 1;
                }
                pvpswordlevel.put(player.getUniqueId().toString(), x);
                pvpswordlevel.put(player.getName(), x);
            }catch(Exception ex){
                pvpswordlevel.put(player.getUniqueId().toString(), 1);
                pvpswordlevel.put(player.getName(), 1);
                config.set("PvP." + player.getUniqueId().toString() + ".Sword", 1);
                saveConfig();
            }
            try{
                int x = config.getInt("PvP." + player.getUniqueId().toString() + ".Armor");
                if(x == 0){
                    x = 1;
                }
                armorlevel.put(player.getUniqueId().toString(), x);
                armorlevel.put(player.getName(), x);
            }catch(Exception ex){
                armorlevel.put(player.getUniqueId().toString(), 1);
                armorlevel.put(player.getName(), 1);
                config.set("PvP." + player.getUniqueId().toString() + ".Armor", 1);
                saveConfig();
            }
            try {
                PermissionUser pexuser = PermissionsEx.getUser(player);
                for(Player pl: Bukkit.getOnlinePlayers()){
                    if(pl.isOp()){
    
                            pl.sendMessage(pluginprefix + ChatColor.DARK_GRAY + "Join> " + ChatColor.RESET + pexuser.getPrefix().replace("&", "ยง") + ChatColor.RESET + " " + player.getDisplayName());
                       
                    }
                }
                    pje.setJoinMessage("");
    
            } catch (Exception e) {
            }
            pvp.put(player.getName(), false);
            doublejumping.put(player.getName(), true);
            player.setFlying(false);
            try{
                Bukkit.getScheduler().scheduleSyncDelayedTask(Main.instance, new Runnable(){
                    public void run(){
                        player.removePotionEffect(PotionEffectType.SPEED);
                        config.set(player.getUniqueId().toString(), true);
                        saveConfig();
                        Location spawn = new Location(Bukkit.getWorld("Lobby"), -152.5, 222, 268.5);
                        spawn.setDirection(new Vector(0, 0, 1));
                        player.teleport(spawn);
                        player.setExp(1);
                        //player.teleport(new Location(Bukkit.getWorld("Main"), -195.5, 66, 236.5));
                        player.setCompassTarget(spawn);
                        player.setAllowFlight(true);
                        player.setFlying(false);
                            player.getInventory().clear();
                            ItemStack Warp_Compass = new ItemStack(345);                   //quick teleport gamemodes
                            final ItemMeta im = Warp_Compass.getItemMeta();
                            im.setDisplayName(ChatColor.AQUA + "" + ChatColor.BOLD + "GameModes");
                            Warp_Compass.setItemMeta(im);
                            player.getInventory().setHeldItemSlot(1);
                            player.getInventory().addItem(Warp_Compass);
                                player.getInventory().setHeldItemSlot(8);
                                ItemStack stuff = new ItemStack(378);                      //stacker- to be fixed
                                ItemStack torch = new ItemStack(50);                       //show or hide players
                                ItemStack sword = new ItemStack(276);                      //enable or disable pvp
                                ItemMeta swordness = sword.getItemMeta();
                                swordness.setDisplayName(ChatColor.DARK_PURPLE + "Drop this item to Enable/Disable PvP!");
                                java.util.List<String> lore = Arrays.asList(ChatColor.AQUA + "Drop this sword to enable or disable PvP!");
                                swordness.setLore(lore);
                                ItemMeta im2 = stuff.getItemMeta();
                                ItemMeta torchmeta = torch.getItemMeta();
                                im2.setDisplayName(ChatColor.BLUE + "Double Jump Mode- " + ChatColor.YELLOW + "Forward");
                                torchmeta.setDisplayName(ChatColor.GREEN + "Showing Players");
                                stuff.setItemMeta(im2);
                                torch.setItemMeta(torchmeta);
                                sword.setItemMeta(swordness);
                              //  player.getInventory().setItemInHand(stuff);
                                player.getInventory().setHeldItemSlot(8);
                                player.getInventory().setItemInHand(torch);
                                player.getInventory().setHeldItemSlot(1);
                                player.getInventory().setHeldItemSlot(0);
                                player.getInventory().setItemInHand(sword);
                                player.getInventory().setHeldItemSlot(0);
                                player.getInventory().setHeldItemSlot(1);
                                player.getInventory().setItemInHand(Warp_Compass);
                                player.getInventory().setHeldItemSlot(3);
                                player.getInventory().setItemInHand(paintballgun);
                                player.getInventory().setHeldItemSlot(4);
                                player.getInventory().setItemInHand(specialgadgets);
                              player.getInventory().setHeldItemSlot(7);
                                /*ItemStack cookie = new ItemStack(357);                     // cookie clicker
                                ItemMeta cookieclicker = cookie.getItemMeta();
                                cookieclicker.setDisplayName(ChatColor.RED + "Cookie Clicker");
                                cookie.setItemMeta(cookieclicker);*/
                                player.getInventory().setItemInHand(stuff);
                                player.getInventory().setHeldItemSlot(0);
                              ItemStack[] armor = {new ItemStack(0), new ItemStack(0), new ItemStack(0), new ItemStack(0)};
                              player.getInventory().setArmorContents(armor);
                                player.updateInventory();
                    }
                }, 5);
            }catch(Exception ex){
                logger.info("Error at teleporting!");   
            }
                    try{
                        Bukkit.getScheduler().scheduleSyncDelayedTask(Main.instance, new Runnable(){
                            public void run(){
                              updateScoreboard(player);
                            }
                        }, 65);
           
                    }catch(Exception ex){
                        logger.info("Error at scoreboard");
                    }
           
            try{
                        for(Player p : hide_players){
                p.hidePlayer(player);
            }
            }catch(Exception ex){
                logger.info("ERRRRRRRRRROOOOOOOORRRRR!");
            }
           
            }
        public void updateScoreboard(Player player){
            (new ScoreboardManagement()).updateScoreboard(player);
        }
        @EventHandler
        public void onJoinSetScoreboard(PlayerJoinEvent pje){Player player = pje.getPlayer();
        try{
            for(Player pl: Bukkit.getOnlinePlayers()){
                Inventory inv = pl.getOpenInventory().getTopInventory();
                if(inv.getName().equalsIgnoreCase(ChatColor.DARK_PURPLE + "Quick Kick")||
                        inv.getTitle().equalsIgnoreCase(ChatColor.DARK_PURPLE + "Quick Kick")){
                    inv.clear();
                    Bukkit.getScheduler().scheduleSyncDelayedTask(Main.instance, new Runnable(){
                        public void run(){
                            for(Player play: Bukkit.getOnlinePlayers()){
                        ItemStack head = new ItemStack(397, 1, (byte) 3);
                        SkullMeta skull = (SkullMeta) head.getItemMeta();
                        skull.setOwner(play.getName());
                        skull.setLore(Arrays.asList(ChatColor.RED + "Click to quick kick " + Bukkit.getPlayer(skull.getOwner()).getDisplayName()));
                        head.setItemMeta(skull);
                        inv.addItem(head);
                    }
                    pl.openInventory(inv);
                        }
                    }, 2);
                   
                }else if(inv.getName().equalsIgnoreCase(ChatColor.DARK_BLUE + "Teleport to Player") ||
                        inv.getTitle().equalsIgnoreCase(ChatColor.DARK_BLUE + "Teleport to Player")){
                    Inventory tpplayer = pl.getOpenInventory().getTopInventory();
                        tpplayer.clear();
                        Bukkit.getScheduler().scheduleSyncDelayedTask(Main.instance, new Runnable(){
                            public void run(){
                                for(Player play: Bukkit.getOnlinePlayers()){
                                    ItemStack head = new ItemStack(397, 1, (byte) 3);
                                    SkullMeta skull = (SkullMeta) head.getItemMeta();
                                    skull.setOwner(play.getName());
                                    skull.setLore(Arrays.asList(ChatColor.DARK_BLUE + "Click to teleport to " + Bukkit.getPlayer(skull.getOwner()).getDisplayName()));
                                    head.setItemMeta(skull);
                                    tpplayer.addItem(head);
                                }
                                pl.openInventory(tpplayer);
                        }
                    }, 2);
               
                }
            }
        }catch(Exception ex){
        }
        shoot.put(player.getName(), true);
        reloading.put(player.getName(), false);
        shoot.put(player.getUniqueId().toString(), true);
        reloading.put(player.getUniqueId().toString(), false);
        if(!(player.hasPlayedBefore())){
            config.set("Boltz." + player.getUniqueId().toString(), 100);
        }
        int x;
        try{
            x = config.getInt("Boltz." + player.getUniqueId().toString());
        }catch(Exception ex){
            x = 100;
            config.set("Boltz." + player.getUniqueId().toString(), x);
            saveConfig();
            }
        if(config.getInt("Boltz." + player.getUniqueId().toString()) == 0){
            config.set("Boltz." + player.getUniqueId().toString(), 100);
        }
              }
    }
    


    Now, what section of the code might be causing the most lag? And how should I make the code more efficient and less laggy?
     
  2. @Agentleader1 Well, I can tell you one thing. All of it is causing the lag. Maybe try seperating different things like scoreboard, into different classes?
     
  3. Offline

    Monkey_Swag

    What's with all your tries and catches? They are completely redundant.
     
    Msrules123 likes this.
  4. Offline

    Protophite

    Oh my dear god
     
    GrandmaJam, teej107, jthort and 3 others like this.
  5. Offline

    jthort

    So why do you.. wait what..

    /thread
     
  6. Offline

    Agentleader1

  7. Offline

    dlange

  8. Offline

    jthort

  9. Offline

    mythbusterma

    @Agentleader1

    You write it again, from the ground up. Without all the redundant code, logic errors, public static members, and actually use OOP principles.

    How about you write some working code before you make it even more spaghetti, yea?
     
  10. Offline

    Protophite

    @Agentleader1
    I understand what you are trying to do, but you are right. I don't understand your code, beceause its beyond bad.
     
Thread Status:
Not open for further replies.

Share This Page