From e2634a6395fa4d399345d58e9d39d0213ae9b919 Mon Sep 17 00:00:00 2001 From: EymenWSMC <136674304+eymenwsmc@users.noreply.github.com> Date: Wed, 17 Jun 2026 15:36:42 +0200 Subject: [PATCH] fix wasm shared worlds --- .../lwjgl/DesktopClientConfigAdapter.java | 204 ++++++++--- .../internal/IClientConfigAdapter.java | 109 ++++-- .../eaglercraft/sp/gui/GuiScreenLANInfo.java | 2 +- .../teavm/TeaVMClientConfigAdapter.java | 108 +++++- .../eaglercraft/internal/PlatformWebRTC.java | 2 +- .../WASMGCClientConfigAdapter.java | 344 ++++++++++++++++-- 6 files changed, 660 insertions(+), 109 deletions(-) diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/internal/lwjgl/DesktopClientConfigAdapter.java b/src/lwjgl/java/net/lax1dude/eaglercraft/internal/lwjgl/DesktopClientConfigAdapter.java index 04ff7d8..9663727 100644 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/internal/lwjgl/DesktopClientConfigAdapter.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/internal/lwjgl/DesktopClientConfigAdapter.java @@ -1,39 +1,56 @@ +/* + * Copyright (c) 2022 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + package net.lax1dude.eaglercraft.internal.lwjgl; import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; +import net.lax1dude.eaglercraft.Random; import org.json.JSONObject; import net.lax1dude.eaglercraft.EaglercraftVersion; -import net.lax1dude.eaglercraft.Random; import net.lax1dude.eaglercraft.internal.IClientConfigAdapter; import net.lax1dude.eaglercraft.internal.IClientConfigAdapterHooks; import net.lax1dude.eaglercraft.sp.relay.RelayEntry; -/** - * Copyright (c) 2022 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ public class DesktopClientConfigAdapter implements IClientConfigAdapter { public static final IClientConfigAdapter instance = new DesktopClientConfigAdapter(); + public final List defaultServers = new ArrayList<>(); + private final DesktopClientConfigAdapterHooks hooks = new DesktopClientConfigAdapterHooks(); + @Override + public String getDefaultLocale() { + return "en_US"; + } + + @Override + public List getDefaultServerList() { + return defaultServers; + } + + @Override + public String getServerToJoin() { + return null; + } + @Override public String getWorldsDB() { return "worlds"; @@ -44,16 +61,134 @@ public class DesktopClientConfigAdapter implements IClientConfigAdapter { return "resourcePacks"; } + @Override + public JSONObject getIntegratedServerOpts() { + return new JSONObject("{\"container\":null,\"worldsDB\":\"worlds\"}"); + } + + private final List relays = new ArrayList<>(); + + @Override + public List getRelays() { + if (relays.isEmpty()) { + int relayId = (new Random()).nextInt(3); + relays.add(new RelayEntry("wss://relay.deev.is/", "lax1dude relay #1", relayId == 0)); + relays.add(new RelayEntry("wss://relay.lax1dude.net/", "lax1dude relay #2", relayId == 1)); + relays.add(new RelayEntry("wss://relay.shhnowisnottheti.me/", "ayunami relay #1", relayId == 2)); + } + return relays; + } + @Override public boolean isCheckGLErrors() { return false; } + @Override + public boolean isCheckShaderGLErrors() { + return false; + } + + @Override + public boolean isDemo() { + return EaglercraftVersion.forceDemoMode; + } + + @Override + public boolean allowUpdateSvc() { + return false; + } + + @Override + public boolean allowUpdateDL() { + return false; + } + + @Override + public boolean isEnableDownloadOfflineButton() { + return false; + } + + @Override + public String getDownloadOfflineButtonLink() { + return null; + } + + @Override + public boolean useSpecialCursors() { + return false; + } + + @Override + public boolean isLogInvalidCerts() { + return false; + } + + @Override + public boolean isCheckRelaysForUpdates() { + return false; + } + + @Override + public boolean isEnableSignatureBadge() { + return false; + } + + @Override + public boolean isAllowVoiceClient() { + return false; + } + + @Override + public boolean isAllowFNAWSkins() { + return true; + } + @Override public String getLocalStorageNamespace() { return EaglercraftVersion.localStorageNamespace; } + @Override + public boolean isEnableMinceraft() { + return true; + } + + @Override + public boolean isEnableServerCookies() { + return true; + } + + @Override + public boolean isAllowServerRedirects() { + return true; + } + + @Override + public boolean isOpenDebugConsoleOnLaunch() { + return false; + } + + @Override + public boolean isForceWebViewSupport() { + return false; + } + + @Override + public boolean isEnableWebViewCSP() { + return true; + } + + @Override + public boolean isAllowBootMenu() { + return false; + } + + @Override + public boolean isForceProfanityFilter() { + return false; + } + @Override public boolean isEaglerNoDelay() { return false; @@ -74,34 +209,6 @@ public class DesktopClientConfigAdapter implements IClientConfigAdapter { return hooks; } - @Override - public boolean isEnableServerCookies() { - return false; - } - - private final List relays = new ArrayList<>(); - - @Override - public List getRelays() { - if (relays.isEmpty()) { - int relayId = (new Random()).nextInt(3); - relays.add(new RelayEntry("wss://relay.deev.is/", "lax1dude relay #1", relayId == 0)); - relays.add(new RelayEntry("wss://relay.lax1dude.net/", "lax1dude relay #2", relayId == 1)); - relays.add(new RelayEntry("wss://relay.shhnowisnottheti.me/", "ayunami relay #1", relayId == 2)); - } - return relays; - } - - @Override - public boolean isForceWebViewSupport() { - return false; - } - - @Override - public boolean isEnableWebViewCSP() { - return false; - } - private static class DesktopClientConfigAdapterHooks implements IClientConfigAdapterHooks { @Override @@ -121,15 +228,10 @@ public class DesktopClientConfigAdapter implements IClientConfigAdapter { @Override public void callScreenChangedHook(String screenName, int scaledWidth, int scaledHeight, int realWidth, - int realHeight, int scaleFactor) { + int realHeight, int scaleFactor) { } } - @Override - public JSONObject getIntegratedServerOpts() { - return null; - } - } \ No newline at end of file diff --git a/src/main/java/net/lax1dude/eaglercraft/internal/IClientConfigAdapter.java b/src/main/java/net/lax1dude/eaglercraft/internal/IClientConfigAdapter.java index 9c3baae..dadc84a 100644 --- a/src/main/java/net/lax1dude/eaglercraft/internal/IClientConfigAdapter.java +++ b/src/main/java/net/lax1dude/eaglercraft/internal/IClientConfigAdapter.java @@ -1,36 +1,100 @@ +/* + * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + package net.lax1dude.eaglercraft.internal; +import java.util.List; + import net.lax1dude.eaglercraft.sp.relay.RelayEntry; import org.json.JSONObject; -import java.util.List; - -/** - * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ public interface IClientConfigAdapter { + public static class DefaultServer { + + public final String name; + public final String addr; + public final boolean hideAddress; + + public DefaultServer(String name, String addr, boolean hideAddress) { + this.name = name; + this.addr = addr; + this.hideAddress = hideAddress; + } + + } + + String getDefaultLocale(); + + List getDefaultServerList(); + + String getServerToJoin(); + String getWorldsDB(); String getResourcePacksDB(); + JSONObject getIntegratedServerOpts(); + + List getRelays(); + boolean isCheckGLErrors(); + boolean isCheckShaderGLErrors(); + + boolean isDemo(); + + boolean allowUpdateSvc(); + + boolean allowUpdateDL(); + + boolean isEnableDownloadOfflineButton(); + + String getDownloadOfflineButtonLink(); + + boolean useSpecialCursors(); + + boolean isLogInvalidCerts(); + + boolean isCheckRelaysForUpdates(); + + boolean isEnableSignatureBadge(); + + boolean isAllowVoiceClient(); + + boolean isAllowFNAWSkins(); + String getLocalStorageNamespace(); + boolean isEnableMinceraft(); + + boolean isEnableServerCookies(); + + boolean isAllowServerRedirects(); + + boolean isOpenDebugConsoleOnLaunch(); + + boolean isForceWebViewSupport(); + + boolean isEnableWebViewCSP(); + + boolean isAllowBootMenu(); + + boolean isForceProfanityFilter(); + boolean isEaglerNoDelay(); boolean isRamdiskMode(); @@ -39,13 +103,4 @@ public interface IClientConfigAdapter { IClientConfigAdapterHooks getHooks(); - boolean isEnableServerCookies(); - - List getRelays(); - - boolean isForceWebViewSupport(); - - boolean isEnableWebViewCSP(); - - JSONObject getIntegratedServerOpts(); } \ No newline at end of file diff --git a/src/main/java/net/lax1dude/eaglercraft/sp/gui/GuiScreenLANInfo.java b/src/main/java/net/lax1dude/eaglercraft/sp/gui/GuiScreenLANInfo.java index df450d8..b80b1be 100644 --- a/src/main/java/net/lax1dude/eaglercraft/sp/gui/GuiScreenLANInfo.java +++ b/src/main/java/net/lax1dude/eaglercraft/sp/gui/GuiScreenLANInfo.java @@ -29,7 +29,7 @@ public class GuiScreenLANInfo extends GuiScreen { public void initGui() { buttonList.clear(); - buttonList.add(new GuiButton(0, this.width / 2 - 100, height / 6 + 168, I18n.format("gui.continue"))); + buttonList.add(new GuiButton(0, this.width / 2 - 100, height / 6 + 168, I18n.format("Continue"))); } public void drawScreen(int par1, int par2, float par3) { diff --git a/src/teavm/java/net/lax1dude/eaglercraft/internal/teavm/TeaVMClientConfigAdapter.java b/src/teavm/java/net/lax1dude/eaglercraft/internal/teavm/TeaVMClientConfigAdapter.java index 67d50f9..fe9972a 100644 --- a/src/teavm/java/net/lax1dude/eaglercraft/internal/teavm/TeaVMClientConfigAdapter.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/internal/teavm/TeaVMClientConfigAdapter.java @@ -17,7 +17,7 @@ import java.util.List; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. @@ -28,7 +28,7 @@ import java.util.List; * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ public class TeaVMClientConfigAdapter implements IClientConfigAdapter { @@ -89,6 +89,21 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter { } } + @Override + public String getDefaultLocale() { + return ""; + } + + @Override + public List getDefaultServerList() { + return List.of(); + } + + @Override + public String getServerToJoin() { + return ""; + } + @Override public String getWorldsDB() { return worldsDB; @@ -99,11 +114,76 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter { return checkGLErrors; } + @Override + public boolean isCheckShaderGLErrors() { + return false; + } + + @Override + public boolean isDemo() { + return false; + } + + @Override + public boolean allowUpdateSvc() { + return false; + } + + @Override + public boolean allowUpdateDL() { + return false; + } + + @Override + public boolean isEnableDownloadOfflineButton() { + return false; + } + + @Override + public String getDownloadOfflineButtonLink() { + return ""; + } + + @Override + public boolean useSpecialCursors() { + return false; + } + + @Override + public boolean isLogInvalidCerts() { + return false; + } + + @Override + public boolean isCheckRelaysForUpdates() { + return false; + } + + @Override + public boolean isEnableSignatureBadge() { + return false; + } + + @Override + public boolean isAllowVoiceClient() { + return false; + } + + @Override + public boolean isAllowFNAWSkins() { + return false; + } + @Override public String getLocalStorageNamespace() { return localStorageNamespace; } + @Override + public boolean isEnableMinceraft() { + return false; + } + public boolean isForceWebGL1TeaVM() { return forceWebGL1; } @@ -173,6 +253,16 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter { return false; } + @Override + public boolean isAllowServerRedirects() { + return false; + } + + @Override + public boolean isOpenDebugConsoleOnLaunch() { + return false; + } + @Override public boolean isForceWebViewSupport() { @@ -184,6 +274,16 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter { return false; } + @Override + public boolean isAllowBootMenu() { + return false; + } + + @Override + public boolean isForceProfanityFilter() { + return false; + } + @Override public JSONObject getIntegratedServerOpts() { return integratedServerOpts; @@ -204,11 +304,11 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter { public String getResourcePacksDB() { return this.resourcePacksDB; } - + public boolean isKeepAliveHackTeaVM() { return keepAliveHack; } - + public boolean isFinishOnSwapTeaVM() { return finishOnSwap; } diff --git a/src/wasm-gc-teavm/java/net/lax1dude/eaglercraft/internal/PlatformWebRTC.java b/src/wasm-gc-teavm/java/net/lax1dude/eaglercraft/internal/PlatformWebRTC.java index 9c18643..bb6fae4 100644 --- a/src/wasm-gc-teavm/java/net/lax1dude/eaglercraft/internal/PlatformWebRTC.java +++ b/src/wasm-gc-teavm/java/net/lax1dude/eaglercraft/internal/PlatformWebRTC.java @@ -38,7 +38,7 @@ public class PlatformWebRTC { private static final Logger logger = LogManager.getLogger("PlatformWebRTC"); - private static boolean isSupported = false; + private static boolean isSupported = true; public static void initialize() { isSupported = supported0(); diff --git a/src/wasm-gc-teavm/java/net/lax1dude/eaglercraft/internal/wasm_gc_teavm/WASMGCClientConfigAdapter.java b/src/wasm-gc-teavm/java/net/lax1dude/eaglercraft/internal/wasm_gc_teavm/WASMGCClientConfigAdapter.java index d303334..2acf145 100644 --- a/src/wasm-gc-teavm/java/net/lax1dude/eaglercraft/internal/wasm_gc_teavm/WASMGCClientConfigAdapter.java +++ b/src/wasm-gc-teavm/java/net/lax1dude/eaglercraft/internal/wasm_gc_teavm/WASMGCClientConfigAdapter.java @@ -1,6 +1,6 @@ /* * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. @@ -11,32 +11,64 @@ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. - * + * */ package net.lax1dude.eaglercraft.internal.wasm_gc_teavm; +import java.util.ArrayList; +import java.util.List; + +import net.lax1dude.eaglercraft.EagRuntime; +import net.lax1dude.eaglercraft.EaglercraftVersion; +import net.lax1dude.eaglercraft.ThreadLocalRandom; +import net.lax1dude.eaglercraft.sp.relay.RelayManager; +import org.json.JSONArray; +import org.json.JSONObject; +import org.teavm.jso.JSObject; +import org.teavm.jso.core.JSArrayReader; + import net.lax1dude.eaglercraft.internal.IClientConfigAdapter; import net.lax1dude.eaglercraft.internal.IClientConfigAdapterHooks; import net.lax1dude.eaglercraft.internal.wasm_gc_teavm.opts.JSEaglercraftXOptsHooks; +import net.lax1dude.eaglercraft.internal.wasm_gc_teavm.opts.JSEaglercraftXOptsRelay; import net.lax1dude.eaglercraft.internal.wasm_gc_teavm.opts.JSEaglercraftXOptsRoot; -import net.lax1dude.eaglercraft.EaglercraftVersion; +import net.lax1dude.eaglercraft.internal.wasm_gc_teavm.opts.JSEaglercraftXOptsServer; import net.lax1dude.eaglercraft.sp.relay.RelayEntry; -import org.json.JSONObject; -import org.teavm.jso.JSObject; - -import java.util.List; public class WASMGCClientConfigAdapter implements IClientConfigAdapter { public static final IClientConfigAdapter instance = new WASMGCClientConfigAdapter(); + private String defaultLocale = "en_US"; + private List defaultServers = new ArrayList<>(); + private List relays = new ArrayList<>(); + private String serverToJoin = null; private String worldsDB = "worlds"; private String resourcePacksDB = "resourcePacks"; private boolean checkGLErrors = false; + private boolean checkShaderGLErrors = false; + private boolean demoMode = EaglercraftVersion.forceDemoMode; + private boolean isEnableDownloadOfflineButton = true; + private String downloadOfflineButtonLink = null; + private boolean useSpecialCursors = false; + private boolean logInvalidCerts = false; + private boolean checkRelaysForUpdates = false; + private boolean enableSignatureBadge = false; + private boolean allowVoiceClient = true; + private boolean allowFNAWSkins = true; private String localStorageNamespace = "_eaglercraftX"; private final WASMGCClientConfigAdapterHooks hooks = new WASMGCClientConfigAdapterHooks(); + private boolean enableMinceraft = true; + private boolean enableServerCookies = true; + private boolean allowServerRedirects = true; + private boolean crashOnUncaughtExceptions = false; + private boolean openDebugConsoleOnLaunch = false; + private boolean fixDebugConsoleUnloadListener = false; + private boolean forceWebViewSupport = false; + private boolean enableWebViewCSP = false; private boolean autoFixLegacyStyleAttr = false; + private boolean forceProfanityFilter = false; private boolean forceWebGL1 = false; private boolean forceWebGL2 = false; private boolean allowExperimentalWebGL1 = false; @@ -55,12 +87,32 @@ public class WASMGCClientConfigAdapter implements IClientConfigAdapter { public void loadNative(JSObject jsObject) { JSEaglercraftXOptsRoot eaglercraftXOpts = (JSEaglercraftXOptsRoot)jsObject; - + + defaultLocale = eaglercraftXOpts.getLang("en_US"); + serverToJoin = eaglercraftXOpts.getJoinServer(null); worldsDB = eaglercraftXOpts.getWorldsDB("worlds"); resourcePacksDB = eaglercraftXOpts.getResourcePacksDB("resourcePacks"); checkGLErrors = eaglercraftXOpts.getCheckGLErrors(false); + checkShaderGLErrors = eaglercraftXOpts.getCheckShaderGLErrors(false); + demoMode = EaglercraftVersion.forceDemoMode || eaglercraftXOpts.getDemoMode(false); + isEnableDownloadOfflineButton = eaglercraftXOpts.getEnableDownloadOfflineButton(true); + downloadOfflineButtonLink = eaglercraftXOpts.getDownloadOfflineButtonLink(null); + useSpecialCursors = eaglercraftXOpts.getHtml5CursorSupport(false); + logInvalidCerts = EaglercraftVersion.enableUpdateService && !demoMode && eaglercraftXOpts.getLogInvalidCerts(false); + enableSignatureBadge = eaglercraftXOpts.getEnableSignatureBadge(false); + allowVoiceClient = eaglercraftXOpts.getAllowVoiceClient(true); + allowFNAWSkins = !demoMode && eaglercraftXOpts.getAllowFNAWSkins(true); localStorageNamespace = eaglercraftXOpts.getLocalStorageNamespace(EaglercraftVersion.localStorageNamespace); + enableMinceraft = eaglercraftXOpts.getEnableMinceraft(true); + enableServerCookies = !demoMode && eaglercraftXOpts.getEnableServerCookies(true); + allowServerRedirects = eaglercraftXOpts.getAllowServerRedirects(true); + crashOnUncaughtExceptions = eaglercraftXOpts.getCrashOnUncaughtExceptions(false); + openDebugConsoleOnLaunch = eaglercraftXOpts.getOpenDebugConsoleOnLaunch(false); + fixDebugConsoleUnloadListener = eaglercraftXOpts.getFixDebugConsoleUnloadListener(false); + forceWebViewSupport = eaglercraftXOpts.getForceWebViewSupport(false); + enableWebViewCSP = eaglercraftXOpts.getEnableWebViewCSP(true); autoFixLegacyStyleAttr = eaglercraftXOpts.getAutoFixLegacyStyleAttr(true); + forceProfanityFilter = eaglercraftXOpts.getForceProfanityFilter(false); forceWebGL1 = eaglercraftXOpts.getForceWebGL1(false); forceWebGL2 = eaglercraftXOpts.getForceWebGL2(false); allowExperimentalWebGL1 = eaglercraftXOpts.getAllowExperimentalWebGL1(true); @@ -80,6 +132,83 @@ public class WASMGCClientConfigAdapter implements IClientConfigAdapter { if(hooksObj != null) { hooks.loadHooks(hooksObj); } + + defaultServers.clear(); + JSArrayReader serversArray = eaglercraftXOpts.getServers(); + if(serversArray != null) { + for(int i = 0, l = serversArray.getLength(); i < l; ++i) { + JSEaglercraftXOptsServer serverEntry = serversArray.get(i); + boolean hideAddr = serverEntry.getHideAddr(false); + String serverAddr = serverEntry.getAddr(); + if(serverAddr != null) { + String serverName = serverEntry.getName("Default Server #" + i); + defaultServers.add(new DefaultServer(serverName, serverAddr, hideAddr)); + } + } + } + + relays.clear(); + JSArrayReader relaysArray = eaglercraftXOpts.getRelays(); + if(relaysArray != null) { + boolean gotAPrimary = false; + for(int i = 0, l = relaysArray.getLength(); i < l; ++i) { + JSEaglercraftXOptsRelay relay = relaysArray.get(i); + String addr = relay.getAddr(); + if(addr != null) { + boolean p = relay.getPrimary(); + if(p) { + if(gotAPrimary) { + p = false; + }else { + gotAPrimary = true; + } + } + relays.add(new RelayEntry(relay.getAddr(), relay.getComment("Default Relay #" + i), p)); + } + } + } + + boolean officialUpdates = !demoMode && EaglercraftVersion.updateBundlePackageName.equals("net.lax1dude.eaglercraft.client"); + if (relays.size() <= 0) { + int choice = ThreadLocalRandom.current().nextInt(3); + relays.add(new RelayEntry("wss://relay.deev.is/", "lax1dude relay #1", choice == 0)); + relays.add(new RelayEntry("wss://relay.lax1dude.net/", "lax1dude relay #2", choice == 1)); + relays.add(new RelayEntry("wss://relay.shhnowisnottheti.me/", "ayunami relay #1", choice == 2)); + checkRelaysForUpdates = !demoMode && eaglercraftXOpts.getCheckRelaysForUpdates(officialUpdates); + }else { + if(officialUpdates) { + for(int i = 0, l = relays.size(); i < l; ++i) { + String addr = relays.get(i).address; + if(!addr.contains("deev.is") && !addr.contains("lax1dude.net") && !addr.contains("shhnowisnottheti.me")) { + officialUpdates = false; + break; + } + } + } + checkRelaysForUpdates = !demoMode && eaglercraftXOpts.getCheckRelaysForUpdates(officialUpdates); + } + + RelayManager.relayManager.load(EagRuntime.getStorage("r")); + + if (RelayManager.relayManager.count() <= 0) { + RelayManager.relayManager.loadDefaults(); + RelayManager.relayManager.save(); + } + } + + @Override + public String getDefaultLocale() { + return defaultLocale; + } + + @Override + public List getDefaultServerList() { + return defaultServers; + } + + @Override + public String getServerToJoin() { + return serverToJoin; } @Override @@ -92,16 +221,120 @@ public class WASMGCClientConfigAdapter implements IClientConfigAdapter { return resourcePacksDB; } + @Override + public JSONObject getIntegratedServerOpts() { + return null; + } + + @Override + public List getRelays() { + return relays; + } + @Override public boolean isCheckGLErrors() { return checkGLErrors; } + @Override + public boolean isCheckShaderGLErrors() { + return checkShaderGLErrors; + } + + @Override + public boolean isDemo() { + return demoMode; + } + + @Override + public boolean allowUpdateSvc() { + return false; + } + + @Override + public boolean allowUpdateDL() { + return false; + } + + @Override + public boolean isEnableDownloadOfflineButton() { + return isEnableDownloadOfflineButton; + } + + @Override + public String getDownloadOfflineButtonLink() { + return downloadOfflineButtonLink; + } + + @Override + public boolean useSpecialCursors() { + return useSpecialCursors; + } + + @Override + public boolean isLogInvalidCerts() { + return logInvalidCerts; + } + + @Override + public boolean isCheckRelaysForUpdates() { + return false; + } + + @Override + public boolean isEnableSignatureBadge() { + return enableSignatureBadge; + } + + @Override + public boolean isAllowVoiceClient() { + return allowVoiceClient; + } + + @Override + public boolean isAllowFNAWSkins() { + return allowFNAWSkins; + } + @Override public String getLocalStorageNamespace() { return localStorageNamespace; } + @Override + public boolean isEnableMinceraft() { + return enableMinceraft; + } + + @Override + public boolean isEnableServerCookies() { + return enableServerCookies; + } + + @Override + public boolean isAllowServerRedirects() { + return allowServerRedirects; + } + + @Override + public boolean isOpenDebugConsoleOnLaunch() { + return openDebugConsoleOnLaunch; + } + + public boolean isFixDebugConsoleUnloadListenerTeaVM() { + return fixDebugConsoleUnloadListener; + } + + @Override + public boolean isForceWebViewSupport() { + return forceWebViewSupport; + } + + @Override + public boolean isEnableWebViewCSP() { + return enableWebViewCSP; + } + public boolean isAutoFixLegacyStyleAttrTeaVM() { return autoFixLegacyStyleAttr; } @@ -146,6 +379,16 @@ public class WASMGCClientConfigAdapter implements IClientConfigAdapter { return singleThreadMode; } + @Override + public boolean isAllowBootMenu() { + return false; + } + + @Override + public boolean isForceProfanityFilter() { + return forceProfanityFilter; + } + @Override public boolean isEaglerNoDelay() { return eaglerNoDelay; @@ -174,28 +417,79 @@ public class WASMGCClientConfigAdapter implements IClientConfigAdapter { return hooks; } - @Override - public boolean isEnableServerCookies() { - return false; + public JSONObject toJSONObject() { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("lang", defaultLocale); + jsonObject.put("joinServer", serverToJoin); + jsonObject.put("worldsDB", worldsDB); + jsonObject.put("resourcePacksDB", resourcePacksDB); + jsonObject.put("checkGLErrors", checkGLErrors); + jsonObject.put("checkShaderGLErrors", checkShaderGLErrors); + jsonObject.put("demoMode", demoMode); + jsonObject.put("enableDownloadOfflineButton", isEnableDownloadOfflineButton); + jsonObject.put("downloadOfflineButtonLink", downloadOfflineButtonLink); + jsonObject.put("html5CursorSupport", useSpecialCursors); + jsonObject.put("logInvalidCerts", logInvalidCerts); + jsonObject.put("checkRelaysForUpdates", checkRelaysForUpdates); + jsonObject.put("enableSignatureBadge", enableSignatureBadge); + jsonObject.put("allowVoiceClient", allowVoiceClient); + jsonObject.put("allowFNAWSkins", allowFNAWSkins); + jsonObject.put("localStorageNamespace", localStorageNamespace); + jsonObject.put("enableMinceraft", enableMinceraft); + jsonObject.put("enableServerCookies", enableServerCookies); + jsonObject.put("allowServerRedirects", allowServerRedirects); + jsonObject.put("crashOnUncaughtExceptions", crashOnUncaughtExceptions); + jsonObject.put("openDebugConsoleOnLaunch", openDebugConsoleOnLaunch); + jsonObject.put("fixDebugConsoleUnloadListener", fixDebugConsoleUnloadListener); + jsonObject.put("forceWebViewSupport", forceWebViewSupport); + jsonObject.put("enableWebViewCSP", enableWebViewCSP); + jsonObject.put("autoFixLegacyStyleAttr", autoFixLegacyStyleAttr); + jsonObject.put("forceProfanityFilter", forceProfanityFilter); + jsonObject.put("forceWebGL1", forceWebGL1); + jsonObject.put("forceWebGL2", forceWebGL2); + jsonObject.put("allowExperimentalWebGL1", allowExperimentalWebGL1); + jsonObject.put("useWebGLExt", useWebGLExt); + jsonObject.put("useJOrbisAudioDecoder", useJOrbisAudioDecoder); + jsonObject.put("useXHRFetch", useXHRFetch); + jsonObject.put("useVisualViewport", useVisualViewport); + jsonObject.put("deobfStackTraces", deobfStackTraces); + jsonObject.put("disableBlobURLs", disableBlobURLs); + jsonObject.put("eaglerNoDelay", eaglerNoDelay); + jsonObject.put("ramdiskMode", ramdiskMode); + jsonObject.put("singleThreadMode", singleThreadMode); + jsonObject.put("enforceVSync", enforceVSync); + jsonObject.put("keepAliveHack", keepAliveHack); + jsonObject.put("finishOnSwap", finishOnSwap); + JSONArray serversArr = new JSONArray(); + for(int i = 0, l = defaultServers.size(); i < l; ++i) { + DefaultServer srv = defaultServers.get(i); + JSONObject obj = new JSONObject(); + obj.put("addr", srv.addr); + obj.put("hideAddr", srv.hideAddress); + obj.put("name", srv.name); + serversArr.put(obj); + } + jsonObject.put("servers", serversArr); + JSONArray relaysArr = new JSONArray(); + for(int i = 0, l = relays.size(); i < l; ++i) { + RelayEntry rl = relays.get(i); + JSONObject obj = new JSONObject(); + obj.put("addr", rl.address); + obj.put("comment", rl.comment); + obj.put("primary", rl.primary); + relaysArr.put(obj); + } + jsonObject.put("relays", relaysArr); + return jsonObject; } @Override - public List getRelays() { - return List.of(); + public String toString() { + return toJSONObject().toString(); } - @Override - public boolean isForceWebViewSupport() { - return false; + public String toStringFormatted() { + return toJSONObject().toString(4); } - @Override - public boolean isEnableWebViewCSP() { - return false; - } - - @Override - public JSONObject getIntegratedServerOpts() { - return null; - } } \ No newline at end of file