mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-23 06:50:25 +01:00
81 lines
3.5 KiB
Diff
81 lines
3.5 KiB
Diff
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 45114d587a8f201778adcba16c8a019f9959f472..ed07f5820281b139739f673fa4e25171de81b894 100644
|
|
--- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java
|
|
+++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
|
|
@@ -395,7 +395,7 @@ public final class SimplePluginManager implements PluginManager {
|
|
public synchronized Plugin loadPlugin(@NotNull File file) throws InvalidPluginException, UnknownDependencyException {
|
|
Preconditions.checkArgument(file != null, "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;
|
|
@@ -422,16 +422,56 @@ 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;
|
|
+ try {
|
|
+ updatePluginName = updatePluginLoader.getPluginDescription(updateFile).getName();
|
|
+ // We failed to load this data for some reason, so, we'll skip over this
|
|
+ } catch (InvalidDescriptionException ex) {
|
|
+ continue;
|
|
+ }
|
|
+ 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
|