Skip to content

Commit a04d476

Browse files
committed
Create module provider system
This is also the first commit after moving orgs
1 parent 25b111b commit a04d476

File tree

8 files changed

+106
-88
lines changed

8 files changed

+106
-88
lines changed

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

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,16 @@
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.ModuleRegister;
31+
import me.innectic.permissify.api.module.registry.ModuleProvider;
3232
import me.innectic.permissify.api.profile.ProfileSerializer;
3333
import me.innectic.permissify.api.util.ChatModule;
3434
import me.innectic.permissify.api.util.DisplayUtil;
3535

36-
import java.awt.*;
3736
import java.lang.reflect.InvocationTargetException;
3837
import java.util.ArrayList;
3938
import java.util.Optional;
4039
import java.util.logging.Level;
4140
import java.util.logging.Logger;
42-
import java.util.logging.SimpleFormatter;
43-
import java.util.logging.StreamHandler;
4441

4542
/**
4643
* @author Innectic
@@ -52,8 +49,9 @@ public class PermissifyAPI {
5249

5350
@Getter private Optional<DatabaseHandler> databaseHandler;
5451
@Getter private DisplayUtil displayUtil;
55-
@Getter private ProfileSerializer serializer;
52+
@Getter private ProfileSerializer profileSerializer;
5653
@Getter private Logger logger;
54+
@Getter private ModuleProvider moduleProvider;
5755

5856
/**
5957
* Initialize Permissify's API
@@ -62,7 +60,8 @@ public void initialize(HandlerType type, Optional<ConnectionInformation> connect
6260
instance = Optional.of(this);
6361
this.logger = logger;
6462
this.displayUtil = displayUtil;
65-
serializer = new ProfileSerializer();
63+
profileSerializer = new ProfileSerializer();
64+
moduleProvider = new ModuleProvider();
6665

6766
try {
6867
databaseHandler = Optional.of(type.getHandler().getConstructor(ConnectionInformation.class).newInstance(connectionInformation.orElse(null)));
@@ -78,7 +77,7 @@ public void initialize(HandlerType type, Optional<ConnectionInformation> connect
7877
else logger.log(Level.SEVERE, "Unable to connect to the database.");
7978
});
8079
logger.info("Registering Permissify modules...");
81-
ModuleRegister.registerModule(ChatModule.class, "internal");
80+
moduleProvider.registerModule(ChatModule.class, "internal");
8281
}
8382

8483
public static Optional<PermissifyAPI> get() {

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,7 @@ public abstract class PermissifyModule {
2222
public PermissifyModule(String moduleName) {
2323
this.moduleName = moduleName;
2424
}
25+
26+
public abstract void initialize();
27+
public abstract void deinitialize();
2528
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package me.innectic.permissify.api.module.registry;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
import me.innectic.permissify.api.PermissifyAPI;
6+
import me.innectic.permissify.api.module.PermissifyModule;
7+
import me.innectic.permissify.api.module.annotation.Handles;
8+
9+
import java.lang.reflect.Constructor;
10+
import java.lang.reflect.InvocationTargetException;
11+
import java.lang.reflect.Method;
12+
import java.util.*;
13+
import java.util.logging.Level;
14+
15+
/**
16+
* @author Innectic
17+
* @since 9/2/2017
18+
*/
19+
public class ModuleProvider {
20+
@Getter private Map<String, PermissifyModule> modules = new HashMap<>();
21+
@Getter private Map<String, Module> eventHandlers = new HashMap<>();
22+
23+
public void registerModule(Class<? extends PermissifyModule> module, String source) {
24+
try {
25+
Constructor<? extends PermissifyModule> moduleConstructor = module.getConstructor();
26+
PermissifyModule constructedModule = moduleConstructor.newInstance();
27+
28+
modules.put(constructedModule.getModuleName(), constructedModule);
29+
30+
// Initialize the module
31+
constructedModule.initialize();
32+
33+
Arrays.stream(constructedModule.getClass().getMethods()).filter(method -> method.isAnnotationPresent(Handles.class)).forEach(method -> {
34+
Handles handleAnnotation = method.getAnnotation(Handles.class);
35+
String event = handleAnnotation.value();
36+
37+
// Store the handler
38+
eventHandlers.put(event, new Module(constructedModule.getModuleName(), method));
39+
reportRegistration(source, event);
40+
});
41+
PermissifyAPI.get().ifPresent(api -> api.getLogger().log(Level.WARNING,
42+
String.format("Module %s has been registered!", constructedModule.getModuleName())));
43+
} catch (NoSuchMethodException | IllegalAccessException | InstantiationException | InvocationTargetException e) {
44+
// TODO: Permissify error reporting
45+
e.printStackTrace();
46+
}
47+
}
48+
49+
public void end() {
50+
modules.entrySet().stream().map(Map.Entry::getValue).forEach(PermissifyModule::deinitialize);
51+
}
52+
53+
public Object pushEvent(String event, Object... arguments) {
54+
if (!eventHandlers.containsKey(event)) return null;
55+
try {
56+
return eventHandlers.get(event).getMethod().invoke(modules.get(eventHandlers.get(event).getModule()), arguments);
57+
} catch (IllegalAccessException | InvocationTargetException e) {
58+
e.printStackTrace();
59+
}
60+
return null;
61+
}
62+
63+
private void reportRegistration(String moduleName, String event) {
64+
if (moduleName.equals("permissify")) return;
65+
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)));
67+
}
68+
69+
@AllArgsConstructor
70+
private class Module {
71+
@Getter private String module;
72+
@Getter private Method method;
73+
}
74+
}

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

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

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,4 +99,14 @@ public String formatWhisper(UUID senderUuid, String senderName, UUID receiverUui
9999
.replace("{username}", senderName).replace("{message}", color + message)
100100
.replace("{to}", receiverName).replace("{receiverGroup}", receiver);
101101
}
102+
103+
@Override
104+
public void initialize() {
105+
106+
}
107+
108+
@Override
109+
public void deinitialize() {
110+
111+
}
102112
}

Spigot/src/main/java/me/innectic/permissify/spigot/commands/permissify/ProfileCommand.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ private String handleLoadProfile(CommandSender sender, String[] args) {
7575
logger.info("Loading profile...");
7676
long originalStart = System.currentTimeMillis();
7777
String baseDir = PermissifyMain.getInstance().getDataFolder().getAbsolutePath();
78-
Optional<PermissifyProfile> profile = PermissifyMain.getInstance().getPermissifyAPI().getSerializer().deserialize(args[0], baseDir);
78+
Optional<PermissifyProfile> profile = PermissifyMain.getInstance().getPermissifyAPI().getProfileSerializer().deserialize(args[0], baseDir);
7979
long end = System.currentTimeMillis();
8080
logger.info("Loaded profile in " + (end - originalStart) + " ms.");
8181
if (!profile.isPresent()) return PermissifyConstants.PROFILE_NOT_LOADED.replace("<PROFILE>", args[0]);
@@ -109,7 +109,7 @@ private boolean saveProfile(String name) {
109109
logger.info("Saving profile...");
110110
start = System.currentTimeMillis();
111111
String baseDir = PermissifyMain.getInstance().getDataFolder().getAbsolutePath();
112-
boolean saved = PermissifyMain.getInstance().getPermissifyAPI().getSerializer().serialize(profile, baseDir, name);
112+
boolean saved = PermissifyMain.getInstance().getPermissifyAPI().getProfileSerializer().serialize(profile, baseDir, name);
113113
end = System.currentTimeMillis();
114114
logger.info("Serialized profile in " + (end - start) + " ms.");
115115
return saved;

Spigot/src/main/java/me/innectic/permissify/spigot/events/PlayerChat.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
*/
2525
package me.innectic.permissify.spigot.events;
2626

27-
import me.innectic.permissify.api.module.registry.ModuleRegister;
27+
import me.innectic.permissify.api.module.registry.ModuleProvider;
2828
import me.innectic.permissify.spigot.PermissifyMain;
2929
import me.innectic.permissify.spigot.utils.ColorUtil;
3030
import org.bukkit.Bukkit;
@@ -49,12 +49,8 @@ public void onPlayerChat(AsyncPlayerChatEvent e) {
4949
Player player = e.getPlayer();
5050
if (player == null) return;
5151
e.setCancelled(true);
52-
try {
53-
String response = (String) ModuleRegister.getChatHandler().invoke(ModuleRegister.getModules().get("chat"), player.getUniqueId(), player.getName(), e.getMessage());
54-
Bukkit.broadcastMessage(ColorUtil.makeReadable(response));
55-
} catch (IllegalAccessException | InvocationTargetException e1) {
56-
// TODO: Permissify error handling
57-
e1.printStackTrace();
58-
}
52+
String response = (String) plugin.getPermissifyAPI().getModuleProvider().pushEvent("chat", player.getUniqueId(), player.getName(), e.getMessage());
53+
if (response == null) return;
54+
Bukkit.broadcastMessage(ColorUtil.makeReadable(response));
5955
}
6056
}

Spigot/src/main/java/me/innectic/permissify/spigot/events/PreProcess.java

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,8 @@
2525
package me.innectic.permissify.spigot.events;
2626

2727
import me.innectic.permissify.api.PermissifyConstants;
28-
import me.innectic.permissify.api.module.registry.ModuleRegister;
28+
import me.innectic.permissify.api.module.registry.ModuleProvider;
2929
import me.innectic.permissify.api.util.ArgumentUtil;
30-
import me.innectic.permissify.api.util.ChatModule;
3130
import me.innectic.permissify.spigot.PermissifyMain;
3231
import me.innectic.permissify.spigot.utils.ColorUtil;
3332
import org.bukkit.Bukkit;
@@ -64,16 +63,12 @@ public void onCommandPreProcess(PlayerCommandPreprocessEvent e) {
6463
return;
6564
}
6665
String message = String.join(" ", ArgumentUtil.getRemainingArgs(1, arguments));
67-
try {
68-
String response = (String) ModuleRegister.getWhisperHandler().invoke(ModuleRegister.getModules().get("whisper"),
69-
e.getPlayer().getUniqueId(), e.getPlayer().getName(), player.getUniqueId(), player.getName(), message);
70-
String readable = ColorUtil.makeReadable(response);
66+
String response = (String) PermissifyMain.getInstance().getPermissifyAPI().getModuleProvider().pushEvent("whisper",
67+
e.getPlayer().getUniqueId(), e.getPlayer().getName(), player.getUniqueId(), player.getName(), message);
68+
if (response == null) return;
69+
String readable = ColorUtil.makeReadable(response);
7170

72-
player.sendMessage(readable);
73-
e.getPlayer().sendMessage(readable);
74-
} catch (IllegalAccessException | InvocationTargetException e1) {
75-
// TODO: Permissify error handling
76-
e1.printStackTrace();
77-
}
71+
player.sendMessage(readable);
72+
e.getPlayer().sendMessage(readable);
7873
}
7974
}

0 commit comments

Comments
 (0)