Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package space.disablesave;
- import java.io.File;
- import java.io.IOException;
- import java.nio.file.CopyOption;
- import java.nio.file.Files;
- import java.nio.file.StandardCopyOption;
- import java.util.LinkedHashMap;
- import java.util.List;
- import org.bukkit.Bukkit;
- import org.bukkit.World;
- import org.bukkit.configuration.file.FileConfiguration;
- import org.bukkit.craftbukkit.v1_13_R2.CraftWorld;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import org.bukkit.event.world.WorldSaveEvent;
- import org.bukkit.plugin.java.JavaPlugin;
- import io.github.jorelali.commandapi.api.CommandAPI;
- import io.github.jorelali.commandapi.api.CommandExecutor;
- import io.github.jorelali.commandapi.api.CommandPermission;
- import io.github.jorelali.commandapi.api.arguments.Argument;
- import io.github.jorelali.commandapi.api.arguments.DynamicSuggestedStringArgument;
- import io.github.jorelali.commandapi.api.arguments.LiteralArgument;
- public class DisableSavePlugin extends JavaPlugin implements Listener
- {
- @EventHandler
- public void saveEvent(WorldSaveEvent event)
- {
- reloadConfig();
- FileConfiguration config = getConfig();
- Bukkit.getScheduler().runTaskLaterAsynchronously(this, () -> {
- if(config.getBoolean(event.getWorld().getName() + ".savedisabled"))
- {
- String mode = config.getString(event.getWorld().getName() + ".mode");
- File[] regionFiles = null;
- try
- {
- File worldFile = new File(getDataFolder().getParentFile().getParentFile(),event.getWorld().getName() + "\\region");
- regionFiles = worldFile.listFiles();
- if(regionFiles == null)
- {
- getLogger().info("World " + event.getWorld().getName() + " has no region files?");
- return;
- }
- }
- catch(Exception e)
- {
- getLogger().severe("Couldn't get world folder: " + event.getWorld().getName());
- }
- if(mode.equals("whitelist"))
- {
- for(File f : regionFiles)
- {
- String name = f.getName();
- String break1 = name.substring(2);
- int x = Integer.valueOf(name.substring(2,break1.indexOf('.')));
- int z = Integer.valueOf(break1.substring(break1.indexOf('.') + 1, break1.substring(break1.indexOf('.') + 1).indexOf('.')));
- if(!config.getStringList(event.getWorld().getName() + ".chunks").contains(x + ", " + z))
- {
- File regionFile = new File(getDataFolder(), "worlds\\" + event.getWorld().getName() + "\\" + name);
- if(regionFile.exists())
- {
- try
- {
- Files.copy(regionFile.toPath(), f.toPath(), StandardCopyOption.REPLACE_EXISTING);
- }
- catch (IOException e)
- {
- e.printStackTrace();
- }
- }
- else
- {
- f.delete();
- }
- }
- }
- }
- else if(mode.equals("blacklist"))
- {
- for(File f : regionFiles)
- {
- String name = f.getName();
- String break1 = name.substring(2);
- int x = Integer.valueOf(name.substring(2,break1.indexOf('.')));
- int z = Integer.valueOf(break1.substring(break1.indexOf('.') + 1, break1.substring(break1.indexOf('.') + 1).indexOf('.')));
- if(config.getStringList(event.getWorld().getName() + ".chunks").contains(x + ", " + z))
- {
- File regionFile = new File(getDataFolder(), "worlds\\" + event.getWorld().getName() + "\\" + name);
- if(regionFile.exists())
- {
- try
- {
- Files.copy(regionFile.toPath(), f.toPath(), StandardCopyOption.REPLACE_EXISTING);
- }
- catch (IOException e)
- {
- e.printStackTrace();
- }
- }
- else
- {
- f.delete();
- }
- }
- }
- }
- }
- }, 1L);
- }
- @Override
- public void onEnable()
- {
- registerCommands();
- Bukkit.getPluginManager().registerEvents(this, this);
- }
- private void registerCommands()
- {
- registerDisableWorld();
- }
- private void registerEnableWorld()
- {
- LinkedHashMap<String, Argument> arguments = new LinkedHashMap();
- registerSubCommand("enable-saving", arguments, "enableworld", (sender, args) -> {
- File copiedWorldFolder = new File(getDataFolder(), "worlds\\" + (String)args[0]);
- if(copiedWorldFolder.exists())
- {
- copiedWorldFolder.delete();
- }
- reloadConfig();
- getConfig().set((String)args[0] + ".savedisabled", false);
- saveConfig();
- });
- }
- private void registerDisableWorld()
- {
- LinkedHashMap<String, Argument> arguments = new LinkedHashMap();
- registerSubCommand("disable-saving", arguments, "disableworld", (sender, args) -> {
- File worldFolder = new File(getDataFolder().getParentFile().getParentFile(), (String)args[0]);
- if(worldFolder.exists())
- {
- File copiedWorldFolder = new File(getDataFolder(), "worlds\\" + (String)args[0]);
- try
- {
- Files.copy(worldFolder.toPath(), copiedWorldFolder.toPath(), StandardCopyOption.REPLACE_EXISTING);
- }
- catch (IOException e)
- {
- e.printStackTrace();
- CommandAPI.fail("Could not copy world folder; reason printed to console");
- return;
- }
- reloadConfig();
- getConfig().set((String)args[0] + ".savedisabled", true);
- getConfig().set((String)args[0] + ".mode", "whitelist");
- saveConfig();
- }
- else
- {
- CommandAPI.fail("Could not get world folder");
- }
- });
- }
- private void registerSubCommand(String name, LinkedHashMap<String, Argument> arguments, String perm, CommandExecutor command)
- {
- LinkedHashMap<String, Argument> newArguments = new LinkedHashMap();
- newArguments.put("world", new DynamicSuggestedStringArgument(() -> {
- List<World> worlds = Bukkit.getWorlds();
- String[] worldNames = new String[worlds.size()];
- for(int i = 0; i < worlds.size(); i ++)
- {
- worldNames[i] = worlds.get(i).getName();
- }
- return worldNames;
- }));
- newArguments.put(name, new LiteralArgument(name));
- newArguments.putAll(arguments);
- CommandAPI.getInstance().register("disablesave", CommandPermission.fromString("disablesave." + perm), new String[] {"ds"}, newArguments, command);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement