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

194 lines
4.0 KiB
Java

package de.mrbesen.cppplugins;
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 int id; //for JNI, do not remove
//library operations
protected static 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 static native boolean onCmd(CommandSender sender, Command cmd, String label, String[] args, long functionid, int plugind);
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() {
try {
System.loadLibrary("plugin"); //loads libplugin.so from System.getProperty("java.library.path")
return init_();
} catch(UnsatisfiedLinkError e) {
e.printStackTrace();
}
return false;
}
@Override
public void onEnable() {
getLogger().info("Enabling " + getName());
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 Logger.getLogger(getName().substring(0, 3));
}
@Override
public boolean onCommand(CommandSender commandSender, Command command, String s, String[] strings) {
return false;
}
@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;
}
}
static class CppCommand extends Command {
private long functionid;
private int pluginid;
protected CppCommand(String name, long functionid, int pluginid) {
super(name);
this.functionid = functionid;
this.pluginid = pluginid;
}
@Override
public boolean execute(CommandSender sender, String label, String[] args) {
return onCmd(sender, this, label, args, functionid, pluginid);
}
}
}