Skip to content

Commit f8b5493

Browse files
committed
plugin loader works now, but events are broken
1 parent c20f63d commit f8b5493

File tree

4 files changed

+140
-94
lines changed

4 files changed

+140
-94
lines changed

build.gradle

-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ dependencies {
4444

4545
shadowJar {
4646
dependencies {
47-
include(dependency("io.papermc.paper:paper-api:1.20.1-R0.1-SNAPSHOT"))
4847
include(dependency("io.github.classgraph:classgraph:4.8.160"))
4948
}
5049
}

src/main/java/net/ioixd/blackbox/BlackBox.java

+46-21
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package net.ioixd.blackbox;
22

3+
import org.bukkit.Bukkit;
34
import org.bukkit.event.Event;
4-
import org.bukkit.event.EventPriority;
5-
import org.bukkit.event.HandlerList;
6-
import org.bukkit.event.Listener;
7-
import org.bukkit.plugin.RegisteredListener;
5+
import org.bukkit.plugin.InvalidDescriptionException;
6+
import org.bukkit.plugin.InvalidPluginException;
7+
import org.bukkit.plugin.PluginManager;
8+
import org.bukkit.plugin.UnknownDependencyException;
89
import org.bukkit.plugin.java.JavaPlugin;
910

1011
import io.github.classgraph.ClassGraph;
@@ -13,22 +14,18 @@
1314
import java.io.File;
1415
import java.io.IOException;
1516
import java.io.InputStream;
16-
import java.nio.file.FileSystems;
1717
import java.nio.file.Files;
18-
import java.util.ArrayList;
19-
import java.util.Arrays;
18+
import java.nio.file.Paths;
19+
import java.util.regex.Matcher;
20+
import java.util.regex.Pattern;
2021

2122
public final class BlackBox extends JavaPlugin {
23+
PluginManager pm = null;
24+
2225
@Override
23-
public void onEnable() {
24-
// Make sure everything has been loaded.
25-
ClassGraph clsgraph = new ClassGraph();
26-
clsgraph.acceptPackages("org.bukkit");
27-
clsgraph.initializeLoadedClasses();
28-
ClassInfoList info = clsgraph.scan().getSubclasses(Event.class.getName());
29-
info.forEach(cls -> {
30-
cls.loadClass();
31-
});
26+
public void onLoad() {
27+
pm = Bukkit.getServer().getPluginManager();
28+
pm.registerInterface(BlackBoxPluginLoader.class);
3229

3330
// extract the .dll or .so from the .jar into the plugins folder and run it.
3431
// i do not care if this is the wrong way. i have spent so fucking long trying
@@ -44,17 +41,16 @@ public void onEnable() {
4441
getLogger().severe("Unsupported operating system \"" + os + "\". Stopping now.");
4542
getServer().shutdown();
4643
}
44+
4745
File dir = new File(getDataFolder().getAbsolutePath());
4846
if (!dir.exists()) {
4947
dir.mkdir();
5048
}
51-
File file = new File(
52-
getDataFolder().getAbsolutePath() +
53-
FileSystems.getDefault().getSeparator() +
54-
filename);
49+
File file = new File(Paths.get(getDataFolder().getAbsolutePath(), filename).toString());
5550
if (file.exists()) {
5651
file.delete();
5752
}
53+
5854
InputStream link = (BlackBox.class.getResourceAsStream("/" + filename));
5955
try {
6056
Files.copy(link, file.getAbsoluteFile().toPath());
@@ -66,7 +62,36 @@ public void onEnable() {
6662

6763
System.load(file.getAbsolutePath());
6864

69-
this.getServer().getPluginManager().registerInterface(BlackBoxPluginLoader.class);
65+
for (File f : this.getFile().getParentFile().listFiles()) {
66+
for (Pattern filter : BlackBoxPluginLoader.fileFilters) {
67+
Matcher match = filter.matcher(f.getAbsolutePath());
68+
if (!match.find()) {
69+
continue;
70+
}
71+
72+
try {
73+
pm.loadPlugin(f);
74+
} catch (InvalidPluginException e) {
75+
e.printStackTrace();
76+
} catch (InvalidDescriptionException e) {
77+
e.printStackTrace();
78+
} catch (UnknownDependencyException e) {
79+
e.printStackTrace();
80+
}
81+
}
82+
}
83+
}
84+
85+
@Override
86+
public void onEnable() {
87+
// Make sure everything has been loaded.
88+
ClassGraph clsgraph = new ClassGraph();
89+
clsgraph.acceptPackages("org.bukkit");
90+
clsgraph.initializeLoadedClasses();
91+
ClassInfoList info = clsgraph.scan().getSubclasses(Event.class.getName());
92+
info.forEach(cls -> {
93+
cls.loadClass();
94+
});
7095
}
7196

7297
@Override

src/main/java/net/ioixd/blackbox/BlackBoxPlugin.java

+43-39
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,6 @@
3232

3333
import com.google.common.base.Charsets;
3434

35-
import io.papermc.paper.plugin.configuration.PluginMeta;
36-
3735
public class BlackBoxPlugin implements Plugin {
3836
String library;
3937
BlackBox parent;
@@ -49,45 +47,64 @@ public class BlackBoxPlugin implements Plugin {
4947
private FileConfiguration newConfig = null;
5048
private File configFile = null;
5149

52-
private PluginMeta pluginMeta = null;
50+
BlackBoxPluginListener listener;
51+
52+
public class BlackBoxPluginListener implements Listener {
53+
BlackBoxPlugin plugin;
54+
RegisteredListener registeredListener;
55+
String library;
56+
57+
public BlackBoxPluginListener(BlackBoxPlugin plugin, String library) {
58+
this.plugin = plugin;
59+
this.registeredListener = new RegisteredListener(this, this::onEvent, EventPriority.NORMAL, plugin, false);
60+
for (HandlerList handler : HandlerList.getHandlerLists()) {
61+
handler.register(this.registeredListener);
62+
}
63+
}
5364

54-
RegisteredListener registeredListener = null;
65+
public void onEvent(Listener listener, Event event) {
66+
// get the event name
67+
String name = event.getEventName();
68+
String hookName = "__on__" + name;
69+
this.plugin.getLogger().info(hookName);
70+
71+
try {
72+
boolean result = Native.libraryHasFunction(library, hookName);
73+
if (result == false) {
74+
HandlerList handler = event.getHandlers();
75+
handler.unregister(registeredListener);
76+
} else {
77+
Native.sendEvent(library, hookName, event);
78+
}
79+
} catch (Exception ex) {
80+
this.plugin.getLogger().severe(ex.toString());
81+
}
82+
}
83+
}
5584

56-
BlackBoxPlugin(String library, BlackBox parent, PluginLoader loader) throws IOException {
85+
BlackBoxPlugin(String library, BlackBox parent, PluginLoader loader) {
5786
this.library = library;
5887
this.isEnabled = true;
5988
this.naggable = true;
6089
this.parent = parent;
6190
File pluginsFolder = parent.getDataFolder().getParentFile();
6291
if (!Paths.get(pluginsFolder.getPath(), library).toFile().exists()) {
63-
Paths.get(pluginsFolder.getPath(), library).toFile().createNewFile();
92+
pluginsFolder.mkdir();
93+
Paths.get(pluginsFolder.getPath(), library).toFile().mkdir();
6494
}
6595
this.dataFolder = Paths.get(pluginsFolder.getPath(), library).toFile();
6696
this.loader = loader;
67-
68-
this.pluginMeta = new BlackBoxPluginMeta(library);
97+
this.file = new File(library);
98+
this.listener = new BlackBoxPluginListener(this, this.library);
6999
}
70100

71-
public void setRegisteredListener(RegisteredListener registeredListener) {
72-
this.registeredListener = registeredListener;
101+
public String getInnerLibraryName() {
102+
return library;
73103
}
74104

75-
public void onEvent(Listener listener, Event event) {
76-
// get the event name
77-
String name = event.getEventName();
78-
String hookName = "__on__" + name;
79-
80-
try {
81-
boolean result = Native.libraryHasFunction(library, hookName);
82-
if (result == false) {
83-
HandlerList handler = event.getHandlers();
84-
handler.unregister(registeredListener);
85-
} else {
86-
Native.sendEvent(library, hookName, event);
87-
}
88-
} catch (Exception ex) {
89-
this.getLogger().severe(ex.toString());
90-
}
105+
@Override
106+
public String getName() {
107+
return library;
91108
}
92109

93110
Object execNative(String functionName, Object[] objects) {
@@ -107,15 +124,6 @@ Object execNative(String functionName, Object[] objects) {
107124
return null;
108125
}
109126

110-
public String getInnerLibraryName() {
111-
return library;
112-
}
113-
114-
@Override
115-
public String getName() {
116-
return library;
117-
}
118-
119127
@Override
120128
public FileConfiguration getConfig() {
121129
Object func = execNative("getConfig", new Object[] {});
@@ -289,10 +297,6 @@ public void saveResource(String resourcePath, boolean replace) {
289297
}
290298
}
291299

292-
public PluginMeta getPluginMeta() {
293-
return this.pluginMeta;
294-
}
295-
296300
@Override
297301
public String toString() {
298302
Object func = execNative("toString", new Object[] {});

0 commit comments

Comments
 (0)