This repository has been archived on 2023-11-26. You can view files and clone it, but cannot push or open issues or pull requests.
ScriptCraft/scriptcraft/src/main/java/com/thebrokenrail/scriptcraft/core/quickjs/QuickJSNative.java

56 lines
1.8 KiB
Java

package com.thebrokenrail.scriptcraft.core.quickjs;
import com.thebrokenrail.scriptcraft.core.util.OSUtil;
import com.thebrokenrail.scriptcraft.core.ScriptCraftCore;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
public class QuickJSNative {
public QuickJSNative() throws JSException {
init();
}
@SuppressWarnings("unused")
private long data;
public native void init() throws JSException;
public native void free();
public native Object bridge(String method, Object... args) throws JSException;
public native void run(String module);
static {
try {
File file = File.createTempFile("lib" + ScriptCraftCore.NAMESPACE, OSUtil.getLibExtension());
file.deleteOnExit();
System.out.println("Extracting ScriptCraft Native To: " + file.getAbsoluteFile().toPath());
InputStream so = (QuickJSNative.class.getResourceAsStream(File.separator + "natives" + File.separator + OSUtil.getOS() + File.separator + "lib" + ScriptCraftCore.NAMESPACE + OSUtil.getLibExtension()));
if (so == null) {
throw new RuntimeException("ScriptCraft does not support your OS: " + OSUtil.getOS());
} else {
Files.copy(so, file.getAbsoluteFile().toPath(), StandardCopyOption.REPLACE_EXISTING);
System.load(file.getAbsolutePath());
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static void print(String data, boolean err) {
String[] lines = data.split("\n");
for (String line : lines) {
if (err) {
System.err.println(line);
} else {
System.out.println(line);
}
}
}
}