Skip to content

Commit 9aaa39d

Browse files
author
magiclu550
committed
Add the simple plugin class loader [CloudburstMC#2 finished]
1 parent e6f18e6 commit 9aaa39d

File tree

6 files changed

+49
-2
lines changed

6 files changed

+49
-2
lines changed

src/main/java/cn/nukkit/plugin/JavaPluginLoader.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import cn.nukkit.event.plugin.PluginEnableEvent;
66
import cn.nukkit.plugin.simple.Command;
77
import cn.nukkit.plugin.simple.Main;
8+
import cn.nukkit.plugin.simple.Permission;
89
import cn.nukkit.utils.PluginException;
910
import cn.nukkit.utils.Utils;
1011

@@ -70,7 +71,7 @@ public Plugin loadPlugin(File file) throws Exception {
7071
return null;
7172
}
7273

73-
//TODO
74+
//simple load Plugin
7475
@Override
7576
public Plugin simpleLoadPlugin(File file) {
7677
try {
@@ -87,6 +88,11 @@ public Plugin simpleLoadPlugin(File file) {
8788
//do it
8889
}
8990

91+
@Override
92+
public Plugin simpleLoadPlugin(String fileName) {
93+
return simpleLoadPlugin(new File(fileName));
94+
}
95+
9096
private Class getSimplePlugin(File file){
9197
try(JarFile jarFile = new JarFile(file)){
9298
PluginClassLoader classLoader = new PluginClassLoader(this, this.getClass().getClassLoader(),file);
@@ -139,6 +145,16 @@ private PluginDescription getSimpleDescription(Class<?> plugin){
139145
hashMap.put("website",website);
140146
hashMap.put("prefix",prefix);
141147
PluginDescription descript = new PluginDescription(hashMap);
148+
Permission[] permissions = main.permissions();
149+
HashMap<String,Map<String,String>> pers = new HashMap<>();
150+
for(Permission p:permissions){
151+
HashMap<String,String> pers_child = new HashMap<>();
152+
pers_child.put("description",p.description());
153+
pers_child.put("default",p.theDefault());
154+
pers.put(p.permission(),pers_child);
155+
156+
}
157+
hashMap.put("permissions",pers);
142158
Command[] commands = main.commands();
143159
for(Command command:commands){
144160
descript.getCommands().put(command.name(),command);

src/main/java/cn/nukkit/plugin/PluginLoader.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ public interface PluginLoader {
6868
*/
6969
Plugin simpleLoadPlugin(File file);
7070

71+
Plugin simpleLoadPlugin(String fileName);
72+
7173
/**
7274
* 通过插件文件名的字符串,来获得描述这个插件的 {@code PluginDescription}对象。<br>
7375
* Gets a {@code PluginDescription} object describes the plugin by its file name.

src/main/java/cn/nukkit/plugin/PluginManager.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import cn.nukkit.event.*;
77
import cn.nukkit.permission.Permissible;
88
import cn.nukkit.permission.Permission;
9+
import cn.nukkit.plugin.simple.Command;
910
import cn.nukkit.utils.MainLogger;
1011
import cn.nukkit.utils.PluginException;
1112
import cn.nukkit.utils.Utils;
@@ -108,6 +109,14 @@ public Plugin loadPlugin(File file, Map<String, PluginLoader> loaders) {
108109
Server.getInstance().getLogger().critical("Could not load plugin", e);
109110
return null;
110111
}
112+
}else{
113+
Plugin plugin = loader.simpleLoadPlugin(file);
114+
this.plugins.put(plugin.getDescription().getName(),plugin);
115+
List<PluginCommand> pluginCommands = this.parseSimplePluginCommands(plugin);
116+
117+
if (!pluginCommands.isEmpty()) {
118+
this.commandMap.registerAll(plugin.getDescription().getName(), pluginCommands);
119+
}
111120
}
112121
}
113122
}
@@ -116,6 +125,7 @@ public Plugin loadPlugin(File file, Map<String, PluginLoader> loaders) {
116125
return null;
117126
}
118127

128+
119129
public Map<String, Plugin> loadPlugins(String dictionary) {
120130
return this.loadPlugins(new File(dictionary));
121131
}
@@ -447,6 +457,21 @@ public void enablePlugin(Plugin plugin) {
447457
}
448458
}
449459

460+
protected List<PluginCommand> parseSimplePluginCommands(Plugin plugin){
461+
List<PluginCommand> pluginCmds = new ArrayList<>();
462+
Set<Map.Entry<String,Object>> commands = plugin.getDescription().getCommands().entrySet();
463+
for(Object obj : commands){
464+
Command command = (Command)obj;
465+
PluginCommand newCmd = new PluginCommand<>(command.name(),plugin);
466+
newCmd.setDescription(command.description());
467+
newCmd.setUsage(command.usage());
468+
newCmd.setAliases(command.aliases());
469+
newCmd.setPermission(command.permission());
470+
pluginCmds.add(newCmd);
471+
}
472+
return pluginCmds;
473+
}
474+
450475
protected List<PluginCommand> parseYamlCommands(Plugin plugin) {
451476
List<PluginCommand> pluginCmds = new ArrayList<>();
452477

src/main/java/cn/nukkit/plugin/simple/Command.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
String description() default "";
1717

18-
Permission permission();
18+
String permission();
1919

2020
String[] aliases() default {};
2121
}

src/main/java/cn/nukkit/plugin/simple/Main.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,7 @@
4343

4444
Command[] commands() default {};
4545

46+
Permission[] permissions() default {};
47+
4648

4749
}

src/main/java/cn/nukkit/plugin/simple/Permission.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
@Target(ElementType.TYPE)
1010
public @interface Permission {
1111

12+
String permission();
13+
1214
String description() default "";
1315

1416
String theDefault();

0 commit comments

Comments
 (0)