mirror of
https://github.com/GeyserMC/Geyser.git
synced 2024-08-14 23:57:35 +00:00
start plugin stuff
This commit is contained in:
parent
c7b36bd834
commit
6f3c00c6ab
3 changed files with 98 additions and 4 deletions
|
@ -14,11 +14,10 @@
|
||||||
|
|
||||||
package org.geysermc.connector.console;
|
package org.geysermc.connector.console;
|
||||||
|
|
||||||
import com.google.common.base.Charsets;
|
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
@ -37,7 +36,7 @@ public class LoggingOutputStream extends ByteArrayOutputStream {
|
||||||
super.write(b);
|
super.write(b);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
String contents = toString(Charsets.UTF_8.name());
|
String contents = toString(StandardCharsets.UTF_8.name());
|
||||||
if (!contents.isEmpty() && !contents.equals(System.getProperty("line.separator")))
|
if (!contents.isEmpty() && !contents.equals(System.getProperty("line.separator")))
|
||||||
logger.logp(level, "", "", contents);
|
logger.logp(level, "", "", contents);
|
||||||
} catch (UnsupportedEncodingException ex) {
|
} catch (UnsupportedEncodingException ex) {
|
||||||
|
@ -47,7 +46,7 @@ public class LoggingOutputStream extends ByteArrayOutputStream {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized void flush() throws IOException {
|
public synchronized void flush() throws IOException {
|
||||||
String contents = toString(Charsets.UTF_8.name());
|
String contents = toString(StandardCharsets.UTF_8.name());
|
||||||
super.reset();
|
super.reset();
|
||||||
|
|
||||||
if (!contents.isEmpty() && !contents.equals(System.getProperty("line.separator")))
|
if (!contents.isEmpty() && !contents.equals(System.getProperty("line.separator")))
|
||||||
|
|
|
@ -0,0 +1,81 @@
|
||||||
|
package org.geysermc.connector.plugin;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
|
||||||
|
import org.geysermc.api.plugin.Plugin;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.zip.ZipEntry;
|
||||||
|
import java.util.zip.ZipFile;
|
||||||
|
|
||||||
|
public class Loader extends ClassLoader {
|
||||||
|
static {
|
||||||
|
System.out.println("a");
|
||||||
|
Loader l = new Loader();
|
||||||
|
System.out.println("b");
|
||||||
|
File dir = new File("plugins");
|
||||||
|
System.out.println(dir.getAbsoluteFile());
|
||||||
|
|
||||||
|
if(!dir.exists()) {
|
||||||
|
dir.mkdir();
|
||||||
|
}
|
||||||
|
|
||||||
|
for(File f : dir.listFiles()) {
|
||||||
|
if(f.getName().endsWith(".jar")) {
|
||||||
|
try {
|
||||||
|
ZipFile file = new ZipFile(f);
|
||||||
|
|
||||||
|
ZipEntry e = file.getEntry("plugin.yml");
|
||||||
|
|
||||||
|
if(e == null || e.isDirectory()) {
|
||||||
|
System.err.println("Plugin " + f.getName() + " has no valid plugin.yml!");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
file.stream().forEach((x) -> {
|
||||||
|
if(x.getName().endsWith(".class")) {
|
||||||
|
try {
|
||||||
|
InputStream is = file.getInputStream(x);
|
||||||
|
byte[] b = new byte[is.available()];
|
||||||
|
is.read(b);
|
||||||
|
l.defineClass(x.getName().replace(".class", "").replaceAll("/", "."), b, 0, b.length);
|
||||||
|
is.close();
|
||||||
|
} catch (Exception e1) {
|
||||||
|
e1.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
|
||||||
|
|
||||||
|
InputStream is = file.getInputStream(e);
|
||||||
|
|
||||||
|
PluginYML yml;
|
||||||
|
|
||||||
|
yml = mapper.readValue(is, PluginYML.class);
|
||||||
|
|
||||||
|
is.close();
|
||||||
|
|
||||||
|
((Plugin) Class.forName(yml.main, true, l).newInstance()).onEnable();
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("Error loading plugin " + f.getName());
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
LOADER = l;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final Loader LOADER;
|
||||||
|
|
||||||
|
public static void start() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private Loader() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
package org.geysermc.connector.plugin;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
|
public class PluginYML {
|
||||||
|
@JsonProperty("name")
|
||||||
|
String name;
|
||||||
|
|
||||||
|
@JsonProperty("version")
|
||||||
|
String version;
|
||||||
|
|
||||||
|
@JsonProperty("main")
|
||||||
|
String main;
|
||||||
|
}
|
Loading…
Reference in a new issue