184 lines
3.8 KiB
Java
184 lines
3.8 KiB
Java
package de.mrbesen.cppplugins;
|
|
|
|
import com.avaje.ebean.EbeanServer;
|
|
import lombok.AllArgsConstructor;
|
|
import lombok.Getter;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.Server;
|
|
import org.bukkit.command.Command;
|
|
import org.bukkit.command.CommandSender;
|
|
import org.bukkit.configuration.file.FileConfiguration;
|
|
import org.bukkit.event.Listener;
|
|
import org.bukkit.event.player.PlayerJoinEvent;
|
|
import org.bukkit.generator.ChunkGenerator;
|
|
import org.bukkit.plugin.Plugin;
|
|
import org.bukkit.plugin.PluginDescriptionFile;
|
|
import org.bukkit.plugin.PluginLoader;
|
|
|
|
import java.io.File;
|
|
import java.io.InputStream;
|
|
import java.util.List;
|
|
import java.util.logging.Logger;
|
|
|
|
public class CppPlugin implements Plugin {
|
|
private boolean enabled = false;
|
|
@Getter
|
|
private String name;
|
|
private static boolean initdone = false;
|
|
private CppLoader loader;
|
|
private long data; //for JNI, do not remove
|
|
|
|
//library operations
|
|
protected native boolean init_(); //false: failed, true: success
|
|
protected native boolean loadPlugin(String path); //false = failed, true: success
|
|
|
|
//plugin operations
|
|
public native void onLoad();
|
|
public native void onEnable_();
|
|
public native void onDisable_();
|
|
protected native CppEvent fireEvent(CppEvent e, long functionid);
|
|
protected native boolean onCmd(CommandSender sender, Command cmd, String label, String[] args);
|
|
|
|
native CppListener[] getListener();
|
|
|
|
public CppPlugin(File f, CppLoader l) {
|
|
loader = l;
|
|
this.name = f.getName();
|
|
if(!initdone) {
|
|
initdone = init();
|
|
if(!initdone) {
|
|
throw new RuntimeException("Init returned with error");
|
|
}
|
|
}
|
|
if(!loadPlugin(f.getAbsolutePath())) {
|
|
throw new RuntimeException("loadPlugin returened with error");
|
|
}
|
|
}
|
|
|
|
protected boolean init() {
|
|
File folder = CppPlugins.getInstance().getDataFolder();
|
|
folder.mkdirs();
|
|
String path = folder.getAbsolutePath() + "/libplugin.so";
|
|
System.out.println("load library from: " + path);
|
|
try {
|
|
System.load(path);
|
|
System.out.println("run init_()");
|
|
return init_();
|
|
} catch(UnsatisfiedLinkError e) {
|
|
e.printStackTrace();
|
|
}
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public void onEnable() {
|
|
onEnable_();
|
|
enabled = true;
|
|
}
|
|
|
|
@Override
|
|
public void onDisable() {
|
|
onDisable_();
|
|
enabled = false;
|
|
}
|
|
|
|
public PluginDescriptionFile getDescription() {
|
|
return new PluginDescriptionFile(name, "1.0", getClass().getName());
|
|
}
|
|
|
|
@Override
|
|
public File getDataFolder() {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public FileConfiguration getConfig() {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public InputStream getResource(String s) {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public void saveConfig() {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void saveDefaultConfig() {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void saveResource(String s, boolean b) {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void reloadConfig() {
|
|
|
|
}
|
|
|
|
@Override
|
|
public PluginLoader getPluginLoader() {
|
|
return loader;
|
|
}
|
|
|
|
@Override
|
|
public Server getServer() {
|
|
return Bukkit.getServer();
|
|
}
|
|
|
|
@Override
|
|
public boolean isEnabled() {
|
|
return enabled;
|
|
}
|
|
|
|
@Override
|
|
public boolean isNaggable() {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public void setNaggable(boolean b) {
|
|
|
|
}
|
|
|
|
@Override
|
|
public ChunkGenerator getDefaultWorldGenerator(String s, String s1) {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public Logger getLogger() {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public boolean onCommand(CommandSender commandSender, Command command, String s, String[] strings) {
|
|
return onCmd(commandSender, command, s, strings);
|
|
}
|
|
|
|
@Override
|
|
public List<String> onTabComplete(CommandSender commandSender, Command command, String s, String[] strings) {
|
|
return null;
|
|
}
|
|
|
|
static class CppListener implements Listener {
|
|
String eventfilter;
|
|
long functionid;
|
|
|
|
public CppListener(String eventfilter, long functionid) {
|
|
this.eventfilter = eventfilter;
|
|
this.functionid = functionid;
|
|
}
|
|
|
|
public CppListener() {
|
|
this.eventfilter = "NOP";
|
|
functionid = 0;
|
|
}
|
|
}
|
|
}
|