From 0e1bee0ca137d6e99596aab8c979facb1659dc6e Mon Sep 17 00:00:00 2001 From: Frank van der Heijden Date: Thu, 25 Mar 2021 16:45:42 +0100 Subject: [PATCH] Fixes watchplugin not reloading when the file is instantly written --- .../serverutils/common/tasks/PluginWatcherTask.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Common/src/main/java/net/frankheijden/serverutils/common/tasks/PluginWatcherTask.java b/Common/src/main/java/net/frankheijden/serverutils/common/tasks/PluginWatcherTask.java index 17a530c..13c9fb7 100644 --- a/Common/src/main/java/net/frankheijden/serverutils/common/tasks/PluginWatcherTask.java +++ b/Common/src/main/java/net/frankheijden/serverutils/common/tasks/PluginWatcherTask.java @@ -41,6 +41,7 @@ public class PluginWatcherTask extends AbstractTask { private final AtomicBoolean run; private File file; private String hash; + private long hashTimestamp = 0; private WatchService watchService; private Object task = null; @@ -69,14 +70,18 @@ public class PluginWatcherTask extends AbstractTask { WatchKey key = watchService.take(); for (WatchEvent event : key.pollEvents()) { if (file.getName().equals(event.context().toString())) { - String previousHash = hash; - hash = FileUtils.getHash(file); if (task != null) { //noinspection unchecked taskManager.cancelTask(task); } + + String previousHash = hash; + long previousHashTimestamp = hashTimestamp; + + hash = FileUtils.getHash(file); + hashTimestamp = System.currentTimeMillis(); task = ServerUtilsApp.getPlugin().getTaskManager().runTaskLater(() -> { - if (hash.equals(previousHash)) { + if (hash.equals(previousHash) || previousHashTimestamp < hashTimestamp - 1000L) { send(WatchResult.CHANGE); pluginManager.reloadPlugin(pluginName);