Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.98 KB | None | 0 0
  1. package space.disablesave;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.nio.file.CopyOption;
  6. import java.nio.file.Files;
  7. import java.nio.file.StandardCopyOption;
  8. import java.util.LinkedHashMap;
  9. import java.util.List;
  10.  
  11. import org.bukkit.Bukkit;
  12. import org.bukkit.World;
  13. import org.bukkit.configuration.file.FileConfiguration;
  14. import org.bukkit.craftbukkit.v1_13_R2.CraftWorld;
  15. import org.bukkit.event.EventHandler;
  16. import org.bukkit.event.Listener;
  17. import org.bukkit.event.world.WorldSaveEvent;
  18. import org.bukkit.plugin.java.JavaPlugin;
  19.  
  20. import io.github.jorelali.commandapi.api.CommandAPI;
  21. import io.github.jorelali.commandapi.api.CommandExecutor;
  22. import io.github.jorelali.commandapi.api.CommandPermission;
  23. import io.github.jorelali.commandapi.api.arguments.Argument;
  24. import io.github.jorelali.commandapi.api.arguments.DynamicSuggestedStringArgument;
  25. import io.github.jorelali.commandapi.api.arguments.LiteralArgument;
  26.  
  27. public class DisableSavePlugin extends JavaPlugin implements Listener
  28. {
  29.     @EventHandler
  30.     public void saveEvent(WorldSaveEvent event)
  31.     {
  32.         reloadConfig();
  33.         FileConfiguration config = getConfig();
  34.         Bukkit.getScheduler().runTaskLaterAsynchronously(this, () -> {
  35.             if(config.getBoolean(event.getWorld().getName() + ".savedisabled"))
  36.             {
  37.                 String mode = config.getString(event.getWorld().getName() + ".mode");
  38.                 File[] regionFiles = null;
  39.                 try
  40.                 {
  41.                     File worldFile = new File(getDataFolder().getParentFile().getParentFile(),event.getWorld().getName() + "\\region");
  42.                     regionFiles = worldFile.listFiles();
  43.                     if(regionFiles == null)
  44.                     {
  45.                         getLogger().info("World " + event.getWorld().getName() + " has no region files?");
  46.                         return;
  47.                     }
  48.                 }
  49.                 catch(Exception e)
  50.                 {
  51.                     getLogger().severe("Couldn't get world folder: " + event.getWorld().getName());
  52.                 }
  53.                 if(mode.equals("whitelist"))
  54.                 {
  55.                     for(File f : regionFiles)
  56.                     {
  57.                         String name = f.getName();
  58.                         String break1 = name.substring(2);
  59.                         int x = Integer.valueOf(name.substring(2,break1.indexOf('.')));
  60.                         int z = Integer.valueOf(break1.substring(break1.indexOf('.') + 1, break1.substring(break1.indexOf('.') + 1).indexOf('.')));
  61.                         if(!config.getStringList(event.getWorld().getName() + ".chunks").contains(x + ", " + z))
  62.                         {
  63.                             File regionFile = new File(getDataFolder(), "worlds\\" + event.getWorld().getName() + "\\" + name);
  64.                             if(regionFile.exists())
  65.                             {
  66.                                 try
  67.                                 {
  68.                                     Files.copy(regionFile.toPath(), f.toPath(), StandardCopyOption.REPLACE_EXISTING);
  69.                                 }
  70.                                 catch (IOException e)
  71.                                 {
  72.                                     e.printStackTrace();
  73.                                 }
  74.                             }
  75.                             else
  76.                             {
  77.                                 f.delete();
  78.                             }
  79.                         }
  80.                     }
  81.                 }
  82.                 else if(mode.equals("blacklist"))
  83.                 {
  84.                     for(File f : regionFiles)
  85.                     {
  86.                         String name = f.getName();
  87.                         String break1 = name.substring(2);
  88.                         int x = Integer.valueOf(name.substring(2,break1.indexOf('.')));
  89.                         int z = Integer.valueOf(break1.substring(break1.indexOf('.') + 1, break1.substring(break1.indexOf('.') + 1).indexOf('.')));
  90.                         if(config.getStringList(event.getWorld().getName() + ".chunks").contains(x + ", " + z))
  91.                         {
  92.                             File regionFile = new File(getDataFolder(), "worlds\\" + event.getWorld().getName() + "\\" + name);
  93.                             if(regionFile.exists())
  94.                             {
  95.                                 try
  96.                                 {
  97.                                     Files.copy(regionFile.toPath(), f.toPath(), StandardCopyOption.REPLACE_EXISTING);
  98.                                 }
  99.                                 catch (IOException e)
  100.                                 {
  101.                                     e.printStackTrace();
  102.                                 }
  103.                             }
  104.                             else
  105.                             {
  106.                                 f.delete();
  107.                             }
  108.                         }
  109.                     }
  110.                 }
  111.             }
  112.         }, 1L);
  113.     }
  114.    
  115.     @Override
  116.     public void onEnable()
  117.     {
  118.         registerCommands();
  119.         Bukkit.getPluginManager().registerEvents(this, this);
  120.     }
  121.    
  122.     private void registerCommands()
  123.     {
  124.         registerDisableWorld();
  125.     }
  126.    
  127.     private void registerEnableWorld()
  128.     {
  129.         LinkedHashMap<String, Argument> arguments = new LinkedHashMap();
  130.         registerSubCommand("enable-saving", arguments, "enableworld", (sender, args) -> {
  131.             File copiedWorldFolder = new File(getDataFolder(), "worlds\\" + (String)args[0]);
  132.             if(copiedWorldFolder.exists())
  133.             {
  134.                 copiedWorldFolder.delete();
  135.             }
  136.             reloadConfig();
  137.             getConfig().set((String)args[0] + ".savedisabled", false);
  138.             saveConfig();
  139.         });
  140.     }
  141.    
  142.     private void registerDisableWorld()
  143.     {
  144.         LinkedHashMap<String, Argument> arguments = new LinkedHashMap();
  145.         registerSubCommand("disable-saving", arguments, "disableworld", (sender, args) -> {
  146.             File worldFolder = new File(getDataFolder().getParentFile().getParentFile(), (String)args[0]);
  147.             if(worldFolder.exists())
  148.             {
  149.                 File copiedWorldFolder = new File(getDataFolder(), "worlds\\" + (String)args[0]);
  150.                 try
  151.                 {
  152.                     Files.copy(worldFolder.toPath(), copiedWorldFolder.toPath(), StandardCopyOption.REPLACE_EXISTING);
  153.                 }
  154.                 catch (IOException e)
  155.                 {
  156.                     e.printStackTrace();
  157.                     CommandAPI.fail("Could not copy world folder; reason printed to console");
  158.                     return;
  159.                 }
  160.                 reloadConfig();
  161.                 getConfig().set((String)args[0] + ".savedisabled", true);
  162.                 getConfig().set((String)args[0] + ".mode", "whitelist");
  163.                 saveConfig();
  164.             }
  165.             else
  166.             {
  167.                 CommandAPI.fail("Could not get world folder");
  168.             }
  169.         });
  170.     }
  171.    
  172.     private void registerSubCommand(String name, LinkedHashMap<String, Argument> arguments, String perm, CommandExecutor command)
  173.     {
  174.         LinkedHashMap<String, Argument> newArguments = new LinkedHashMap();
  175.         newArguments.put("world", new DynamicSuggestedStringArgument(() -> {
  176.             List<World> worlds = Bukkit.getWorlds();
  177.             String[] worldNames = new String[worlds.size()];
  178.             for(int i = 0; i < worlds.size(); i ++)
  179.             {
  180.                 worldNames[i] = worlds.get(i).getName();
  181.             }
  182.             return worldNames;
  183.         }));
  184.         newArguments.put(name, new LiteralArgument(name));
  185.         newArguments.putAll(arguments);
  186.         CommandAPI.getInstance().register("disablesave", CommandPermission.fromString("disablesave." + perm), new String[] {"ds"}, newArguments, command);
  187.     }
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement