diff --git a/gradle.properties b/gradle.properties index 0d790f63..a202f35a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,7 +7,7 @@ minecraft_version=1.19.2 yarn_mappings=1.19+build.1 # Mod Properties -mod_version = 1.2.4 +mod_version = 1.2.5 maven_group = io.github.javaarchive.forgecef archives_base_name = mcef diff --git a/src/main/java/net/montoyo/mcef/client/AppHandler.java b/src/main/java/net/montoyo/mcef/client/AppHandler.java index 88863132..d9bd0e0d 100644 --- a/src/main/java/net/montoyo/mcef/client/AppHandler.java +++ b/src/main/java/net/montoyo/mcef/client/AppHandler.java @@ -7,11 +7,16 @@ import org.cef.CefApp; import org.cef.browser.CefBrowser; import org.cef.browser.CefFrame; +import org.cef.callback.CefCallback; import org.cef.callback.CefSchemeHandlerFactory; import org.cef.callback.CefSchemeRegistrar; import org.cef.handler.CefAppHandlerAdapter; import org.cef.handler.CefResourceHandler; +import org.cef.misc.BoolRef; +import org.cef.misc.IntRef; +import org.cef.misc.StringRef; import org.cef.network.CefRequest; +import org.cef.network.CefResponse; import java.util.HashMap; import java.util.Map; @@ -90,8 +95,33 @@ public void onContextInitialized() { } private static class SchemeHandlerFactory implements CefSchemeHandlerFactory { - - private Class cls; + + private static final ClassLoader clr; + + static { + // this may look odd, but it makes CEF load a *lot* faster, and also makes it not spam errors to console + ClassLoader c = Thread.currentThread().getContextClassLoader(); + if (c == null) c = SchemeResourceHandler.class.getClassLoader(); + clr = c; + + try { + //noinspection unused + Class[] LOADER = new Class[] { + IntRef.class, + BoolRef.class, + CefRequest.class, + StringRef.class, + SchemeResponseData.class, + SchemeResponseHeaders.class, + Class.forName("org.cef.callback.CefCallback_N"), + Class.forName("org.cef.network.CefResponse_N") + }; + } catch (Throwable err) { + err.printStackTrace(); + } + } + + private final Class cls; private SchemeHandlerFactory(Class cls) { this.cls = cls; @@ -99,6 +129,8 @@ private SchemeHandlerFactory(Class cls) { @Override public CefResourceHandler create(CefBrowser browser, CefFrame frame, String schemeName, CefRequest request) { + Thread.currentThread().setContextClassLoader(clr); + try { return new SchemeResourceHandler(cls.newInstance()); } catch(Throwable t) { diff --git a/src/main/java/net/montoyo/mcef/client/SchemeResourceHandler.java b/src/main/java/net/montoyo/mcef/client/SchemeResourceHandler.java index e3f30ecd..a5a6a54f 100644 --- a/src/main/java/net/montoyo/mcef/client/SchemeResourceHandler.java +++ b/src/main/java/net/montoyo/mcef/client/SchemeResourceHandler.java @@ -11,6 +11,15 @@ public class SchemeResourceHandler extends CefResourceHandlerAdapter { + // forge causes some problems without this + private static final ClassLoader clr; + + static { + ClassLoader c = Thread.currentThread().getContextClassLoader(); + if (c == null) c = SchemeResourceHandler.class.getClassLoader(); + clr = c; + } + private final IScheme scheme; public SchemeResourceHandler(IScheme scm) { @@ -19,6 +28,8 @@ public SchemeResourceHandler(IScheme scm) { @Override public boolean processRequest(CefRequest request, CefCallback callback) { + Thread.currentThread().setContextClassLoader(clr); + SchemePreResponse resp = scheme.processRequest(request.getURL()); switch(resp) { diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 9834ece8..94e199e5 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -10,7 +10,7 @@ issueTrackerURL="" #optional modId="forgecef" #mandatory -version="1.2.4" #mandatory +version="1.2.5" #mandatory displayName="MCEF" #mandatory