Skip to content

Commit ac7e306

Browse files
authored
Merge pull request #37 from Innectic/feature/modules
Create module system, and convert
2 parents 7ba4b0e + 6cd4a1f commit ac7e306

File tree

9 files changed

+151
-10
lines changed

9 files changed

+151
-10
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +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.ModuleRegister;
3132
import me.innectic.permissify.api.profile.ProfileSerializer;
33+
import me.innectic.permissify.api.util.ChatModule;
3234
import me.innectic.permissify.api.util.DisplayUtil;
3335

3436
import java.lang.reflect.InvocationTargetException;
@@ -68,6 +70,8 @@ public void initialize(HandlerType type, Optional<ConnectionInformation> connect
6870
if (connected) System.out.println("Connected to the database.");
6971
else System.out.println("Unable to connect to the database.");
7072
});
73+
System.out.println("Registering Permissify modules...");
74+
ModuleRegister.registerModule(ChatModule.class, "internal");
7175
}
7276

7377
public static Optional<PermissifyAPI> get() {

API/src/main/java/me/innectic/permissify/api/database/handlers/SQLHandler.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@ protected void loadLadders() {
262262

263263
List<LadderLevel> levels = new ArrayList<>();
264264
PreparedStatement ladderLevelsStatement = connection.get().prepareStatement("SELECT * FROM ladderLevels where ladder=?");
265+
ladderLevelsStatement.setString(1, ladderName);
265266
ResultSet ladderLevelsResults = ladderLevelsStatement.executeQuery();
266267

267268
while (ladderLevelsResults.next()) {
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package me.innectic.permissify.api.module;
2+
3+
import lombok.Getter;
4+
5+
/**
6+
* @author Innectic
7+
* @since 9/2/2017
8+
*/
9+
public abstract class PermissifyModule {
10+
11+
@Getter private final String moduleName;
12+
13+
/**
14+
* Create a new Permissify Module.
15+
*
16+
* <p>
17+
* Modules can be overridden, meaning that internal permissify modules can be overridden by other plugins.
18+
* The only requirement is that `moduleName` matches up.
19+
*
20+
* @param moduleName the name of the module to register
21+
*/
22+
public PermissifyModule(String moduleName) {
23+
this.moduleName = moduleName;
24+
}
25+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package me.innectic.permissify.api.module;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
6+
/**
7+
* @author Innectic
8+
* @since 9/2/2017
9+
*/
10+
@AllArgsConstructor
11+
public enum PermissifyModules {
12+
CHAT("chat");
13+
14+
@Getter private String registryName;
15+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package me.innectic.permissify.api.module.annotation;
2+
3+
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Retention;
5+
import java.lang.annotation.RetentionPolicy;
6+
import java.lang.annotation.Target;
7+
8+
/**
9+
* @author Innectic
10+
* @since 9/2/2017
11+
*/
12+
@Retention(RetentionPolicy.RUNTIME)
13+
@Target(ElementType.METHOD)
14+
public @interface Handles {
15+
String value();
16+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package me.innectic.permissify.api.module.registry;
2+
3+
import lombok.Getter;
4+
import me.innectic.permissify.api.module.PermissifyModule;
5+
import me.innectic.permissify.api.module.annotation.Handles;
6+
7+
import java.lang.reflect.Constructor;
8+
import java.lang.reflect.InvocationTargetException;
9+
import java.lang.reflect.Method;
10+
import java.util.Arrays;
11+
import java.util.HashMap;
12+
import java.util.Map;
13+
14+
/**
15+
* @author Innectic
16+
* @since 9/2/2017
17+
*/
18+
public class ModuleRegister {
19+
@Getter private static Method chatHandler;
20+
@Getter private static Method whisperHandler;
21+
22+
@Getter private static Map<String, PermissifyModule> modules = new HashMap<>();
23+
24+
public static void setChatHandler(Method chatHandler, String source) {
25+
if (!source.equals("internal"))
26+
System.out.printf("Permissify chat handler has been overriden by %s! Disable before reporting any bugs!\n", source);
27+
ModuleRegister.chatHandler = chatHandler;
28+
}
29+
30+
public static void setWhisperHandler(Method whisperHandler, String source) {
31+
if (!source.equals("internal"))
32+
System.out.printf("Permissify whisper handler has been overriden by %s! Disable before reporting any bugs!\n", source);
33+
ModuleRegister.whisperHandler = whisperHandler;
34+
}
35+
36+
public static void registerModule(Class<? extends PermissifyModule> module, String source) {
37+
try {
38+
Constructor<? extends PermissifyModule> moduleConstructor = module.getConstructor();
39+
PermissifyModule constructedModule = moduleConstructor.newInstance();
40+
41+
modules.put(constructedModule.getModuleName(), constructedModule);
42+
43+
Arrays.stream(constructedModule.getClass().getMethods()).filter(method -> method.isAnnotationPresent(Handles.class)).forEach(method -> {
44+
Handles handleAnnotation = method.getAnnotation(Handles.class);
45+
if (handleAnnotation.value().equals("chat")) ModuleRegister.setChatHandler(method, source);
46+
else if (handleAnnotation.value().equals("whisper")) ModuleRegister.setWhisperHandler(method, source);
47+
});
48+
System.out.println(String.format("Module %s has been registered!", constructedModule.getModuleName()));
49+
} catch (NoSuchMethodException | IllegalAccessException | InstantiationException | InvocationTargetException e) {
50+
// TODO: Permissify error reporting
51+
e.printStackTrace();
52+
}
53+
}
54+
}

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

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
import me.innectic.permissify.api.PermissifyAPI;
2828
import me.innectic.permissify.api.database.DatabaseHandler;
2929
import me.innectic.permissify.api.group.group.PermissionGroup;
30+
import me.innectic.permissify.api.module.PermissifyModule;
31+
import me.innectic.permissify.api.module.PermissifyModules;
32+
import me.innectic.permissify.api.module.annotation.Handles;
3033

3134
import java.util.Optional;
3235
import java.util.UUID;
@@ -35,7 +38,11 @@
3538
* @author Innectic
3639
* @since 7/1/2017
3740
*/
38-
public class ChatFormatter {
41+
public class ChatModule extends PermissifyModule {
42+
43+
public ChatModule() {
44+
super(PermissifyModules.CHAT.getRegistryName());
45+
}
3946

4047
/**
4148
* Format a chat message into the requested format.
@@ -45,7 +52,8 @@ public class ChatFormatter {
4552
* @param message the message that was sent
4653
* @return the formatted string
4754
*/
48-
public static String formatChat(UUID uuid, String username, String message) {
55+
@Handles("chat")
56+
public String formatChat(UUID uuid, String username, String message) {
4957
if (!PermissifyAPI.get().isPresent()) return username + ": " + message;
5058
if (!PermissifyAPI.get().get().getDatabaseHandler().isPresent()) return username + ": " + message;
5159
DatabaseHandler handler = PermissifyAPI.get().get().getDatabaseHandler().get();
@@ -73,7 +81,8 @@ public static String formatChat(UUID uuid, String username, String message) {
7381
* @param message the message sent
7482
* @return the final formatted message
7583
*/
76-
public static String formatWhisper(UUID senderUuid, String senderName, UUID receiverUuid, String receiverName, String message) {
84+
@Handles("whisper")
85+
public String formatWhisper(UUID senderUuid, String senderName, UUID receiverUuid, String receiverName, String message) {
7786
if (!PermissifyAPI.get().isPresent()) return senderName + " > " + receiverName + ": " + message;
7887
if (!PermissifyAPI.get().get().getDatabaseHandler().isPresent()) return senderName + " > " + receiverName + ": " + message;
7988
DatabaseHandler handler = PermissifyAPI.get().get().getDatabaseHandler().get();

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

Lines changed: 10 additions & 3 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.util.ChatFormatter;
27+
import me.innectic.permissify.api.module.registry.ModuleRegister;
2828
import me.innectic.permissify.spigot.PermissifyMain;
2929
import me.innectic.permissify.spigot.utils.ColorUtil;
3030
import org.bukkit.Bukkit;
@@ -33,6 +33,8 @@
3333
import org.bukkit.event.Listener;
3434
import org.bukkit.event.player.AsyncPlayerChatEvent;
3535

36+
import java.lang.reflect.InvocationTargetException;
37+
3638
/**
3739
* @author Innectic
3840
* @since 6/26/2017
@@ -47,7 +49,12 @@ public void onPlayerChat(AsyncPlayerChatEvent e) {
4749
Player player = e.getPlayer();
4850
if (player == null) return;
4951
e.setCancelled(true);
50-
String formatted = ChatFormatter.formatChat(player.getUniqueId(), player.getName(), e.getMessage());
51-
Bukkit.broadcastMessage(ColorUtil.makeReadable(formatted));
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+
}
5259
}
5360
}

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

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

2727
import me.innectic.permissify.api.PermissifyConstants;
28+
import me.innectic.permissify.api.module.registry.ModuleRegister;
2829
import me.innectic.permissify.api.util.ArgumentUtil;
29-
import me.innectic.permissify.api.util.ChatFormatter;
30+
import me.innectic.permissify.api.util.ChatModule;
3031
import me.innectic.permissify.spigot.PermissifyMain;
3132
import me.innectic.permissify.spigot.utils.ColorUtil;
3233
import org.bukkit.Bukkit;
@@ -35,6 +36,7 @@
3536
import org.bukkit.event.Listener;
3637
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
3738

39+
import java.lang.reflect.InvocationTargetException;
3840
import java.util.Arrays;
3941
import java.util.HashSet;
4042
import java.util.Set;
@@ -62,8 +64,16 @@ public void onCommandPreProcess(PlayerCommandPreprocessEvent e) {
6264
return;
6365
}
6466
String message = String.join(" ", ArgumentUtil.getRemainingArgs(1, arguments));
65-
String formatted = ChatFormatter.formatWhisper(e.getPlayer().getUniqueId(), e.getPlayer().getName(), player.getUniqueId(), player.getName(), message);
66-
player.sendMessage(ColorUtil.makeReadable(formatted));
67-
e.getPlayer().sendMessage(ColorUtil.makeReadable(formatted));
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);
71+
72+
player.sendMessage(readable);
73+
e.getPlayer().sendMessage(readable);
74+
} catch (IllegalAccessException | InvocationTargetException e1) {
75+
// TODO: Permissify error handling
76+
e1.printStackTrace();
77+
}
6878
}
6979
}

0 commit comments

Comments
 (0)