Giter Club home page Giter Club logo

drivebackupv2's Introduction

DriveBackupV2

Need help? Talk to our team on Discord!

What is this?

Have you ever lost your Minecraft world before?

Maybe your hard drive died.
Maybe your server hosting provider terminated the server without warning.
Maybe you just accidentally deleted it.

DriveBackupV2 is a plugin that aims to provide an extra layer of security to your data by backing it up remotely.

Features

  • Creates and/or uploads backups to Google Drive, OneDrive, Dropbox, and/or a remote storage server with (S)FTP or S3 compatible api.
  • Can automatically create a backup out of any files or folders on your Minecraft server.
  • Can make backups of remote (S)FTP file sources and MySQL databases from external servers (such as a BungeeCord one!)
  • Automatically deletes backups locally and remotely if they exceed a specified amount.
  • Automatically run backups at a set interval or on a custom schedule.
  • And much more!

Requirements

General Requirements

  • Java 8 or higher

Platform Specific Requirements

Bukkit/Spigot/Paper/Purpur

  • Minecraft 1.8 - 1.20.X

Where can I download it?

Basic Setup

First, download the plugin and copy it to the plugins folder on your server. Then, restart your server. Finally, follow the instructions below for the backup method of your choice.

Google Drive

Simply run /drivebackup linkaccount googledrive and follow the on-screen instructions.

OneDrive

Simply run /drivebackup linkaccount onedrive and follow the on-screen instructions.

DropBox

Simply run /drivebackup linkaccount dropbox and follow the on-screen instructions.

Local

Since v1.3.0

Change local-keep-count in the config.yml to set the number of backups to keep locally. Set to -1 to keep an unlimited number of backups locally.

Once you have completed the above instructions, backups will run automatically every hour by default.

Advanced Setup

Learn how to set up and use more advanced features in the wiki.

Privacy Policy

Since we need to access your Google Drive and/or OneDrive data to back up your world, we are required to provide a Privacy Policy.

All of the data this plugin uploads and downloads or otherwise accessed from your Google Drive and/or OneDrive stays on your Minecraft server, so we never have access to it. This plugin physically cannot access any data in your Google Drive and/or OneDrive that is not related to backing up your Minecraft server. But don't take our word for it, all of this plugin's source code is available here!

drivebackupv2's People

Contributors

akrgamesua avatar c4br3r4 avatar dcronqvist avatar dependabot[bot] avatar frereit avatar jinoo2005609 avatar johnsonran avatar legendarytrio avatar lrmtheboss avatar maxmaeder avatar mrmoogles avatar oddstr13 avatar ralphorama avatar ratismal avatar rhld16 avatar stillgreen-san avatar twme-tw avatar vpzomtrrfrt avatar yuhtin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

drivebackupv2's Issues

Enhance "keep-count" setting and give an option to delete backups older than x time.

What feature do you want to see added?

I notice that when uploading to a cloud storage, the "keep-count" setting completely deletes excess backups (instead of sending them to the bin). I suggest adding a setting to toggle sending excess backups to the bin instead of completely deleting them.

Also I suggest adding a setting to automatically delete backups that are older than a configured number of days.
This should also delete them from the cloud storage, and also have the setting to delete them to completely or send them to the bin.

Are there any alternatives?

No response

Plugin shutdown error

Just saw this on my Paper 1.16.5 server as I was restarting. Not sure how critical it is.

24.09 20:47:33 [Server] ERROR Nag author: 'MaxTheGinus' of 'DriveBackupV2' about the following: This plugin is not properly shutting down its async tasks when it is being shut down. This task may throw errors during the final shutdown logs and might not complete before process dies.

Backup says it was uploaded successfully despite authorization error with Google Drive

What the title says -- I changed my google password recently and forgot to re-auth DriveBackupV2, so I found this in my logs today:

[14:37:36 INFO]: [DriveBackupV2] Uploading file to Google Drive
[14:37:37 WARN]: com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized
[14:37:37 WARN]: {
[14:37:37 WARN]:   "code" : 401,
[14:37:37 WARN]:   "errors" : [ {
[14:37:37 WARN]:     "domain" : "global",
[14:37:37 WARN]:     "location" : "Authorization",
[14:37:37 WARN]:     "locationType" : "header",
[14:37:37 WARN]:     "message" : "Invalid Credentials",
[14:37:37 WARN]:     "reason" : "authError"
[14:37:37 WARN]:   } ],
[14:37:37 WARN]:   "message" : "Invalid Credentials"
[14:37:37 WARN]: }
[14:37:37 WARN]:        at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145)
[14:37:37 WARN]:        at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
[14:37:37 WARN]:        at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
[14:37:37 WARN]:        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321)
[14:37:37 WARN]:        at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1056)
[14:37:37 WARN]:        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
[14:37:37 WARN]:        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
[14:37:37 WARN]:        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
[14:37:37 WARN]:        at ratismal.drivebackup.googledrive.GoogleDriveUploader.getFolder(GoogleDriveUploader.java:418)
[14:37:37 WARN]:        at ratismal.drivebackup.googledrive.GoogleDriveUploader.createFolder(GoogleDriveUploader.java:371)
[14:37:37 WARN]:        at ratismal.drivebackup.googledrive.GoogleDriveUploader.uploadFile(GoogleDriveUploader.java:299)
[14:37:37 WARN]:        at ratismal.drivebackup.UploadThread.run(UploadThread.java:220)
[14:37:37 WARN]:        at org.bukkit.craftbukkit.v1_16_R2.scheduler.CraftTask.run(CraftTask.java:99)
[14:37:37 WARN]:        at org.bukkit.craftbukkit.v1_16_R2.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:54)
[14:37:37 WARN]:        at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22)
[14:37:37 WARN]:        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[14:37:37 WARN]:        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[14:37:37 WARN]:        at java.lang.Thread.run(Thread.java:748)
[14:37:37 WARN]: com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized
[14:37:37 WARN]:        at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145)
[14:37:37 WARN]:        at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
[14:37:37 WARN]:        at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
[14:37:37 WARN]:        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321)
[14:37:37 WARN]:        at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1056)
[14:37:37 WARN]:        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
[14:37:37 WARN]:        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
[14:37:37 WARN]:        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
[14:37:37 WARN]:        at ratismal.drivebackup.googledrive.GoogleDriveUploader.createFolder(GoogleDriveUploader.java:380)
[14:37:37 WARN]:        at ratismal.drivebackup.googledrive.GoogleDriveUploader.uploadFile(GoogleDriveUploader.java:299)
[14:37:37 WARN]:        at ratismal.drivebackup.UploadThread.run(UploadThread.java:220)
[14:37:37 WARN]:        at org.bukkit.craftbukkit.v1_16_R2.scheduler.CraftTask.run(CraftTask.java:99)
[14:37:37 WARN]:        at org.bukkit.craftbukkit.v1_16_R2.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:54)
[14:37:37 WARN]:        at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22)
[14:37:37 WARN]:        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[14:37:37 WARN]:        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[14:37:37 WARN]:        at java.lang.Thread.run(Thread.java:748)
[14:37:37 WARN]: com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized
[14:37:37 WARN]:        at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145)
[14:37:37 WARN]:        at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
[14:37:37 WARN]:        at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
[14:37:37 WARN]:        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321)
[14:37:37 WARN]:        at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1056)
[14:37:37 WARN]:        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
[14:37:37 WARN]:        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
[14:37:37 WARN]:        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
[14:37:37 WARN]:        at ratismal.drivebackup.googledrive.GoogleDriveUploader.createFolder(GoogleDriveUploader.java:380)
[14:37:37 WARN]:        at ratismal.drivebackup.googledrive.GoogleDriveUploader.uploadFile(GoogleDriveUploader.java:299)
[14:37:37 WARN]:        at ratismal.drivebackup.UploadThread.run(UploadThread.java:220)
[14:37:37 WARN]:        at org.bukkit.craftbukkit.v1_16_R2.scheduler.CraftTask.run(CraftTask.java:99)
[14:37:37 WARN]:        at org.bukkit.craftbukkit.v1_16_R2.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:54)
[14:37:37 WARN]:        at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22)
[14:37:37 WARN]:        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[14:37:37 WARN]:        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[14:37:37 WARN]:        at java.lang.Thread.run(Thread.java:748)
[14:37:37 INFO]: [DriveBackupV2] File uploaded in 0.19 seconds (26373.68KB/s)
[14:37:37 INFO]: [DriveBackupV2] There are 1 file(s) which exceeds the local limit of 0, deleting oldest
[14:37:37 INFO]: [DriveBackupV2] Backup complete, the next backup is at 9:30 AM Wed, Oct 7

Move delay to backup list

(Disclaimer: first time using GitHub for anything other than downloading)
This is just a suggestion

Where "delay:60" is for global backup delay, this should be per "backup-list" > "path", this way someone could, for example;

  • Backup their world files and logs per hour
  • Backup their plugin files and config files (everything large/ changes less often) per day or week

Edit: GREAT plugin by the way, worked first time, drag and drop into server and change config, works great.

Absoulte path error can be incorrect in doSingleBackup

doSingleBackup checks for any IllegalArgumentException when calling makeBackup, and blames it on the path.

try {
FileUtil.makeBackup(type, format, blackList);
} catch (IllegalArgumentException exception) {
MessageUtil.sendMessageToPlayersWithPermission("Failed to create a backup, path to folder to backup is absolute, expected a relative path", "drivebackup.linkAccounts", Collections.singletonList(initiator), true);
MessageUtil.sendMessageToPlayersWithPermission("An absolute path can overwrite sensitive files, see the " + ChatColor.GOLD + "config.yml " + ChatColor.DARK_AQUA + "for more information", "drivebackup.linkAccounts", Collections.singletonList(initiator), true);

But an IllegalArgumentException can also come from formatting the time (line 82).

public static void makeBackup(String type, String formatString, List<String> blacklistGlobs) throws Exception {
if (type.charAt(0) == File.separatorChar) {
throw new IllegalArgumentException();
}
fileList.clear();
ZonedDateTime now = ZonedDateTime.now(Config.getBackupScheduleTimezone());
String fileName = now.format(DateTimeFormatter.ofPattern(formatString, new Locale(Config.getDateLanguage())));

Can not backup world_nether

Hey, I frequently have problems with backuping my files. I backup the world, plugins, nether and the end. It always backups the end first, which works fine. Then, it tries to backup the nether. Sometimes it runs into errors which makes the whole filesystem (/directory) read only. I attached some screenshots with the error. I also cannot send the log itself, because the file system is read only and does not write into the log. The last thing that gets saved in the logs is also attached.
I hope you can help me. I have not yet figured out how to properly reproduce it. Sometimes it works just fine, sometimes not.
Annotation 2021-06-05 214352
Annotation 2021-06-05 214341
Annotation 2021-06-05 214326
Annotation 2021-06-05 220131

Cannot invoke "java.util.Map$Entry.getValue()" because the return value of "java.util.NavigableMap.firstEntry()" is null

Describe the bug

The backup to Dropbox sometimes throw exception as follows:

[20:02:39] [Craft Scheduler Thread - 2641 - DriveBackupV2/WARN]: java.lang.NullPointerException: Cannot invoke "java.util.Map$Entry.getValue()" because the return value of "java.util.NavigableMap.firstEntry()" is null
[20:02:39] [Craft Scheduler Thread - 2641 - DriveBackupV2/WARN]: 	at DriveBackupV2.jar//ratismal.drivebackup.UploadThread.doSingleBackup(UploadThread.java:357)
[20:02:39] [Craft Scheduler Thread - 2641 - DriveBackupV2/WARN]: 	at DriveBackupV2.jar//ratismal.drivebackup.UploadThread.run(UploadThread.java:231)
[20:02:39] [Craft Scheduler Thread - 2641 - DriveBackupV2/WARN]: 	at org.bukkit.craftbukkit.v1_17_R1.scheduler.CraftTask.run(CraftTask.java:101)
[20:02:39] [Craft Scheduler Thread - 2641 - DriveBackupV2/WARN]: 	at org.bukkit.craftbukkit.v1_17_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:57)
[20:02:39] [Craft Scheduler Thread - 2641 - DriveBackupV2/WARN]: 	at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22)
[20:02:39] [Craft Scheduler Thread - 2641 - DriveBackupV2/WARN]: 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
[20:02:39] [Craft Scheduler Thread - 2641 - DriveBackupV2/WARN]: 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
[20:02:39] [Craft Scheduler Thread - 2641 - DriveBackupV2/WARN]: 	at java.base/java.lang.Thread.run(Thread.java:831)

It is not always. Sometimes backup succeeds. It fails about 50% probability.

To Reproduce

Install this plugin into Paper and configure Dropbox connection.

Screenshots / Videos

No response

Server and Plugin Versions

[09:00:20] [Server thread/INFO]: This server is running Paper version git-Paper-259 (MC: 1.17.1) (Implementing API version 1.17.1-R0.1-SNAPSHOT) (Git: 810d200)
[09:00:31] [Server thread/INFO]: [DriveBackupV2] Loading DriveBackupV2 v1.5.2

Additional Context

I'm not sure it is related the issue, there is also SocketException.

[10:01:10] [Craft Scheduler Thread - 251 - DriveBackupV2/INFO]: [DriveBackupV2] Doing backups for "./world_the_end"
[10:01:12] [Craft Scheduler Thread - 251 - DriveBackupV2/INFO]: [DriveBackupV2] Uploading file to Dropbox
[10:01:16] [Craft Scheduler Thread - 251 - DriveBackupV2/INFO]: [DriveBackupV2] There are 21 file(s) for the current backup location in Dropbox which exceeds the limit of 20, deleting
[10:01:17] [Craft Scheduler Thread - 251 - DriveBackupV2/INFO]: [DriveBackupV2] File uploaded in 4.1 seconds (5677.48KB/s)
[10:01:17] [Craft Scheduler Thread - 251 - DriveBackupV2/INFO]: [DriveBackupV2] There are 25 file(s) which exceeds the local limit of 24, deleting oldest
[10:01:17] [Craft Scheduler Thread - 251 - DriveBackupV2/INFO]: [DriveBackupV2] Doing backups for "./world_nether"
[10:01:20] [Craft Scheduler Thread - 251 - DriveBackupV2/INFO]: [DriveBackupV2] Uploading file to Dropbox
[10:01:25] [Craft Scheduler Thread - 251 - DriveBackupV2/INFO]: [DriveBackupV2] There are 21 file(s) for the current backup location in Dropbox which exceeds the limit of 20, deleting
[10:01:26] [Craft Scheduler Thread - 251 - DriveBackupV2/INFO]: [DriveBackupV2] File uploaded in 6.29 seconds (7022.43KB/s)
[10:01:26] [Craft Scheduler Thread - 251 - DriveBackupV2/INFO]: [DriveBackupV2] There are 25 file(s) which exceeds the local limit of 24, deleting oldest
[10:01:26] [Craft Scheduler Thread - 251 - DriveBackupV2/INFO]: [DriveBackupV2] Doing backups for "./world"
[10:02:19] [Craft Scheduler Thread - 251 - DriveBackupV2/INFO]: [DriveBackupV2] Uploading file to Dropbox
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/INFO]: [java.net.SocketException: Connection reset by peer, java.net.SocketException: Connection reset by peer]
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: java.net.SocketException: Network is unreachable
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at java.base/sun.nio.ch.Net.connect0(Native Method)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at java.base/sun.nio.ch.Net.connect(Net.java:576)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at java.base/sun.nio.ch.Net.connect(Net.java:565)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:333)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at java.base/java.net.Socket.connect(Socket.java:645)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.platform.Platform.connectSocket(Platform.kt:120)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.connection.RealConnection.connectSocket(RealConnection.kt:283)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.connection.RealConnection.connect(RealConnection.kt:195)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.kt:249)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.kt:108)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.connection.ExchangeFinder.find(ExchangeFinder.kt:76)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.connection.RealCall.initExchange$okhttp(RealCall.kt:245)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:32)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:100)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:96)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:100)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:83)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:100)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:76)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:100)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:197)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.connection.RealCall.execute(RealCall.kt:148)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at DriveBackupV2.jar//ratismal.drivebackup.uploaders.dropbox.DropboxUploader.uploadFile(DropboxUploader.java:226)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at DriveBackupV2.jar//ratismal.drivebackup.UploadThread.doSingleBackup(UploadThread.java:367)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at DriveBackupV2.jar//ratismal.drivebackup.UploadThread.run(UploadThread.java:231)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at org.bukkit.craftbukkit.v1_17_R1.scheduler.CraftTask.run(CraftTask.java:101)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at org.bukkit.craftbukkit.v1_17_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:57)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at java.base/java.lang.Thread.run(Thread.java:831)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	Suppressed: java.net.SocketException: Connection reset by peer
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at java.base/sun.nio.ch.NioSocketImpl.implWrite(NioSocketImpl.java:420)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at java.base/sun.nio.ch.NioSocketImpl.write(NioSocketImpl.java:440)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at java.base/sun.nio.ch.NioSocketImpl$2.write(NioSocketImpl.java:826)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at java.base/java.net.Socket$SocketOutputStream.write(Socket.java:1045)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at java.base/sun.security.ssl.SSLSocketOutputRecord.deliver(SSLSocketOutputRecord.java:342)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at java.base/sun.security.ssl.SSLSocketImpl$AppOutputStream.write(SSLSocketImpl.java:1287)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.OutputStreamSink.write(JvmOkio.kt:53)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.AsyncTimeout$sink$1.write(AsyncTimeout.kt:103)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.RealBufferedSink.emitCompleteSegments(RealBufferedSink.kt:235)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.RealBufferedSink.write(RealBufferedSink.kt:145)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.http1.Http1ExchangeCodec$KnownLengthSink.write(Http1ExchangeCodec.kt:271)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.ForwardingSink.write(ForwardingSink.kt:29)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.connection.Exchange$RequestBodySink.write(Exchange.kt:218)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.RealBufferedSink.emitCompleteSegments(RealBufferedSink.kt:235)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.RealBufferedSink.write(RealBufferedSink.kt:176)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.RequestBody$Companion$toRequestBody$2.writeTo(RequestBody.kt:152)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.kt:59)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:100)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:34)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		... 18 more
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	Suppressed: java.net.SocketException: Connection reset by peer
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at java.base/sun.nio.ch.NioSocketImpl.implWrite(NioSocketImpl.java:420)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at java.base/sun.nio.ch.NioSocketImpl.write(NioSocketImpl.java:440)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at java.base/sun.nio.ch.NioSocketImpl$2.write(NioSocketImpl.java:826)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at java.base/java.net.Socket$SocketOutputStream.write(Socket.java:1045)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at java.base/sun.security.ssl.SSLSocketOutputRecord.deliver(SSLSocketOutputRecord.java:342)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at java.base/sun.security.ssl.SSLSocketImpl$AppOutputStream.write(SSLSocketImpl.java:1287)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.OutputStreamSink.write(JvmOkio.kt:53)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.AsyncTimeout$sink$1.write(AsyncTimeout.kt:103)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.RealBufferedSink.emitCompleteSegments(RealBufferedSink.kt:235)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.RealBufferedSink.write(RealBufferedSink.kt:145)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.http1.Http1ExchangeCodec$KnownLengthSink.write(Http1ExchangeCodec.kt:271)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.ForwardingSink.write(ForwardingSink.kt:29)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.connection.Exchange$RequestBodySink.write(Exchange.kt:218)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.RealBufferedSink.emitCompleteSegments(RealBufferedSink.kt:235)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.RealBufferedSink.write(RealBufferedSink.kt:176)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.RequestBody$Companion$toRequestBody$2.writeTo(RequestBody.kt:152)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.kt:59)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:100)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		at DriveBackupV2.jar//ratismal.drivebackup.DriveBackup.lib.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:34)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 		... 18 more
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/INFO]: [DriveBackupV2] Failed to upload
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/INFO]: [DriveBackupV2] There are 25 file(s) which exceeds the local limit of 24, deleting oldest
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/INFO]: [DriveBackupV2] Doing backups for "plugins"
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/INFO]: [DriveBackupV2] Failed to upload
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: java.lang.NullPointerException: Cannot invoke "java.util.Map$Entry.getValue()" because the return value of "java.util.NavigableMap.firstEntry()" is null
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at DriveBackupV2.jar//ratismal.drivebackup.UploadThread.doSingleBackup(UploadThread.java:357)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at DriveBackupV2.jar//ratismal.drivebackup.UploadThread.run(UploadThread.java:231)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at org.bukkit.craftbukkit.v1_17_R1.scheduler.CraftTask.run(CraftTask.java:101)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at org.bukkit.craftbukkit.v1_17_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:57)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/WARN]: 	at java.base/java.lang.Thread.run(Thread.java:831)
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/INFO]: [DriveBackupV2] Failed to backup to Dropbox, verify all credentials are correct or diagnose the problem with /drivebackup test dropbox
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/INFO]: [DriveBackupV2] Backup complete
[10:02:36] [Craft Scheduler Thread - 251 - DriveBackupV2/INFO]: [DriveBackupV2] The next backup is in 58 minutes

Failed to include "world\session.lock" in the backup, is it locked?

[02:44:17 INFO]: 【DriveBackup】 Doing backups for "world" 
[02:45:44 INFO]: 【DriveBackup】 **Failed to include "world\session.lock" in the backup, is it locked?**
[02:45:45 INFO]: 【DriveBackup】 Uploading file to Google Drive      

Failed to include "world\session.lock" in the backup, is it locked?

Is this important? or?

wrong version was set of v1.3.6

DriveBackupV2-1.3.6.jar is set version 1.3.5 in plugin.yml, so it keeps notice Version 1.3.6 has been released in the logs

[FEATURE REQUEST] Upload speed limit / schedule options.

I don't know if this possible but can you add some sort of upload speed limit and/or schedule options to config?
Because right now it's using all servers upload bandwidth, players get kicked and databases disconnects while uploading backup to Google Drive.

[Feature Request] SQL backup features

Exclude SQL tables by name

8 of my plugins use MySQL databases, but two generate a considerable amount of data I don't want to include in my backup. The tables in particular are

co_block
co_item

The ability to exclude SQL tables based on table name would be very beneficial.

Rate limit SQL queries

Whenever a backup runs, it causes all other database connections on my server to time out as it pulls data over the network. If rate limiting options for SQL could be implemented, that would be hugely beneficial

MySQL backup errors

Getting error spam when making MySQL database backup. End result is almost empty database with many NULL tables.

>.... [16:14:43 INFO]: [DriveBackupV2] Downloading databases from a MySQL server (***.***.***.**-3306) to include in backup
>.... [16:14:43 WARN]: java.sql.SQLException: Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY.
>.... [16:14:43 WARN]: at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
>.... [16:14:43 WARN]: at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
>.... [16:14:43 WARN]: at com.mysql.cj.jdbc.result.ResultSetImpl.last(ResultSetImpl.java:1729)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.getDataInsertStatement(MySQLUploader.java:161)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.getInsertStatements(MySQLUploader.java:284)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.downloadDatabase(MySQLUploader.java:86)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.downloadDatabase(MySQLUploader.java:69)
>.... [16:14:43 WARN]: at ratismal.drivebackup.UploadThread.makeExternalDatabaseBackup(UploadThread.java:442)
>.... [16:14:43 WARN]: at ratismal.drivebackup.UploadThread.run(UploadThread.java:158)
>.... [16:14:43 WARN]: at java.base/java.lang.Thread.run(Thread.java:831)
>.... [16:14:43 WARN]: java.sql.SQLException: Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY.
>.... [16:14:43 WARN]: at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
>.... [16:14:43 WARN]: at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
>.... [16:14:43 WARN]: at com.mysql.cj.jdbc.result.ResultSetImpl.last(ResultSetImpl.java:1729)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.getDataInsertStatement(MySQLUploader.java:161)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.getInsertStatements(MySQLUploader.java:284)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.downloadDatabase(MySQLUploader.java:86)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.downloadDatabase(MySQLUploader.java:69)
>.... [16:14:43 WARN]: at ratismal.drivebackup.UploadThread.makeExternalDatabaseBackup(UploadThread.java:442)
>.... [16:14:43 WARN]: at ratismal.drivebackup.UploadThread.run(UploadThread.java:158)
>.... [16:14:43 WARN]: at java.base/java.lang.Thread.run(Thread.java:831)
>.... [16:14:43 WARN]: java.sql.SQLException: Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY.
>.... [16:14:43 WARN]: at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
>.... [16:14:43 WARN]: at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
>.... [16:14:43 WARN]: at com.mysql.cj.jdbc.result.ResultSetImpl.last(ResultSetImpl.java:1729)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.getDataInsertStatement(MySQLUploader.java:161)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.getInsertStatements(MySQLUploader.java:284)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.downloadDatabase(MySQLUploader.java:86)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.downloadDatabase(MySQLUploader.java:69)
>.... [16:14:43 WARN]: at ratismal.drivebackup.UploadThread.makeExternalDatabaseBackup(UploadThread.java:442)
>.... [16:14:43 WARN]: at ratismal.drivebackup.UploadThread.run(UploadThread.java:158)
>.... [16:14:43 WARN]: at java.base/java.lang.Thread.run(Thread.java:831)
>.... [16:14:43 WARN]: java.sql.SQLException: Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY.
>.... [16:14:43 WARN]: at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
>.... [16:14:43 WARN]: at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
>.... [16:14:43 WARN]: at com.mysql.cj.jdbc.result.ResultSetImpl.last(ResultSetImpl.java:1729)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.getDataInsertStatement(MySQLUploader.java:161)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.getInsertStatements(MySQLUploader.java:284)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.downloadDatabase(MySQLUploader.java:86)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.downloadDatabase(MySQLUploader.java:69)
>.... [16:14:43 WARN]: at ratismal.drivebackup.UploadThread.makeExternalDatabaseBackup(UploadThread.java:442)
>.... [16:14:43 WARN]: at ratismal.drivebackup.UploadThread.run(UploadThread.java:158)
>.... [16:14:43 WARN]: at java.base/java.lang.Thread.run(Thread.java:831)
>.... [16:14:43 WARN]: java.sql.SQLException: Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY.
>.... [16:14:43 WARN]: at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
>.... [16:14:43 WARN]: at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
>.... [16:14:43 WARN]: at com.mysql.cj.jdbc.result.ResultSetImpl.last(ResultSetImpl.java:1729)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.getDataInsertStatement(MySQLUploader.java:161)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.getInsertStatements(MySQLUploader.java:284)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.downloadDatabase(MySQLUploader.java:86)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.downloadDatabase(MySQLUploader.java:69)
>.... [16:14:43 WARN]: at ratismal.drivebackup.UploadThread.makeExternalDatabaseBackup(UploadThread.java:442)
>.... [16:14:43 WARN]: at ratismal.drivebackup.UploadThread.run(UploadThread.java:158)
>.... [16:14:43 WARN]: at java.base/java.lang.Thread.run(Thread.java:831)
>.... [16:14:43 WARN]: java.sql.SQLException: Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY.
>.... [16:14:43 WARN]: at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
>.... [16:14:43 WARN]: at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
>.... [16:14:43 WARN]: at com.mysql.cj.jdbc.result.ResultSetImpl.last(ResultSetImpl.java:1729)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.getDataInsertStatement(MySQLUploader.java:161)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.getInsertStatements(MySQLUploader.java:284)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.downloadDatabase(MySQLUploader.java:86)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.downloadDatabase(MySQLUploader.java:69)
>.... [16:14:43 WARN]: at ratismal.drivebackup.UploadThread.makeExternalDatabaseBackup(UploadThread.java:442)
>.... [16:14:43 WARN]: at ratismal.drivebackup.UploadThread.run(UploadThread.java:158)
>.... [16:14:43 WARN]: at java.base/java.lang.Thread.run(Thread.java:831)
>.... [16:14:43 WARN]: java.sql.SQLException: Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY.
>.... [16:14:43 WARN]: at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
>.... [16:14:43 WARN]: at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
>.... [16:14:43 WARN]: at com.mysql.cj.jdbc.result.ResultSetImpl.last(ResultSetImpl.java:1729)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.getDataInsertStatement(MySQLUploader.java:161)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.getInsertStatements(MySQLUploader.java:284)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.downloadDatabase(MySQLUploader.java:86)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.downloadDatabase(MySQLUploader.java:69)
>.... [16:14:43 WARN]: at ratismal.drivebackup.UploadThread.makeExternalDatabaseBackup(UploadThread.java:442)
>.... [16:14:43 WARN]: at ratismal.drivebackup.UploadThread.run(UploadThread.java:158)
>.... [16:14:43 WARN]: at java.base/java.lang.Thread.run(Thread.java:831)
>.... [16:14:43 WARN]: java.sql.SQLException: Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY.
>.... [16:14:43 WARN]: at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
>.... [16:14:43 WARN]: at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
>.... [16:14:43 WARN]: at com.mysql.cj.jdbc.result.ResultSetImpl.last(ResultSetImpl.java:1729)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.getDataInsertStatement(MySQLUploader.java:161)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.getInsertStatements(MySQLUploader.java:284)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.downloadDatabase(MySQLUploader.java:86)
>.... [16:14:43 WARN]: at ratismal.drivebackup.mysql.MySQLUploader.downloadDatabase(MySQLUploader.java:69)
>.... [16:14:43 WARN]: at ratismal.drivebackup.UploadThread.makeExternalDatabaseBackup(UploadThread.java:442)
>.... [16:14:43 WARN]: at ratismal.drivebackup.UploadThread.run(UploadThread.java:158)
>.... [16:14:43 WARN]: at java.base/java.lang.Thread.run(Thread.java:831) 

Full error log: https://mclo.gs/HAPBDKW

Config:

external-backup-list:
- hostname: "***.***.***.**"
  port: 3306
  username: "*****"
  password: "***************"
  format: "'Backup-mysql-database-'yyyy-M-d--HH-mm'.zip'"
  type: "mysqlDatabase"
  ssl: false
  databases:
  - name: "****_***"

Plugin version: 1.4.0
Java version: 16.0.1
Server software: AirplanePurpur
Server software version: git-AirplanePurpur-22 (MC: 1.17.1)

[Bug] "Connection closed without indication." With WasabiS3 in FTP

Whenever I upload a backup, it gives me ratismal.drivebackup.DriveBackup.lib.net.ftp.FTPConnectionClosedException: Connection closed without indication. and subsequent backups gives me java.net.SocketException: Broken pipe. After going for a quick rundown on StackOverflow it's probably because the connection from Wasabi cuts off when it finishes uploading one file, while the plugin tries to stay with connection opened. Could be wrong, though.

Here are the logs from the attempt:

[07:01:53 INFO]: [DriveBackupV2] Beginning the (S)FTP connection and upload test
[07:01:59 INFO]: [DriveBackupV2] The (S)FTP connection and upload test was successful
drivebackup backup
[07:02:07 INFO]: [DriveBackupV2] Forcing a backup
[07:02:07 INFO]: Automatic saving is now disabled
[07:02:07 INFO]: [DriveBackupV2] Criando backups, isso pode travar o servidor...
[07:02:07 INFO]: [DriveBackupV2] Doing backups for "laid"
[07:04:19 INFO]: [DriveBackupV2] Uploading file to (S)FTP
[07:04:19 WARN]: ratismal.drivebackup.DriveBackup.lib.net.ftp.FTPConnectionClosedException: Connection closed without indication.
[07:04:19 WARN]:        at ratismal.drivebackup.DriveBackup.lib.net.ftp.FTP.__getReply(FTP.java:317)
[07:04:19 WARN]:        at ratismal.drivebackup.DriveBackup.lib.net.ftp.FTP.__getReply(FTP.java:294)
[07:04:19 WARN]:        at ratismal.drivebackup.DriveBackup.lib.net.ftp.FTP.sendCommand(FTP.java:483)
[07:04:19 WARN]:        at ratismal.drivebackup.DriveBackup.lib.net.ftp.FTP.sendCommand(FTP.java:608)
[07:04:19 WARN]:        at ratismal.drivebackup.DriveBackup.lib.net.ftp.FTP.cwd(FTP.java:828)
[07:04:19 WARN]:        at ratismal.drivebackup.DriveBackup.lib.net.ftp.FTPClient.changeWorkingDirectory(FTPClient.java:1128)
[07:04:19 WARN]:        at ratismal.drivebackup.ftp.FTPUploader.createThenEnter(FTPUploader.java:338)
[07:04:19 WARN]:        at ratismal.drivebackup.ftp.FTPUploader.uploadFile(FTPUploader.java:186)
[07:04:19 WARN]:        at ratismal.drivebackup.UploadThread.doSingleBackup(UploadThread.java:305)
[07:04:19 WARN]:        at ratismal.drivebackup.UploadThread.run(UploadThread.java:195)
[07:04:19 WARN]:        at java.base/java.lang.Thread.run(Thread.java:831)
[07:04:19 INFO]: [DriveBackupV2] Upload failed
[07:04:19 INFO]: [DriveBackupV2] There are 3 file(s) which exceeds the local limit of 2, deleting oldest
[07:04:19 INFO]: [DriveBackupV2] Doing backups for "laid_nether"
[07:04:54 INFO]: [DriveBackupV2] Uploading file to (S)FTP
[07:04:54 WARN]: java.net.SocketException: Broken pipe
[07:04:54 WARN]:        at java.base/sun.nio.ch.NioSocketImpl.implWrite(NioSocketImpl.java:420)
[07:04:54 WARN]:        at java.base/sun.nio.ch.NioSocketImpl.write(NioSocketImpl.java:440)
[07:04:54 WARN]:        at java.base/sun.nio.ch.NioSocketImpl$2.write(NioSocketImpl.java:826)
[07:04:54 WARN]:        at java.base/java.net.Socket$SocketOutputStream.write(Socket.java:1045)
[07:04:54 WARN]:        at java.base/sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:242)
[07:04:54 WARN]:        at java.base/sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:321)
[07:04:54 WARN]:        at java.base/sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:325)
[07:04:54 WARN]:        at java.base/sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:159)
[07:04:54 WARN]:        at java.base/java.io.OutputStreamWriter.flush(OutputStreamWriter.java:248)
[07:04:54 WARN]:        at java.base/java.io.BufferedWriter.flush(BufferedWriter.java:257)
[07:04:54 WARN]:        at ratismal.drivebackup.DriveBackup.lib.net.ftp.FTP.__send(FTP.java:505)
[07:04:54 WARN]:        at ratismal.drivebackup.DriveBackup.lib.net.ftp.FTP.sendCommand(FTP.java:479)
[07:04:54 WARN]:        at ratismal.drivebackup.DriveBackup.lib.net.ftp.FTP.sendCommand(FTP.java:608)
[07:04:54 WARN]:        at ratismal.drivebackup.DriveBackup.lib.net.ftp.FTP.cwd(FTP.java:828)
[07:04:54 WARN]:        at ratismal.drivebackup.DriveBackup.lib.net.ftp.FTPClient.changeWorkingDirectory(FTPClient.java:1128)
[07:04:54 WARN]:        at ratismal.drivebackup.ftp.FTPUploader.resetWorkingDirectory(FTPUploader.java:349)
[07:04:54 WARN]:        at ratismal.drivebackup.ftp.FTPUploader.uploadFile(FTPUploader.java:185)
[07:04:54 WARN]:        at ratismal.drivebackup.UploadThread.doSingleBackup(UploadThread.java:305)
[07:04:54 WARN]:        at ratismal.drivebackup.UploadThread.run(UploadThread.java:195)
[07:04:54 WARN]:        at java.base/java.lang.Thread.run(Thread.java:831)
[07:04:54 INFO]: [DriveBackupV2] Upload failed
[07:04:54 INFO]: [DriveBackupV2] There are 3 file(s) which exceeds the local limit of 2, deleting oldest
[07:04:54 INFO]: [DriveBackupV2] Doing backups for "laid_the_end"
[07:05:09 INFO]: [DriveBackupV2] Uploading file to (S)FTP
[07:05:09 WARN]: java.net.SocketException: Broken pipe
[07:05:09 WARN]:        at java.base/sun.nio.ch.NioSocketImpl.implWrite(NioSocketImpl.java:420)
[07:05:09 WARN]:        at java.base/sun.nio.ch.NioSocketImpl.write(NioSocketImpl.java:440)
[07:05:09 WARN]:        at java.base/sun.nio.ch.NioSocketImpl$2.write(NioSocketImpl.java:826)
[07:05:09 WARN]:        at java.base/java.net.Socket$SocketOutputStream.write(Socket.java:1045)
[07:05:09 WARN]:        at java.base/sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:242)
[07:05:09 WARN]:        at java.base/sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:321)
[07:05:09 WARN]:        at java.base/sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:325)
[07:05:09 WARN]:        at java.base/sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:159)
[07:05:09 WARN]:        at java.base/java.io.OutputStreamWriter.flush(OutputStreamWriter.java:248)
[07:05:09 WARN]:        at java.base/java.io.BufferedWriter.flush(BufferedWriter.java:257)
[07:05:09 WARN]:        at ratismal.drivebackup.DriveBackup.lib.net.ftp.FTP.__send(FTP.java:505)
[07:05:09 WARN]:        at ratismal.drivebackup.DriveBackup.lib.net.ftp.FTP.sendCommand(FTP.java:479)
[07:05:09 WARN]:        at ratismal.drivebackup.DriveBackup.lib.net.ftp.FTP.sendCommand(FTP.java:608)
[07:05:09 WARN]:        at ratismal.drivebackup.DriveBackup.lib.net.ftp.FTP.cwd(FTP.java:828)
[07:05:09 WARN]:        at ratismal.drivebackup.DriveBackup.lib.net.ftp.FTPClient.changeWorkingDirectory(FTPClient.java:1128)
[07:05:09 WARN]:        at ratismal.drivebackup.ftp.FTPUploader.resetWorkingDirectory(FTPUploader.java:349)
[07:05:09 WARN]:        at ratismal.drivebackup.ftp.FTPUploader.uploadFile(FTPUploader.java:185)
[07:05:09 WARN]:        at ratismal.drivebackup.UploadThread.doSingleBackup(UploadThread.java:305)
[07:05:09 WARN]:        at ratismal.drivebackup.UploadThread.run(UploadThread.java:195)
[07:05:09 WARN]:        at java.base/java.lang.Thread.run(Thread.java:831)
[07:05:09 INFO]: [DriveBackupV2] Upload failed
[07:05:09 INFO]: [DriveBackupV2] There are 3 file(s) which exceeds the local limit of 2, deleting oldest
[07:05:09 INFO]: [DriveBackupV2] Doing backups for "plugins"
[07:06:23 INFO]: [DriveBackupV2] Uploading file to (S)FTP
[07:06:23 WARN]: java.net.SocketException: Broken pipe
[07:06:23 WARN]:        at java.base/sun.nio.ch.NioSocketImpl.implWrite(NioSocketImpl.java:420)
[07:06:23 WARN]:        at java.base/sun.nio.ch.NioSocketImpl.write(NioSocketImpl.java:440)
[07:06:23 WARN]:        at java.base/sun.nio.ch.NioSocketImpl$2.write(NioSocketImpl.java:826)
[07:06:23 WARN]:        at java.base/java.net.Socket$SocketOutputStream.write(Socket.java:1045)
[07:06:23 WARN]:        at java.base/sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:242)
[07:06:23 WARN]:        at java.base/sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:321)
[07:06:23 WARN]:        at java.base/sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:325)
[07:06:23 WARN]:        at java.base/sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:159)
[07:06:23 WARN]:        at java.base/java.io.OutputStreamWriter.flush(OutputStreamWriter.java:248)
[07:06:23 WARN]:        at java.base/java.io.BufferedWriter.flush(BufferedWriter.java:257)
[07:06:23 WARN]:        at ratismal.drivebackup.DriveBackup.lib.net.ftp.FTP.__send(FTP.java:505)
[07:06:23 WARN]:        at ratismal.drivebackup.DriveBackup.lib.net.ftp.FTP.sendCommand(FTP.java:479)
[07:06:23 WARN]:        at ratismal.drivebackup.DriveBackup.lib.net.ftp.FTP.sendCommand(FTP.java:608)
[07:06:23 WARN]:        at ratismal.drivebackup.DriveBackup.lib.net.ftp.FTP.cwd(FTP.java:828)
[07:06:23 WARN]:        at ratismal.drivebackup.DriveBackup.lib.net.ftp.FTPClient.changeWorkingDirectory(FTPClient.java:1128)
[07:06:23 WARN]:        at ratismal.drivebackup.ftp.FTPUploader.resetWorkingDirectory(FTPUploader.java:349)
[07:06:23 WARN]:        at ratismal.drivebackup.ftp.FTPUploader.uploadFile(FTPUploader.java:185)
[07:06:23 WARN]:        at ratismal.drivebackup.UploadThread.doSingleBackup(UploadThread.java:305)
[07:06:23 WARN]:        at ratismal.drivebackup.UploadThread.run(UploadThread.java:195)
[07:06:23 WARN]:        at java.base/java.lang.Thread.run(Thread.java:831)
[07:06:23 INFO]: [DriveBackupV2] Upload failed
[07:06:23 INFO]: [DriveBackupV2] There are 3 file(s) which exceeds the local limit of 2, deleting oldest
[07:06:23 INFO]: [DriveBackupV2] Local backup complete
[07:06:24 INFO]: [DriveBackupV2] Failed to backup to the (S)FTP server, please check the server credentials in the config.yml
[07:06:24 INFO]: [DriveBackupV2] Backup completo,
[07:06:24 INFO]: Automatic saving is now enabled```

[Enhancement] Add 7z support

What I suggest: Add option to use .7z instead of just .zip.
Rational: .7z has higher efficiency (compression wise, not time wise)
How it could be implemented: Add a toggle in the config.yml, and add the 7z zipping process in FileUtil#ZipIt()

[Severe] OneDrive Backup Broken ("Unverified")

I'm not sure what server side changes you keep making, but they keep breaking functionality.

The application is now marked as "unverified", with the text "this app may be risky" on OneDrive, and because I am using an organizational account, there is no way to bypass this. The functionality is completely broken. I am unfortunately forced to look at a new backup system as a result.

[Suggestion] Add destination folder for external backup

I suggest having the option to set the destination folder for external backup. In the latest version (DriveBackupV2-1.4.0), the external backup folder will always in the folder external-backup/ftp-connection-name.

I suggest adding a key in each external-backup-list, maybe a destination key for storing the destination folder for this external backup entry. Each entry has its own destination key

Unable to use DriveBackupV2 via RCON

Explanation of issue

As of right now, the plugin can't be used over RCON.

Cause of issue

This is because of the following if-statement where it is not checked if the sender is RemoteConsoleCommandSender.

if (!(sender instanceof Player || sender instanceof ConsoleCommandSender)) {
MessageUtil.sendMessage(sender, "DriveBackupV2 only supports commands sent in-game and via the console");
return true;
}

Proposed solution

Make the following changes to the if-statement, while making sure to import the class as well.

import org.bukkit.command.RemoteConsoleCommandSender;

...
...
...

if (!(sender instanceof Player || sender instanceof ConsoleCommandSender || sender instanceof RemoteConsoleCommandSender)) {
    MessageUtil.sendMessage(sender, "DriveBackupV2 only supports commands sent in-game and via the console");
    return true;
}

world backup corrupt, player Inventory restored but building not restored

so today I play Minecraft with my friend after backup complete few minutes later server crashed, then I check world backup on my google drive I restore the world, but when I logged on, the world is still same as we started playing, but item inventory restored properly,only world building not restored

My backap "Exceeds local limit of 0"

I would like to know how to fix this, as I have a 200+GB File that I need to backup

01.08 18:31:19 [Server] INFO [DriveBackupV2] File uploaded in 175.9 seconds (33707.31KB/s)
01.08 18:31:19 [Server] INFO [DriveBackupV2] There are 1 file(s) which exceeds the local limit of 0, deleting oldest
01.08 18:31:19 [Server] INFO [DriveBackupV2] Doing backups for "plugins"
01.08 18:31:21 [Server] INFO [DriveBackupV2] Uploading file to Google Drive
01.08 18:31:25 [Server] INFO [DriveBackupV2] File uploaded in 3.77 seconds (9223.16KB/s)
01.08 18:31:25 [Server] INFO [DriveBackupV2] There are 1 file(s) which exceeds the local limit of 0, deleting oldest
01.08 18:31:25 [Server] INFO [DriveBackupV2] Doing backups for "Lostands"
01.08 18:31:25 [Server] INFO [DriveBackupV2] Uploading file to Google Drive
01.08 18:31:28 [Server] INFO [DriveBackupV2] File uploaded in 2.83 seconds (0KB/s)
01.08 18:31:28 [Server] INFO [DriveBackupV2] There are 1 file(s) which exceeds the local limit of 0, deleting oldest
01.08 18:31:28 [Server] INFO [DriveBackupV2] Doing backups for "LostLands_nether"

The first file and the second file seem to be fine but "LostLands" is only 22KB when it should be 150-230GB

Server Version = Paper 1.12.2
Plugin Version = DriveBackupV2-1.4.0

No api-version specified

When the Minecraft server executes the plugin, it warns about an unspecified api-version:

[Server thread/WARN]: Initializing Legacy Material Support. Unless you have legacy plugins and/or data this is a bug!
[Server thread/WARN]: Legacy plugin DriveBackupV2 v1.3.9 does not specify an api-version.

Error when setting thread priority

If backup-thread-priority: set to lower number i getting this error message and backup doesn't work.

image

.... [15:38:28 WARN]: Exception in thread "Thread-160" java.lang.IllegalArgumentException
.... [15:38:28 WARN]: at java.base/java.lang.Thread.setPriority(Thread.java:1141)
.... [15:38:28 WARN]: at ratismal.drivebackup.UploadThread.run(UploadThread.java:54)
.... [15:38:28 WARN]: at java.base/java.lang.Thread.run(Thread.java:834)

Color codes not parsing in messages

Describe the bug

Color codes do not work in messages. Changing the color code in the "default-color" setting in the config.yml doesn't change anything. It uses the dark aqua color regardless.

Adding color codes directly to messages does not work as they don't get parsed.

Color codes in the prefix work completely fine though.

To Reproduce

Add color codes anywhere.
Only parses in the prefix.

Server and Plugin Versions

Minecraft: 1.17.1
Paper: 297
DriveBackupV2: 1.5.3

No backup method is enabled

Hello everybody!
Here is my config:
`
delay: 30
backup-thread-priority: 1
keep-count: 20
local-keep-count: 20
backups-require-players: true

scheduled-backups: false
schedule-timezone: "-00:00"
backup-schedule-list:

backup-list:

  • path: "../"
    format: "'ServerBackup-'dd-MM-yyyy_HH-mm.zip'"
    create: true
    blacklist:
    • "backups"
    • "crash-reports"
    • "logs"
    • "eula.txt"
    • "Redstoneworld.zip"
    • "server.jar"
    • "server.jar.old"

external-backup-list:

dir: "backups"

destination: "backups"

googledrive:
enabled: false
onedrive:
enabled: false
ftp:
enabled: false
hostname: "ftp.example.com"
port: 21
sftp: false
ftps: false
username: "Username"
password:
sftp-public-key:
sftp-passphrase:
working-dir:

messages:
send-in-chat: true
no-perm: "Zugriff verweigert: Deine Rechte reichen für diesen Befehl nicht aus."
backup-start: "Backup wird erstellt, der Server könnte kurz laggen..."
backup-complete: "Backup vollständig,"
next-backup: "das nächste Backup wird in %TIME Minuten ausgeführt."
next-schedule-backup: "das nächste Backup findet am %DATE statt."
next-schedule-backup-format: "dd.MM.yyyy, HH:mm"

advanced:
metrics: true
update-check: true
suppress-errors: false
prefix-chat-messages: true
date-language: "de"
ftp-file-seperator: "/"
`
I've configured it to create a backup of the entire server directory (except the blacklisted files) every 30 minutes. Just a local backup. But if I use /drivebackup backup it tells the that there is no backup method enabled.
Can someone help me? Thanks!
Greetings from germany, mariusHSK05

Old config file is now being used for messages

Not sure if this is something you intended, but figured I'd let you know.
While I was poking around and customizing for my server, I noted that you'd re-enabled ratismal's old conf file for the backup notifications. The only reason I say anything is because it says the file is depreciated.

Backup error with version 1.3.4

Backups doesn't work with latest version (works fine with version 1.3.3).
Server is on latest Paper 1.16.2 build.

image

>.... [10:19:06 WARN]: Exception in thread "Thread-249" java.lang.IllegalStateException: Asynchronous command dispatch!
>.... [10:19:06 WARN]: at org.spigotmc.AsyncCatcher.catchOp(AsyncCatcher.java:15)
>.... [10:19:06 WARN]: at org.bukkit.craftbukkit.v1_16_R2.CraftServer.dispatchCommand(CraftServer.java:775)
>.... [10:19:06 WARN]: at ratismal.drivebackup.UploadThread.setAutoSave(UploadThread.java:620)
>.... [10:19:06 WARN]: at ratismal.drivebackup.UploadThread.run(UploadThread.java:126)
>.... [10:19:06 WARN]: at java.lang.Thread.run(Thread.java:748)

DriveBackupV2 v1.2.3 generated an exception while executing task 313680

06.07 12:50:34 [Server] INFO [DriveBackupV2] Doing backups for world
06.07 12:51:17 [Server] INFO [DriveBackupV2] Uploading file to Google Drive
06.07 12:51:36 [Server] INFO [DriveBackupV2] File uploaded in 19.19 seconds (21109.64KB/s)
06.07 12:51:36 [Server] INFO [DriveBackupV2] There are 1 file(s) which exceeds the local limit of 0, deleting
06.07 12:51:36 [Server] INFO [DriveBackupV2] Old local backup deleted
06.07 12:51:36 [Server] INFO [DriveBackupV2] Doing backups for plugins
06.07 12:51:36 [Server] WARN [DriveBackupV2] Plugin DriveBackupV2 v1.2.3 generated an exception while executing task 313680
06.07 12:51:36 [Server] INFO java.lang.NullPointerException: null
06.07 12:51:36 [Server] INFO at ratismal.drivebackup.util.FileUtil.subFiles(FileUtil.java:56) ~[?:?]
06.07 12:51:36 [Server] INFO at ratismal.drivebackup.util.FileUtil.getFileToUpload(FileUtil.java:39) ~[?:?]
06.07 12:51:36 [Server] INFO at ratismal.drivebackup.UploadThread.run(UploadThread.java:149) ~[?:?]
06.07 12:51:36 [Server] INFO at org.bukkit.craftbukkit.v1_16_R1.scheduler.CraftTask.run(CraftTask.java:99) ~[patched_1.16.1.jar:git-Paper-46]
06.07 12:51:36 [Server] INFO at org.bukkit.craftbukkit.v1_16_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:54) ~[patched_1.16.1.jar:git-Paper-46]
06.07 12:51:36 [Server] INFO at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22) ~[patched_1.16.1.jar:git-Paper-46]
06.07 12:51:36 [Server] INFO at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_242]
06.07 12:51:36 [Server] INFO at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_242]
06.07 12:51:36 [Server] INFO at java.lang.Thread.run(Thread.java:748) [?:1.8.0_242]

(CRITICAL) Failed to upload to OneDrive, filled up local drive instead

This issue is very critical as it completely filled up the local drive; had I not noticed this could have had very bad consequences.

I've had a OneDrive account linked to DriveBackupV2 for several weeks without issue. Backups would be made, uploaded successfully, and deleted from the local backup folder. However, seemingly randomly, I got the following error in console. I am unsure if this was when the drive was already full, but shortly after I had other plugins such as CoreProtect complaining that disk was full. The disk filled up from the plugin storing many local backups despite having this in the configuration local-keep-count: 0.

There were no notifications that I had seen as a server operator. Perhaps the OneDrive token expired?

[05:34:42] [Server thread/INFO]: Automatic saving is now disabled
[05:34:42] [Craft Scheduler Thread - 28 - DriveBackupV2/INFO]: Backup Manager \u203A Creating backups, the server may lag for a little while...
[05:34:42] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: ratismal.drivebackup.DriveBackup.lib.JSONException: JSONObject["access_token"] not found.
[05:34:42] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at ratismal.drivebackup.DriveBackup.lib.JSONObject.get(JSONObject.java:572)
[05:34:42] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at ratismal.drivebackup.DriveBackup.lib.JSONObject.getString(JSONObject.java:859)
[05:34:42] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at ratismal.drivebackup.onedrive.OneDriveUploader.retrieveNewAccessToken(OneDriveUploader.java:248)
[05:34:42] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at ratismal.drivebackup.onedrive.OneDriveUploader.<init>(OneDriveUploader.java:202)
[05:34:42] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at ratismal.drivebackup.UploadThread.run(UploadThread.java:136)
[05:34:42] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at org.bukkit.craftbukkit.v1_17_R1.scheduler.CraftTask.run(CraftTask.java:100)
[05:34:42] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at org.bukkit.craftbukkit.v1_17_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:57)
[05:34:42] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22)
[05:34:42] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
[05:34:42] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
[05:34:42] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at java.base/java.lang.Thread.run(Thread.java:831)
[05:34:42] [Craft Scheduler Thread - 28 - DriveBackupV2/INFO]: Backup Manager \u203A Doing backups for "world"
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/INFO]: Backup Manager \u203A Uploading file to OneDrive
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: java.lang.Exception: Couldn't create folder backups
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at ratismal.drivebackup.onedrive.OneDriveUploader.createFolder(OneDriveUploader.java:457)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at ratismal.drivebackup.onedrive.OneDriveUploader.uploadFile(OneDriveUploader.java:274)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at ratismal.drivebackup.UploadThread.doSingleBackup(UploadThread.java:305)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at ratismal.drivebackup.UploadThread.run(UploadThread.java:195)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at org.bukkit.craftbukkit.v1_17_R1.scheduler.CraftTask.run(CraftTask.java:100)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at org.bukkit.craftbukkit.v1_17_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:57)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at java.base/java.lang.Thread.run(Thread.java:831)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: java.lang.NullPointerException: Cannot invoke "java.io.RandomAccessFile.close()" because "this.raf" is null
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at ratismal.drivebackup.onedrive.OneDriveUploader.uploadFile(OneDriveUploader.java:331)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at ratismal.drivebackup.UploadThread.doSingleBackup(UploadThread.java:305)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at ratismal.drivebackup.UploadThread.run(UploadThread.java:195)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at org.bukkit.craftbukkit.v1_17_R1.scheduler.CraftTask.run(CraftTask.java:100)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at org.bukkit.craftbukkit.v1_17_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:57)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at java.base/java.lang.Thread.run(Thread.java:831)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/INFO]: Backup Manager \u203A Doing backups for "plugins"
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: java.lang.NullPointerException: Cannot invoke "java.util.Map$Entry.getValue()" because the return value of "java.util.NavigableMap.firstEntry()" is null
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at ratismal.drivebackup.util.FileUtil.getNewestBackup(FileUtil.java:64)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at ratismal.drivebackup.UploadThread.doSingleBackup(UploadThread.java:298)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at ratismal.drivebackup.UploadThread.run(UploadThread.java:195)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at org.bukkit.craftbukkit.v1_17_R1.scheduler.CraftTask.run(CraftTask.java:100)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at org.bukkit.craftbukkit.v1_17_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:57)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/WARN]: 	at java.base/java.lang.Thread.run(Thread.java:831)
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/INFO]: Backup Manager \u203A Backup complete, the next backup is in 116 minutes
[05:37:49] [Craft Scheduler Thread - 28 - DriveBackupV2/INFO]: Backup Manager \u203A Disabling automatic backups due to inactivity
[05:37:49] [Server thread/INFO]: Automatic saving is now enabled

Backups not uploaded to drive

.... [10:09:28 INFO]: nazmoo issued server command: /drivebackup backup
.... [10:09:28 INFO]: [DriveBackupV2] Creating backups, the server may lag for a little while...
.... [10:09:28 INFO]: [DriveBackupV2] Doing backups for .
.... [10:12:11 INFO]: [DriveBackupV2] Uploading file to Google Drive
.... [10:12:13 WARN]: java.lang.NullPointerException
.... [10:12:13 WARN]: at ratismal.drivebackup.googledrive.GoogleDriveUploader.uploadFile(GoogleDriveUploader.java:323)
.... [10:12:13 WARN]: at ratismal.drivebackup.UploadThread.run(UploadThread.java:155)
.... [10:12:13 WARN]: at java.base/java.lang.Thread.run(Thread.java:834)
.... [10:12:13 INFO]: [DriveBackupV2] File uploaded in 1.59 seconds (1193728.3KB/s)
.... [10:12:13 INFO]: [DriveBackupV2] Backup complete

Instruction followed from wiki.
Probably the best way to reproduce:

  1. Relink account by 4 times (I switched server and try to figure why files are not uploaded to drive).
  2. Backuplist "."

I will wait for scheduled upload and update here.

[Severe] Google Drive Linking Broken

Linking with the drivebackup.web.app application with Google Drive does not work. The code is entered successfully, but the plugin does not update or recognize that it has been paired. So, Google Drive backup functionality is completely broken.

New Feature - Custom Messages/Prefix

Amazing plugins, one request editing the messages to not show in-game only in console and the ability to change the prefix and messages of the plugin.

Thanks and keep up the great work!
Oliver

NullPointerException when running backup

I installed some Vanilla Tweaks datapacks, and it stopped backing up and gave me the below errors:

java.lang.NullPointerException at ratismal.drivebackup.util.FileUtil.generateFileList(FileUtil.java:246) at ratismal.drivebackup.util.FileUtil.generateFileList(FileUtil.java:247) at ratismal.drivebackup.util.FileUtil.generateFileList(FileUtil.java:247) at ratismal.drivebackup.util.FileUtil.generateFileList(FileUtil.java:213) at ratismal.drivebackup.util.FileUtil.makeBackup(FileUtil.java:106) at ratismal.drivebackup.UploadThread.doSingleBackup(UploadThread.java:270) at ratismal.drivebackup.UploadThread.run(UploadThread.java:196) at java.base/java.lang.Thread.run(Unknown Source)

Removing the datapacks seems to have fixed the issue. The datapacks have spaces in their names, so this may be the cause.

Expected error when running /drivebackup nextbackup

I received this error when running /drivebackup nextbackup:

[03:35:47 INFO]: Player issued server command: /drivebackup nextbackup
[03:35:47 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'drivebackup' in plugin DriveBackupV2 v1.3.9
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[patched_1.16.5.jar:git-Paper-586]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:159) ~[patched_1.16.5.jar:git-Paper-586]
        at org.bukkit.craftbukkit.v1_16_R3.CraftServer.dispatchCommand(CraftServer.java:810) ~[patched_1.16.5.jar:git-Paper-586]
        at net.minecraft.server.v1_16_R3.PlayerConnection.handleCommand(PlayerConnection.java:2168) ~[patched_1.16.5.jar:git-Paper-586]
        at net.minecraft.server.v1_16_R3.PlayerConnection.c(PlayerConnection.java:1983) ~[patched_1.16.5.jar:git-Paper-586]
        at net.minecraft.server.v1_16_R3.PlayerConnection.a(PlayerConnection.java:1936) ~[patched_1.16.5.jar:git-Paper-586]
        at net.minecraft.server.v1_16_R3.PacketPlayInChat.a(PacketPlayInChat.java:50) ~[patched_1.16.5.jar:git-Paper-586]
        at net.minecraft.server.v1_16_R3.PacketPlayInChat.a(PacketPlayInChat.java:8) ~[patched_1.16.5.jar:git-Paper-586]
        at net.minecraft.server.v1_16_R3.PlayerConnectionUtils.lambda$ensureMainThread$1(PlayerConnectionUtils.java:35) ~[patched_1.16.5.jar:git-Paper-586]
        at net.minecraft.server.v1_16_R3.TickTask.run(SourceFile:18) ~[patched_1.16.5.jar:git-Paper-586]
        at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeTask(IAsyncTaskHandler.java:136) ~[patched_1.16.5.jar:git-Paper-586]
        at net.minecraft.server.v1_16_R3.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[patched_1.16.5.jar:git-Paper-586]
        at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeNext(IAsyncTaskHandler.java:109) ~[patched_1.16.5.jar:git-Paper-586]
        at net.minecraft.server.v1_16_R3.MinecraftServer.bb(MinecraftServer.java:1252) ~[patched_1.16.5.jar:git-Paper-586]
        at net.minecraft.server.v1_16_R3.MinecraftServer.executeNext(MinecraftServer.java:1245) ~[patched_1.16.5.jar:git-Paper-586]
        at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.awaitTasks(IAsyncTaskHandler.java:119) ~[patched_1.16.5.jar:git-Paper-586]
        at net.minecraft.server.v1_16_R3.MinecraftServer.sleepForTick(MinecraftServer.java:1206) ~[patched_1.16.5.jar:git-Paper-586]
        at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1120) ~[patched_1.16.5.jar:git-Paper-586]
        at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:289) ~[patched_1.16.5.jar:git-Paper-586]
        at java.lang.Thread.run(Thread.java:834) [?:?]
Caused by: java.lang.NullPointerException
        at ratismal.drivebackup.UploadThread.getNextAutoBackup(UploadThread.java:553) ~[?:?]
        at ratismal.drivebackup.handler.CommandHandler.onCommand(CommandHandler.java:108) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[patched_1.16.5.jar:git-Paper-586]
        ... 19 more

I've setup a Onedrive backup and my current config is set by default when this error appeared
My server version is Paper 1.16.5. Any solution?

[Feature request] Exclude directory

An example of this is if I want to backup the plugins directory, but I do not want to backup the plugins/dynmap/web directory (which is full of rendered tiles which make the final backup file huge)

Thread Crash on upload only config

First off, thanks for adding SFTP.

Here is the relevant part of my config, I don't think anything else really matters for this error.

- path: "world"
  format: "'Backup-world-'yyyy-M-d--HH-mm'.zip'"
  create: false

I am using a scheduled backup and the interval backup, and it goes to SFTP. I wan't to skip the local backup and just upload it. So I made the 'create' false. Once I did that, the console started throwing a thread exception: "NullPointerException".
I am not great with java, so I couldn't nail down why it was null, but I did some poking around in the code.

Looking at your code in file "UploadThread.java". It skips the 'create' config if statement, since it is false. So it should be going to the next statement, which is below.

try {
   if (Config.isGoogleEnabled()) {
      MessageUtil.sendConsoleMessage("Uploading file to Google Drive");
      timer.start();
      googleDriveUploader.uploadFile(file, type);
      timer.end();
      MessageUtil.sendConsoleMessage(timer.getUploadTimeMessage(file));
   }
   if (Config.isOnedriveEnabled()) {
      MessageUtil.sendConsoleMessage("Uploading file to OneDrive");
      timer.start();
      oneDriveUploader.uploadFile(file, type);
      timer.end();
      MessageUtil.sendConsoleMessage(timer.getUploadTimeMessage(file));
   }
   if (Config.isFtpEnabled()) {
      MessageUtil.sendConsoleMessage("Uploading file to FTP");
      timer.start();
      FTPUploader.uploadFile(file, type);
      timer.end();
      MessageUtil.sendConsoleMessage(timer.getUploadTimeMessage(file));
   }

   FileUtil.deleteFiles(type, format);
} catch (Exception e) {
   MessageUtil.sendConsoleException(e);
}

Looking at that, it looks like the check for FTP is missing the line STFPUploader.uploadFile(file, type);
Since I am not using SFTP, but SFTP.

I guess I am way off base, since there is a check for that in the FTPUploader.java

if (Config.isFtpSftp()) {
   SFTPUploader.uploadFile(file, type);
   return;
}

I have gotten a backup to work when "create" was set to true. It uploaded to the remote server and deleted the local copy. But looking at your config notes, it should be able to skip the local backup and just upload it straight away.
Any help would be greatly appreciated.

Another thing to note, there seems to be a bug when not using GDrive or OneDrive.

[13:19:01 WARN]: Unexpected token END OF FILE at position 0.
[13:19:01 WARN]:        at org.json.simple.parser.JSONParser.parse(JSONParser.java:257)
[13:19:01 WARN]:        at org.json.simple.parser.JSONParser.parse(JSONParser.java:81)
[13:19:01 WARN]:        at org.json.simple.parser.JSONParser.parse(JSONParser.java:75)
[13:19:01 WARN]:        at ratismal.drivebackup.googledrive.GoogleDriveUploader.setRefreshTokenFromStoredValue(GoogleDriveUploader.java:158)
[13:19:01 WARN]:        at ratismal.drivebackup.googledrive.GoogleDriveUploader.<init>(GoogleDriveUploader.java:143)
[13:19:01 WARN]:        at ratismal.drivebackup.UploadThread.run(UploadThread.java:55)
[13:19:01 WARN]:        at java.lang.Thread.run(Thread.java:748)
[13:19:01 WARN]: Unexpected token END OF FILE at position 0.
[13:19:01 WARN]:        at org.json.simple.parser.JSONParser.parse(JSONParser.java:257)
[13:19:01 WARN]:        at org.json.simple.parser.JSONParser.parse(JSONParser.java:81)
[13:19:01 WARN]:        at org.json.simple.parser.JSONParser.parse(JSONParser.java:75)
[13:19:01 WARN]:        at ratismal.drivebackup.onedrive.OneDriveUploader.setRefreshTokenFromStoredValue(OneDriveUploader.java:142)
[13:19:01 WARN]:        at ratismal.drivebackup.onedrive.OneDriveUploader.<init>(OneDriveUploader.java:126)
[13:19:01 WARN]:        at ratismal.drivebackup.UploadThread.run(UploadThread.java:56)
[13:19:01 WARN]:        at java.lang.Thread.run(Thread.java:748)

It goes away when "suppress-errors" is true, but that might also be something to fix.

[Suggestion] S3 Support

Adding s3 support would be quite nice for us since we have a bit of developers who have access to the files which means they would be able to see SFTP creds if we use sftp/ftp

Error when using glob

I have the glob setup as per the wiki example and i get this error:

[02:00:01] [Craft Scheduler Thread - 3050 - DriveBackupV2/WARN]: [DriveBackupV2] Plugin DriveBackupV2 v1.3.8 generated an exception while executing task 19
java.lang.Error: Unresolved compilation problem: 
	The method of(String) is undefined for the type Path

	at ratismal.drivebackup.util.FileUtil.generateGlobFolderList(FileUtil.java:261) ~[?:?]
	at ratismal.drivebackup.UploadThread.run(UploadThread.java:203) ~[?:?]
	at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftTask.run(CraftTask.java:100) ~[patched_1.16.5.jar:git-Purpur-978]
	at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:58) ~[patched_1.16.5.jar:git-Purpur-978]
	at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22) ~[patched_1.16.5.jar:git-Purpur-978]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
	at java.lang.Thread.run(Thread.java:834) [?:?]

This is my config:

# 
# DriveBackupV2   -   by Max Maeder (MaxTheGinus)
delay: -1
backup-thread-priority: 7
keep-count: 10
local-keep-count: 15
zip-compression: -1
backups-require-players: true
disable-saving-during-backups: true
scheduled-backups: true
schedule-timezone: -05:00
backup-schedule-list:
- days:
  - everyday
  time: 02:00
backup-format-timezone: -05:00
backup-list:
- glob: world*
  format: '''Backup-world-''yyyy-M-d--HH-mm''.zip'''
  create: true
- path: plugins
  format: '''Backup-plugins-''yyyy-M-d--HH-mm''.zip'''
  create: true
  blacklist:
  - '**/*.jar'
  - dynmap/**
dir: backups
destination: backups
googledrive:
  enabled: true
onedrive:
  enabled: false
ftp:
  enabled: false
  hostname: ftp.example.com
  port: 21
  sftp: false
  ftps: false
  username: Username
messages:
  send-in-chat: true
  no-perm: You don't have permission to do this!
  backup-start: Creating backups...
  backup-complete: Backup complete,
  next-backup: the next backup is in %TIME minutes
  next-schedule-backup: the next backup is at %DATE
  next-schedule-backup-format: h:mm a EEE, MMM d O
  auto-backups-disabled: Automatic backups are disabled
advanced:
  metrics: false
  update-check: true
  suppress-errors: false
  message-prefix: '&6[&4DriveBackupV2&6] '
  default-message-color: '&3'
  date-language: en
  ftp-file-separator: /

Any help would be appreciated.

Paper spigot

So when i bakup it only backups the world files and not the nether and end files?

Using a shared GDrive

I have a shared GDrive with all my friends for backups to our server. is there a way I can use that instead of my straight drive

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.