blob: ead80ec0fe937b3f258ab7c952940762967973ea (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Xemorr <31805746+Xemorr@users.noreply.github.com>
Date: Fri, 1 Apr 2022 19:57:40 +0100
Subject: [PATCH] Update Folder Uses Plugin Name
diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
index 42da20011544075a9bea63a12ae86f2f21720667..bea2e464861771383f8fcf143fa817340cb8ab1d 100644
--- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java
+++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
@@ -400,7 +400,7 @@ public final class SimplePluginManager implements PluginManager {
public synchronized Plugin loadPlugin(@NotNull File file) throws InvalidPluginException, UnknownDependencyException {
Validate.notNull(file, "File cannot be null");
- checkUpdate(file);
+ file = checkUpdate(file); // Paper - update the reference in case checkUpdate renamed it
Set<Pattern> filters = fileAssociations.keySet();
Plugin result = null;
@@ -427,16 +427,50 @@ public final class SimplePluginManager implements PluginManager {
return result;
}
- private void checkUpdate(@NotNull File file) {
+ // Paper start - Update Folder Uses Plugin Name to replace
+ /**
+ * Replaces a plugin with a plugin of the same plugin name in the update folder.
+ * @param file
+ * @throws InvalidPluginException
+ */
+ private File checkUpdate(@NotNull File file) throws InvalidPluginException {
if (updateDirectory == null || !updateDirectory.isDirectory()) {
- return;
+ return file;
}
+ PluginLoader pluginLoader = getPluginLoader(file);
+ try {
+ String pluginName = pluginLoader.getPluginDescription(file).getName();
+ for (File updateFile : updateDirectory.listFiles()) {
+ if (!updateFile.isFile()) continue;
+ PluginLoader updatePluginLoader = getPluginLoader(updateFile);
+ if (updatePluginLoader == null) continue;
+ String updatePluginName = updatePluginLoader.getPluginDescription(updateFile).getName();
+ if (!pluginName.equals(updatePluginName)) continue;
+ if (!FileUtil.copy(updateFile, file)) continue;
+ File newName = new File(file.getParentFile(), updateFile.getName());
+ file.renameTo(newName);
+ updateFile.delete();
+ return newName;
+ }
+ }
+ catch (InvalidDescriptionException e) {
+ throw new InvalidPluginException(e);
+ }
+ return file;
+ }
- File updateFile = new File(updateDirectory, file.getName());
- if (updateFile.isFile() && FileUtil.copy(updateFile, file)) {
- updateFile.delete();
+ @Nullable
+ private PluginLoader getPluginLoader(File file) {
+ Set<Pattern> filters = fileAssociations.keySet();
+ for (Pattern filter : filters) {
+ Matcher match = filter.matcher(file.getName());
+ if (match.find()) {
+ return fileAssociations.get(filter);
+ }
}
+ return null;
}
+ // Paper end
/**
* Checks if the given plugin is loaded and returns it when applicable
|