117 lines
2.9 KiB
Java
117 lines
2.9 KiB
Java
package de.mrbesen.cppplugins;
|
|
|
|
import org.bukkit.Server;
|
|
import org.bukkit.event.*;
|
|
import org.bukkit.plugin.*;
|
|
|
|
import java.io.File;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.Set;
|
|
import java.util.TreeSet;
|
|
import java.util.regex.Pattern;
|
|
|
|
public class CppLoader implements PluginLoader {
|
|
|
|
protected Server serv;
|
|
|
|
public CppLoader(Server serv) {
|
|
this.serv = serv;
|
|
}
|
|
|
|
private static final String[] search = {
|
|
//"org.bukkit.event",
|
|
"", //needed to support event from other plugins
|
|
"org.bukkit.event.block.",
|
|
"org.bukkit.event.enchantment.",
|
|
"org.bukkit.event.entity.",
|
|
"org.bukkit.event.hanging.",
|
|
"org.bukkit.event.invnetory.",
|
|
"org.bukkit.event.painting.",
|
|
"org.bukkit.event.player.",
|
|
"org.bukkit.event.server.",
|
|
"org.bukkit.event.vehicle.",
|
|
"org.bukkit.event.weather.",
|
|
"org.bukkit.event.world."
|
|
};
|
|
|
|
@Override
|
|
public Plugin loadPlugin(File file) throws InvalidPluginException, UnknownDependencyException {
|
|
System.out.println("try to load: " + file.getName());
|
|
return new CppPlugin(file, this);
|
|
}
|
|
|
|
@Override
|
|
public PluginDescriptionFile getPluginDescription(File file) throws InvalidDescriptionException {
|
|
return new PluginDescriptionFile(file.getName(), "1.0", CppPlugin.class.getName());
|
|
}
|
|
|
|
@Override
|
|
public Pattern[] getPluginFileFilters() {
|
|
//only allow .so files
|
|
return new Pattern[]{ Pattern.compile(".*\\.so") };
|
|
}
|
|
|
|
@Override
|
|
public Map<Class<? extends Event>, Set<RegisteredListener>> createRegisteredListeners(Listener listenerabcdeg, Plugin plugin) {
|
|
CppPlugin.CppListener[] listener = ((CppPlugin) plugin).getListener();
|
|
Map<Class<? extends Event>, Set<RegisteredListener>> out = new HashMap<>();
|
|
Package bukkitevents = Package.getPackage("org.bukkit.event");
|
|
|
|
for(CppPlugin.CppListener lis : listener) {
|
|
//search for Class
|
|
Class clas = findClass(lis.eventfilter);
|
|
|
|
AdapterExecutor adapt = new AdapterExecutor();
|
|
|
|
Set<RegisteredListener> lisset = out.getOrDefault(clas, new TreeSet<>());
|
|
lisset.add(new RegisteredListener(lis, adapt, EventPriority.NORMAL, plugin, true));
|
|
if(lisset.size() == 1) //nur wenn neu
|
|
out.put(clas, lisset);
|
|
}
|
|
|
|
return out;
|
|
}
|
|
|
|
/**
|
|
* simple name of event -> Class of that event
|
|
* @param name
|
|
* @return
|
|
*/
|
|
private Class<? extends Event> findClass(String name) {
|
|
for(String prefix : search) {
|
|
try {
|
|
return (Class<? extends Event>) Class.forName(prefix + name);
|
|
} catch (ClassNotFoundException e) {}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
|
|
@Override
|
|
public void enablePlugin(Plugin plugin) {
|
|
plugin.onEnable();
|
|
}
|
|
|
|
@Override
|
|
public void disablePlugin(Plugin plugin) {
|
|
plugin.onDisable();
|
|
}
|
|
|
|
private class AdapterExecutor implements EventExecutor {
|
|
CppPlugin plugin;
|
|
int functionid;
|
|
|
|
@Override
|
|
public void execute(Listener listener, Event event) throws EventException {
|
|
//cppify event
|
|
CppEvent cppe = CppEvent.cppify(event);
|
|
|
|
cppe = plugin.fireEvent(cppe, functionid);
|
|
|
|
//uncppify
|
|
CppEvent.uncppify(cppe, event);
|
|
}
|
|
}
|
|
}
|