CppPlugins/src/main/java/de/mrbesen/cppplugins/CppPlugin.java

173 lines
3.5 KiB
Java

package de.mrbesen.cppplugins;
import com.avaje.ebean.EbeanServer;
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.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, int 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;
}
public class CppListener implements Listener {
String eventfilter;
int functionid;
}
}