Skip to content

Commit 830e9d0

Browse files
committed
Fix module config reading
1 parent 31ec15d commit 830e9d0

File tree

11 files changed

+110
-261
lines changed

11 files changed

+110
-261
lines changed

API/src/main/java/me/innectic/permissify/api/PermissifyAPI.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@
2828
import me.innectic.permissify.api.database.ConnectionInformation;
2929
import me.innectic.permissify.api.database.DatabaseHandler;
3030
import me.innectic.permissify.api.database.handlers.HandlerType;
31+
import me.innectic.permissify.api.module.registry.ModuleLoader;
3132
import me.innectic.permissify.api.module.registry.ModuleProvider;
3233
import me.innectic.permissify.api.profile.ProfileSerializer;
33-
import me.innectic.permissify.api.util.ChatModule;
3434
import me.innectic.permissify.api.util.DisplayUtil;
3535

3636
import java.lang.reflect.InvocationTargetException;
@@ -51,17 +51,20 @@ public class PermissifyAPI {
5151
@Getter private DisplayUtil displayUtil;
5252
@Getter private ProfileSerializer profileSerializer;
5353
@Getter private Logger logger;
54+
5455
@Getter private ModuleProvider moduleProvider;
56+
@Getter private ModuleLoader moduleLoader;
5557

5658
/**
5759
* Initialize Permissify's API
5860
*/
59-
public void initialize(HandlerType type, Optional<ConnectionInformation> connectionInformation, DisplayUtil displayUtil, Logger logger) throws Exception {
61+
public void initialize(HandlerType type, Optional<ConnectionInformation> connectionInformation, DisplayUtil displayUtil, Logger logger, String moduleLocation, Object plugin) throws Exception {
6062
instance = Optional.of(this);
6163
this.logger = logger;
6264
this.displayUtil = displayUtil;
6365
profileSerializer = new ProfileSerializer();
6466
moduleProvider = new ModuleProvider();
67+
moduleLoader = new ModuleLoader(moduleLocation);
6568

6669
try {
6770
databaseHandler = Optional.of(type.getHandler().getConstructor(ConnectionInformation.class).newInstance(connectionInformation.orElse(null)));
@@ -76,8 +79,8 @@ public void initialize(HandlerType type, Optional<ConnectionInformation> connect
7679
if (connected) logger.info("Connected to the database.");
7780
else logger.log(Level.SEVERE, "Unable to connect to the database.");
7881
});
79-
logger.info("Registering Permissify modules...");
80-
moduleProvider.registerModule(ChatModule.class, "permissify");
82+
logger.info("Registering modules...");
83+
moduleLoader.loadModules(plugin);
8184
}
8285

8386
public static Optional<PermissifyAPI> get() {

API/src/main/java/me/innectic/permissify/api/module/PermissifyModule.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,6 @@ public PermissifyModule(String moduleName) {
2323
this.moduleName = moduleName;
2424
}
2525

26-
public abstract void initialize();
27-
public abstract void deinitialize();
26+
public abstract void initialize(Object plugin);
27+
public abstract void deinitialize(Object plugin);
2828
}

API/src/main/java/me/innectic/permissify/api/module/annotation/Handles.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@
1212
@Retention(RetentionPolicy.RUNTIME)
1313
@Target(ElementType.METHOD)
1414
public @interface Handles {
15-
String value();
15+
String event();
16+
Service service();
1617
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package me.innectic.permissify.api.module.annotation;
2+
3+
/**
4+
* @author Innectic
5+
* @since 9/4/2017
6+
*/
7+
public enum Service {
8+
SPIGOT, SPONGE
9+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package me.innectic.permissify.api.module.registry;
2+
3+
import com.google.gson.Gson;
4+
import lombok.AllArgsConstructor;
5+
import me.innectic.permissify.api.PermissifyAPI;
6+
import me.innectic.permissify.api.module.registry.schema.ModuleFile;
7+
8+
import java.io.*;
9+
import java.net.URL;
10+
import java.net.URLClassLoader;
11+
import java.util.Arrays;
12+
13+
/**
14+
* @author Innectic
15+
* @since 9/4/2017
16+
*/
17+
@AllArgsConstructor
18+
public class ModuleLoader {
19+
private final String moduleDirectory;
20+
21+
/**
22+
* Load all modules in the module directory.
23+
*/
24+
public void loadModules(Object plugin) {
25+
File moduleFolder = new File(moduleDirectory);
26+
if (!moduleFolder.exists()) moduleFolder.mkdir();
27+
if (!moduleFolder.isDirectory()) return;
28+
File[] potentialModules = moduleFolder.listFiles();
29+
if (potentialModules == null) return;
30+
31+
Gson gson = new Gson();
32+
Arrays.stream(potentialModules).forEach(file -> {
33+
File jarFile;
34+
if (!file.getName().endsWith(".jar")) return;
35+
36+
String baseName = file.getName().contains(".") ? file.getName().split("\\.")[0] : null;
37+
if (baseName == null) return;
38+
39+
jarFile = new File(moduleDirectory + "/" + baseName + ".jar");
40+
try {
41+
URLClassLoader child = new URLClassLoader(new URL[]{jarFile.toURL()}, this.getClass().getClassLoader());
42+
InputStream pmodStream = child.findResource(baseName + ".pmod").openStream();
43+
if (pmodStream == null) return;
44+
45+
BufferedInputStream inputStream = new BufferedInputStream(pmodStream);
46+
InputStreamReader reader = new InputStreamReader(inputStream);
47+
ModuleFile moduleFile = gson.fromJson(reader, ModuleFile.class);
48+
49+
Class loading = Class.forName(moduleFile.getMain(), true, child);
50+
if (loading == null) return;
51+
PermissifyAPI.get().ifPresent(api ->
52+
api.getModuleProvider().registerModule(loading, moduleFile.getName(), plugin));
53+
} catch (ClassNotFoundException | IOException e) {
54+
e.printStackTrace();
55+
}
56+
});
57+
}
58+
}

API/src/main/java/me/innectic/permissify/api/module/registry/ModuleProvider.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,19 @@ public class ModuleProvider {
2020
@Getter private Map<String, PermissifyModule> modules = new HashMap<>();
2121
@Getter private Map<String, Module> eventHandlers = new HashMap<>();
2222

23-
public void registerModule(Class<? extends PermissifyModule> module, String source) {
23+
public void registerModule(Class<? extends PermissifyModule> module, String source, Object plugin) {
2424
try {
2525
Constructor<? extends PermissifyModule> moduleConstructor = module.getConstructor();
2626
PermissifyModule constructedModule = moduleConstructor.newInstance();
2727

2828
modules.put(constructedModule.getModuleName(), constructedModule);
2929

3030
// Initialize the module
31-
constructedModule.initialize();
31+
constructedModule.initialize(plugin);
3232

3333
Arrays.stream(constructedModule.getClass().getMethods()).filter(method -> method.isAnnotationPresent(Handles.class)).forEach(method -> {
3434
Handles handleAnnotation = method.getAnnotation(Handles.class);
35-
String event = handleAnnotation.value();
35+
String event = handleAnnotation.event();
3636

3737
// Store the handler
3838
eventHandlers.put(event, new Module(constructedModule.getModuleName(), method));
@@ -46,8 +46,8 @@ public void registerModule(Class<? extends PermissifyModule> module, String sour
4646
}
4747
}
4848

49-
public void end() {
50-
modules.entrySet().stream().map(Map.Entry::getValue).forEach(PermissifyModule::deinitialize);
49+
public void end(Object plugin) {
50+
modules.entrySet().stream().map(Map.Entry::getValue).forEach(module -> module.deinitialize(plugin));
5151
}
5252

5353
public Object pushEvent(String event, Object... arguments) {
@@ -63,7 +63,7 @@ public Object pushEvent(String event, Object... arguments) {
6363
private void reportRegistration(String moduleName, String event) {
6464
if (moduleName.equals("permissify")) return;
6565
PermissifyAPI.get().ifPresent(api -> api.getLogger().log(Level.WARNING,
66-
String.format("Module %s has registered event %s. Try removing it before reporting any bugs.!", moduleName, event)));
66+
String.format("Module %s has registered event %s. Try removing it before reporting any bugs!", moduleName, event)));
6767
}
6868

6969
@AllArgsConstructor
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package me.innectic.permissify.api.module.registry.schema;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
6+
/**
7+
* @author Innectic
8+
* @since 9/4/2017
9+
*/
10+
@AllArgsConstructor
11+
public class ModuleFile {
12+
@Getter private int version;
13+
@Getter private String name;
14+
@Getter private String main;
15+
16+
@Override
17+
public String toString() {
18+
return "ModuleFile [" +
19+
"version=" + version +
20+
", name=" + name +
21+
", main=" + main +
22+
" ]";
23+
}
24+
}

API/src/main/java/me/innectic/permissify/api/util/ChatModule.java

Lines changed: 0 additions & 112 deletions
This file was deleted.

Spigot/src/main/java/me/innectic/permissify/spigot/PermissifyMain.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,9 @@
2828
import lombok.Setter;
2929
import me.innectic.permissify.spigot.commands.PermissifyCommand;
3030
import me.innectic.permissify.spigot.commands.permissify.*;
31-
import me.innectic.permissify.spigot.events.PlayerChat;
3231
import me.innectic.permissify.spigot.events.PlayerJoin;
3332
import me.innectic.permissify.api.PermissifyAPI;
3433
import me.innectic.permissify.api.database.handlers.FullHandler;
35-
import me.innectic.permissify.spigot.events.PreProcess;
3634
import me.innectic.permissify.spigot.utils.ConfigVerifier;
3735
import me.innectic.permissify.spigot.utils.DisplayUtil;
3836
import org.bukkit.Bukkit;
@@ -77,7 +75,7 @@ public void onEnable() {
7775
}
7876
handleChat = getConfig().getBoolean("handleChat");
7977
try {
80-
permissifyAPI.initialize(handler.get().getHandlerType().get(), handler.get().getConnectionInformation(), new DisplayUtil(), getLogger());
78+
permissifyAPI.initialize(handler.get().getHandlerType().get(), handler.get().getConnectionInformation(), new DisplayUtil(), getLogger(), getDataFolder().getAbsolutePath() + "/modules", this);
8179
} catch (Exception e) {
8280
e.printStackTrace();
8381
}
@@ -92,7 +90,7 @@ public void onEnable() {
9290

9391
@Override
9492
public void onDisable() {
95-
permissifyAPI.getModuleProvider().end();
93+
permissifyAPI.getModuleProvider().end(this);
9694

9795
configVerifier = null;
9896
permissifyAPI = null;
@@ -135,7 +133,5 @@ private void registerListeners() {
135133
PluginManager pluginManager = Bukkit.getPluginManager();
136134

137135
pluginManager.registerEvents(new PlayerJoin(), this);
138-
pluginManager.registerEvents(new PlayerChat(), this);
139-
pluginManager.registerEvents(new PreProcess(), this);
140136
}
141137
}

0 commit comments

Comments
 (0)