Skip to content

Commit b80fd52

Browse files
hykilpikonnaaanushkasharma
authored andcommitted
[O] PluginLoader: Split findJar
1 parent fc295a1 commit b80fd52

File tree

4 files changed

+65
-19
lines changed

4 files changed

+65
-19
lines changed

src/main/java/org/hydev/mcpm/client/arguments/CommandsFactory.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.hydev.mcpm.client.database.export.ExportInteractor;
1212
import org.hydev.mcpm.client.database.fetcher.LocalDatabaseFetcher;
1313
import org.hydev.mcpm.client.database.searchusecase.SearchInteractor;
14+
import org.hydev.mcpm.client.injector.LocalJarFinder;
1415
import org.hydev.mcpm.client.injector.PluginLoader;
1516
import org.hydev.mcpm.client.installer.InstallInteractor;
1617
import org.hydev.mcpm.client.installer.SpigotPluginDownloader;
@@ -78,7 +79,8 @@ public static List<CommandParser> baseParsers(boolean isMinecraft) {
7879
* @return Returns a list of argument parsers that require the Server (Minecraft Bukkit Plugin) environment.
7980
*/
8081
public static List<CommandParser> serverParsers() {
81-
var loader = new PluginLoader();
82+
var jarFinder = new LocalJarFinder();
83+
var loader = new PluginLoader(jarFinder);
8284

8385
var loadController = new LoadController(loader);
8486
var reloadController = new ReloadController(loader);
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.hydev.mcpm.client.injector;
2+
3+
import java.io.File;
4+
5+
/**
6+
* Boundary for finding local jar files
7+
*
8+
* @author Azalea (https://github.com/hykilpikonna)
9+
* @since 2022-11-27
10+
*/
11+
public interface LocalJarBoundary
12+
{
13+
/**
14+
* Find a jar file of a plugin in file system by name
15+
*
16+
* @param name Plugin name in meta
17+
* @return Plugin jar file
18+
*/
19+
File findJar(String name) throws PluginNotFoundException;
20+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package org.hydev.mcpm.client.injector;
2+
3+
import org.hydev.mcpm.client.models.PluginYml;
4+
import org.hydev.mcpm.utils.PluginJarFile;
5+
6+
import java.io.File;
7+
import java.io.IOException;
8+
import java.util.Arrays;
9+
import java.util.Optional;
10+
11+
/**
12+
* Implementation that finds locally installed jars by name
13+
*
14+
* @param dir Plugins directory (default to "./plugins")
15+
* @author Azalea (https://github.com/hykilpikonna)
16+
* @since 2022-11-27
17+
*/
18+
public record LocalJarFinder(File dir) implements LocalJarBoundary
19+
{
20+
public LocalJarFinder()
21+
{
22+
this(new File("plugins"));
23+
}
24+
25+
@Override
26+
public File findJar(String name) throws PluginNotFoundException
27+
{
28+
// 1. Find plugin file by name
29+
if (!dir.isDirectory()) throw new PluginNotFoundException(name);
30+
return Arrays.stream(Optional.ofNullable(dir.listFiles()).orElseThrow(() -> new PluginNotFoundException(name)))
31+
.filter(f -> f.getName().endsWith(".jar"))
32+
.filter(f -> {
33+
try (var jf = new PluginJarFile(f))
34+
{
35+
return jf.readPluginYaml().name().equalsIgnoreCase(name);
36+
}
37+
catch (IOException | PluginYml.InvalidPluginMetaStructure ignored) { return false; }
38+
}).findFirst().orElseThrow(() -> new PluginNotFoundException(name));
39+
}
40+
}

src/main/java/org/hydev/mcpm/client/injector/PluginLoader.java

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@
1010
import org.bukkit.plugin.InvalidPluginException;
1111
import org.bukkit.plugin.Plugin;
1212
import org.bukkit.plugin.RegisteredListener;
13-
import org.hydev.mcpm.client.models.PluginYml;
14-
import org.hydev.mcpm.utils.PluginJarFile;
1513

1614
import java.io.File;
1715
import java.io.IOException;
@@ -30,26 +28,12 @@
3028
* @author Azalea (https://github.com/hykilpikonna)
3129
* @since 2022-09-27
3230
*/
33-
public class PluginLoader implements LoadBoundary, UnloadBoundary, ReloadBoundary
31+
public record PluginLoader(LocalJarFinder jarFinder) implements LoadBoundary, UnloadBoundary, ReloadBoundary
3432
{
3533
@Override
3634
public boolean loadPlugin(String name) throws PluginNotFoundException
3735
{
38-
// 1. Find plugin file by name
39-
var dir = new File("plugins");
40-
if (!dir.isDirectory()) throw new PluginNotFoundException(name);
41-
var file = Arrays.stream(Optional.ofNullable(dir.listFiles())
42-
.orElseThrow(() -> new PluginNotFoundException(name)))
43-
.filter(f -> f.getName().endsWith(".jar"))
44-
.filter(f -> {
45-
try (var jf = new PluginJarFile(f))
46-
{
47-
return jf.readPluginYaml().name().equalsIgnoreCase(name);
48-
}
49-
catch (IOException | PluginYml.InvalidPluginMetaStructure ignored) { return false; }
50-
}).findFirst().orElseThrow(() -> new PluginNotFoundException(name));
51-
52-
return loadPlugin(file);
36+
return loadPlugin(jarFinder.findJar(name));
5337
}
5438

5539
@Override

0 commit comments

Comments
 (0)