Help with map rollback

Discussion in 'Plugin Development' started by Funergy, Feb 21, 2014.

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

    Funergy

    Hey guys I have made a minigame TNTWars and I wanna rollback the map
    But the rollback doesn't work look at the end of the code
    Code:
    package me.Funergy.tntwars;
     
    import java.util.ArrayList;
    import java.util.Random;
    import java.util.logging.Logger;
     
    import org.bukkit.Bukkit;
    import org.bukkit.Location;
    import org.bukkit.Material;
    import org.bukkit.Sound;
    import org.bukkit.World;
    import org.bukkit.WorldCreator;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.PlayerDeathEvent;
    import org.bukkit.event.player.PlayerDropItemEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.event.player.PlayerQuitEvent;
    import org.bukkit.event.player.PlayerRespawnEvent;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.plugin.PluginDescriptionFile;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class Mainclass extends JavaPlugin implements Listener {
        public static Mainclass instance;
        public final Logger logger = Logger.getLogger("Minecraft");
        String world = "world";
        public ArrayList<String> red = new ArrayList<String>();
        public ArrayList<String> blue = new ArrayList<String>();
        public ArrayList<String> online = new ArrayList<String>();
        public ArrayList<String> spec = new ArrayList<String>();
        int start;
        int timer;
        public boolean starttimer;
        public int end2;
        public int number = 10;
        public int startgame = 1200;
        public static ItemStack tnt = new ItemStack(Material.TNT, 64);
        {
            ItemMeta imtnt = tnt.getItemMeta();
            imtnt.setDisplayName("§cTNT");
            tnt.setItemMeta(imtnt);
        }
        public static ItemStack redstone = new ItemStack(Material.REDSTONE, 64);
        {
            ItemMeta imredstone = redstone.getItemMeta();
            imredstone.setDisplayName("§5Redstone");
            redstone.setItemMeta(imredstone);
        }
        public static ItemStack button = new ItemStack(Material.STONE_BUTTON, 64);
        {
            ItemMeta imbutton = button.getItemMeta();
            imbutton.setDisplayName("§6Button");
            button.setItemMeta(imbutton);
        }
        public static ItemStack brick = new ItemStack(Material.BRICK, 64);
        {
            ItemMeta imbrick = brick.getItemMeta();
            imbrick.setDisplayName("§6Building Blocks");
            brick.setItemMeta(imbrick);
        }
        public static ItemStack water = new ItemStack(Material.WATER_BUCKET, 64);
        {
            ItemMeta imwater = water.getItemMeta();
            imwater.setDisplayName("§bWater");
            water.setItemMeta(imwater);
        }
        public static ItemStack repeater = new ItemStack(Material.DISPENSER, 64);
        {
            ItemMeta imdisp = repeater.getItemMeta();
            imdisp.setDisplayName("§2Dispenser");
            repeater.setItemMeta(imdisp);
        }
        public static ItemStack redtorch = new ItemStack(
                Material.REDSTONE_TORCH_ON, 64);
        {
            ItemMeta imredtorch = redtorch.getItemMeta();
            imredtorch.setDisplayName("§bRedstoneTorch");
            redtorch.setItemMeta(imredtorch);
        }
        public static ItemStack slab = new ItemStack(Material.LADDER, 64);
        {
            ItemMeta imslab = slab.getItemMeta();
            imslab.setDisplayName("§6Ladder");
            slab.setItemMeta(imslab);
        }
     
        public void onEnable() {
            Mainclass.instance = this;
            PluginDescriptionFile pdfFile = this.getDescription();
            this.logger.info(pdfFile.getName() + " Has Been Enabled!");
            for (String str : online) {
                Player online = Bukkit.getPlayer(str);
                org.bukkit.World world = online.getWorld();
                world.setAutoSave(false);
            }
            Bukkit.getPluginManager().registerEvents(this, this);
            for (Player p : Bukkit.getOnlinePlayers()) {
                p.getWorld().setPVP(false);
            }
            Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
     
                @Override
                public void run() {
                    Bukkit.broadcastMessage("§c[TNTWars] Wanna know how much time we have left do /time");
     
                }
     
            }, 600L, 1200L);
            Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
     
                @Override
                public void run() {
                    Bukkit.broadcastMessage("§c[TNTWars] Killing your own team with tnt will result a ban!");
     
                }
     
            }, 1200L, 1200L);
     
        }
     
        @EventHandler
        public void playerjoin(PlayerJoinEvent e) {
            online.add(e.getPlayer().getName());
            String player = e.getPlayer().getName();
            Player p = e.getPlayer();
            getConfig().options().copyDefaults(true);
            saveConfig();
            int xlobby = getConfig().getInt("xlobby");
            int ylobby = getConfig().getInt("ylobby");
            int zlobby = getConfig().getInt("zlobby");
            org.bukkit.World world = p.getWorld();
            p.teleport(new Location(world, xlobby, ylobby, zlobby));
            e.setJoinMessage(null);
     
            Bukkit.broadcastMessage(e.getPlayer().getName()
                    + " §6Has joined the game! [" + online.size()
                    + "/12]. 6 players to start");
            if (red.size() > blue.size()) {
                blue.add(player);
                p.sendRawMessage("§8You are in the §l§bBlue §8team!");
            } else if (red.size() < blue.size()) {
                red.add(player);
                p.sendRawMessage("§8You are in the §l§cRed §8team!");
            } else {
                Integer team = new Random().nextInt(2);
                if (team == 1) {
                    red.add(player);
                    p.sendRawMessage("§8You are in the §l§cRed §8team!");
                } else {
                    blue.add(player);
                    p.sendRawMessage("§8You are in the §l§bBlue §8team!");
                }
                if (online.size() == 1) {
                    enoughplayers();
                }
     
            }
        }
     
        public void enoughplayers() {
            if (!Bukkit.getScheduler().isQueued(start)) {
                Bukkit.broadcastMessage("§6Enough players online. Starting in 10 seconds");
                start = Bukkit.getScheduler().scheduleSyncRepeatingTask(this,
                        new Runnable() {
     
                            @Override
                            public void run() {
                                if (number != -1) {
                                    if (number != 0) {
                                        Bukkit.broadcastMessage("§6" + number);
                                        for (Player p : Bukkit.getOnlinePlayers()) {
                                            p.playSound(p.getLocation(),
                                                    Sound.ANVIL_LAND, 1, 1);
                                        }
                                        number--;
                                    } else {
                                        timer();
                                        startsound();
                                        Bukkit.broadcastMessage("§6Game Started. You have 20 minutes.");
                                        Bukkit.broadcastMessage("§cRemember this is a teaming game so don't kill your team with tnt or it will result a ban!");
                                        for (Player p : Bukkit.getOnlinePlayers()) {
                                            p.getInventory().addItem(tnt);
                                            p.getInventory().addItem(tnt);
                                            p.getInventory().addItem(tnt);
                                            p.getInventory().addItem(tnt);
                                            p.getInventory().addItem(redstone);
                                            p.getInventory().addItem(redstone);
                                            p.getInventory().addItem(button);
                                            p.getInventory().addItem(brick);
                                            p.getInventory().addItem(brick);
                                            p.getInventory().addItem(brick);
                                            p.getInventory().addItem(water);
                                            p.getInventory().addItem(repeater);
                                            p.getInventory().addItem(redtorch);
                                            p.getInventory().addItem(slab);
     
                                        }
                                        for (String str : red) {
                                            Player red = Bukkit.getPlayer(str);
                                            getConfig().options()
                                                    .copyDefaults(true);
                                            saveConfig();
                                            int x1 = getConfig().getInt("x1");
                                            int y1 = getConfig().getInt("y1");
                                            int z1 = getConfig().getInt("z1");
                                            org.bukkit.World world = red.getWorld();
                                            red.teleport(new Location(world, x1,
                                                    y1, z1));
                                        }
                                        for (String str : blue) {
                                            Player blue = Bukkit.getPlayer(str);
                                            getConfig().options()
                                                    .copyDefaults(true);
                                            saveConfig();
                                            int x2 = getConfig().getInt("x2");
                                            int y2 = getConfig().getInt("y2");
                                            int z2 = getConfig().getInt("z2");
                                            org.bukkit.World world = blue
                                                    .getWorld();
                                            blue.teleport(new Location(world, x2,
                                                    y2, z2));
                                        }
                                        starttimer = true;
     
                                        number--;
     
                                    }
                                }
     
                            }
     
                        }, 0, 20);
     
            }
        }
     
        public void timer() {
            timer = Bukkit.getScheduler().scheduleSyncRepeatingTask(this,
                    new Runnable() {
     
                        @Override
                        public void run() {
                            if (startgame != -1) {
                                if (startgame != 0) {
                                    startgame--;
                                } else {
                                    startgame--;
                                    Bukkit.broadcastMessage("§6Time is up nobody has won. Good luck next time!");
                                    ending();
                                    for (String str : red) {
                                        Player redE = Bukkit.getPlayer(str);
                                        red.remove(redE);
                                    }
                                    for (String str : blue) {
                                        Player blueE = Bukkit.getPlayer(str);
                                        blue.remove(blueE);
                                        for (Player p : Bukkit.getOnlinePlayers()) {
                                            p.getInventory().clear();
                                        }
     
                                    }
                                }
     
                            }
                            if (startgame == 900) {
                                Bukkit.broadcastMessage("§615 minutes left!");
                            }
                            if (startgame == 600) {
                                Bukkit.broadcastMessage("§610 minutes left!");
                            }
                            if (startgame == 300) {
                                Bukkit.broadcastMessage("§65 minutes left!");
                            }
     
                        }
     
                    }, 0, 20);
     
        }
     
        public void ending() {
            for (Player p : Bukkit.getOnlinePlayers()) {
                p.getInventory().clear();
            }
            Bukkit.broadcastMessage("ending");
            end2 = Bukkit.getScheduler().scheduleSyncDelayedTask(this,
                    new Runnable() {
     
                        @Override
                        public void run() {
                            for (Player p : Bukkit.getOnlinePlayers()) {
                                p.kickPlayer("The Game has ended!");
                                canceltask();
                            }
     
                            for (String str1 : red) {
                                Player redE = Bukkit.getPlayer(str1);
                                red.remove(redE);
                            }
                            for (String str : blue) {
                                Player blueE = Bukkit.getPlayer(str);
                                blue.remove(blueE);
     
                            }
                        }
     
                    }, 200);
     
        }
     
        public boolean onCommand(CommandSender sender, Command cmd, String label,
                String[] args) {
     
            // The following section is for declaring all the necessary variables.
            Player player = (Player) sender;
            getConfig().options().copyDefaults(true);
            saveConfig();
            if (cmd.getName().equalsIgnoreCase("setred")) {
                getConfig().set("x1", player.getLocation().getBlockX());
                getConfig().set("y1", player.getLocation().getBlockY());
                getConfig().set("z1", player.getLocation().getBlockZ());
                saveConfig();
                player.sendMessage("§cRed spawn set!");
     
            }
            if (cmd.getName().equalsIgnoreCase("setblue")) {
                getConfig().set("x2", player.getLocation().getBlockX());
                getConfig().set("y2", player.getLocation().getBlockY());
                getConfig().set("z2", player.getLocation().getBlockZ());
                saveConfig();
                player.sendMessage("§1Blue spawn set!");
     
            }
            if (cmd.getName().equalsIgnoreCase("setlobby")) {
                getConfig().set("xlobby", player.getLocation().getBlockX());
                getConfig().set("ylobby", player.getLocation().getBlockY());
                getConfig().set("zlobby", player.getLocation().getBlockZ());
                saveConfig();
                player.sendMessage("§6Lobby spawn set!");
     
            }
            if (cmd.getName().equalsIgnoreCase("time")) {
                Player p = (Player) sender;
                if (starttimer) {
                    p.sendRawMessage("§6The TnTWars game has §c" + startgame
                            + " seconds §6Left");
                } else {
                    p.sendRawMessage("§cThe game hasn't started yet!");
                }
            }
            return false;
        }
     
        @EventHandler
        public void onleave(PlayerQuitEvent e) {
            spec.remove(e.getPlayer().getName());
            e.getPlayer().getInventory().clear();
            online.remove(e.getPlayer().getName());
            e.setQuitMessage(null);
            if (starttimer) {
                if (red.contains(e.getPlayer().getName())) {
                    red.remove(e.getPlayer().getName());
                    Bukkit.broadcastMessage(e.getPlayer().getName()
                            + " §6Has died. Team §cRed §6" + red.size() + "§6/6");
                }
                if (blue.contains(e.getPlayer().getName())) {
                    blue.remove(e.getPlayer().getName());
                    Bukkit.broadcastMessage(e.getPlayer().getName()
                            + " §6Has died. Team §bBlue §6" + blue.size() + "§6/6");
                }
                if (red.size() == 0) {
                    Bukkit.broadcastMessage("§6Team §1Blue §6has won!!!");
                    Bukkit.broadcastMessage("§cYou will be kicked in 10 seconds");
                    starttimer = false;
                    ending();
                } else {
                    if (blue.size() == 0) {
                        Bukkit.broadcastMessage("§6Team §cRed §6has won!!!");
                        Bukkit.broadcastMessage("§cYou will be kicked in 10 seconds");
                        ending();
                        starttimer = false;
                    }
     
                }
            }
        }
     
        @EventHandler
        public void ondeath(PlayerRespawnEvent e) {
            spec.add(e.getPlayer().getName());
            online.remove(e.getPlayer().getName());
            for (String str1 : online) {
                for (String str : spec) {
                    Player ingame = Bukkit.getPlayer(str1);
                    Player spec = Bukkit.getPlayer(str);
                    ingame.hidePlayer(spec);
                }
            }
            if (starttimer) {
                if (red.contains(e.getPlayer().getName())) {
                    red.remove(e.getPlayer().getName());
                    Bukkit.broadcastMessage(e.getPlayer().getName()
                            + " §6Has died. Team §cRed §6" + red.size() + "§6/6");
                }
                if (blue.contains(e.getPlayer().getName())) {
                    blue.remove(e.getPlayer().getName());
                    Bukkit.broadcastMessage(e.getPlayer().getName()
                            + " §6Has died. Team §bBlue §6" + blue.size() + "§6/6");
                }
                if (red.size() == 0) {
                    Bukkit.broadcastMessage("§6Team §bBlue §6has won!!!");
                    Bukkit.broadcastMessage("§cYou will be kicked in 10 seconds");
                    ending();
                    starttimer = false;
                } else {
                    if (blue.size() == 0) {
                        Bukkit.broadcastMessage("§6Team §cRed §6has won!!!");
                        Bukkit.broadcastMessage("§cYou will be kicked in 10 seconds");
                        ending();
                        starttimer = false;
                    }
     
                }
            }
        }
     
        public void canceltask() {
            Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
     
                @Override
                public void run() {
                    Bukkit.getScheduler().cancelTask(timer);
                    Bukkit.getScheduler().cancelTask(start);
                    number = 10;
                    startgame = 1200;
                    rollback("world");
                    }
     
            }, 10);
     
        }
     
        @EventHandler
        public void ondeathmessage(PlayerDeathEvent e) {
            e.setDeathMessage(null);
            e.getDrops().clear();
        }
     
        public void startsound() {
            for (Player p : Bukkit.getOnlinePlayers()) {
                p.playSound(p.getLocation(), Sound.NOTE_PLING, 1, 1);
            }
        }
     
        @EventHandler
        public void ondrop(PlayerDropItemEvent e) {
            e.setCancelled(true);
        }
        //Unloading maps, to rollback maps. Will delete all player builds until last server save
        public static void unloadMap(String world){
            if(Bukkit.getServer().unloadWorld(Bukkit.getServer().getWorld(world), false)){
                  Bukkit.broadcastMessage("Successfully unloaded " + world);
            }else{
                Bukkit.broadcastMessage("COULD NOT UNLOAD " + world);
            }
        }
        //Loading maps (MUST BE CALLED AFTER UNLOAD MAPS TO FINISH THE ROLLBACK PROCESS)
        public static void loadMap(String world){
            World w = Bukkit.getServer().createWorld(new WorldCreator(world));
            w.setAutoSave(false);
            Bukkit.getServer().createWorld(new WorldCreator(world));
            Bukkit.broadcastMessage("Successfully loaded " + world);
        }
     
        //Maprollback method, because were too lazy to type 2 lines
        public static void rollback(String world){
            unloadMap(world);
            loadMap(world);
        }
    }
    // add a spectator spawn
    Does anyone have a Idea to rollback a map?
     
Thread Status:
Not open for further replies.

Share This Page