diff --git a/desktopRuntime/resources/assets/eagler/capes/21.15th_anniversary.png b/desktopRuntime/resources/assets/eagler/capes/21.15th_anniversary.png new file mode 100755 index 0000000..41331f8 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/capes/21.15th_anniversary.png differ diff --git a/desktopRuntime/resources/assets/eagler/capes/22.vanilla.png b/desktopRuntime/resources/assets/eagler/capes/22.vanilla.png new file mode 100755 index 0000000..d7f97ab Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/capes/22.vanilla.png differ diff --git a/desktopRuntime/resources/assets/eagler/capes/23.tiktok.png b/desktopRuntime/resources/assets/eagler/capes/23.tiktok.png new file mode 100755 index 0000000..cf29a93 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/capes/23.tiktok.png differ diff --git a/desktopRuntime/resources/assets/eagler/capes/24.purple_heart.png b/desktopRuntime/resources/assets/eagler/capes/24.purple_heart.png new file mode 100755 index 0000000..3d6d577 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/capes/24.purple_heart.png differ diff --git a/desktopRuntime/resources/assets/eagler/capes/25.cherry_blossom.png b/desktopRuntime/resources/assets/eagler/capes/25.cherry_blossom.png new file mode 100755 index 0000000..a02860c Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/capes/25.cherry_blossom.png differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_core.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_core.vsh index e0610aa..ae6f751 100755 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_core.vsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_core.vsh @@ -46,7 +46,7 @@ uniform float u_blockConstant1f; #define DO_COMPILE_STATE_WAVING_BLOCKS #define FAKE_SIN(valueIn, valueOut)\ valueOut = abs(1.0 - fract(valueIn * 0.159155) * 2.0);\ - valueOut = valueOut * valueOut * (3.0 - 2.0 * valueOut) * 2.0 - 1.0; + valueOut = valueOut * valueOut * (6.0 - 4.0 * valueOut) - 1.0; #define LIB_INCLUDE_WAVING_BLOCKS_FUNCTION #endif diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_shadow.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_shadow.vsh index 2dffab3..67cbe57 100755 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_shadow.vsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_shadow.vsh @@ -53,7 +53,7 @@ uniform vec4 u_wavingBlockParam4f; #define DO_COMPILE_STATE_WAVING_BLOCKS #define FAKE_SIN(valueIn, valueOut)\ valueOut = abs(1.0 - fract(valueIn * 0.159155) * 2.0);\ - valueOut = valueOut * valueOut * (3.0 - 2.0 * valueOut) * 2.0 - 1.0; + valueOut = valueOut * valueOut * (6.0 - 4.0 * valueOut) - 1.0; #define LIB_INCLUDE_WAVING_BLOCKS_FUNCTION #endif diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_ghosts.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_ghosts.vsh index ce13909..9aaebe4 100755 --- a/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_ghosts.vsh +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_ghosts.vsh @@ -39,7 +39,7 @@ uniform float u_baseScale1f; #define FAKE_SIN(valueIn, valueOut)\ valueOut = abs(1.0 - fract(valueIn * 0.159155) * 2.0);\ - valueOut = valueOut * valueOut * (3.0 - 2.0 * valueOut) * 2.0 - 1.0; + valueOut = valueOut * valueOut * (6.0 - 4.0 * valueOut) - 1.0; void main() { v_occlusion1f = max(textureLod(u_sunOcclusionValue, vec2(0.5, 0.5), 0.0).r * 1.5 - 0.5, 0.0); diff --git a/desktopRuntime/resources/plugin_download.zip b/desktopRuntime/resources/plugin_download.zip index 391713a..f315635 100755 Binary files a/desktopRuntime/resources/plugin_download.zip and b/desktopRuntime/resources/plugin_download.zip differ diff --git a/desktopRuntime/resources/plugin_version.json b/desktopRuntime/resources/plugin_version.json index fc71aa9..5cc76e2 100755 --- a/desktopRuntime/resources/plugin_version.json +++ b/desktopRuntime/resources/plugin_version.json @@ -1 +1 @@ -{"pluginName":"EaglercraftXBungee","pluginVersion":"1.2.6","pluginButton":"Download \"EaglerXBungee-1.2.6.jar\"","pluginFilename":"EaglerXBungee.zip"} \ No newline at end of file +{"pluginName":"EaglercraftXBungee","pluginVersion":"1.2.7","pluginButton":"Download \"EaglerXBungee-1.2.7.jar\"","pluginFilename":"EaglerXBungee.zip"} \ No newline at end of file diff --git a/javascript/SignedBundleTemplate.txt b/javascript/SignedBundleTemplate.txt index 3fc60a0..d6ae847 100755 --- a/javascript/SignedBundleTemplate.txt +++ b/javascript/SignedBundleTemplate.txt @@ -1,4 +1,5 @@ "use strict"; +${classes_js} // %%%%%%%%% launch options %%%%%%%%%%%% @@ -26,8 +27,6 @@ if(typeof window !== "undefined") { // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -${classes_js} - if(typeof window !== "undefined") { window.eaglercraftXOpts.enableSignatureBadge = true; window.eaglercraftXOpts.assetsURI = ${assets_epk}; } if(typeof window !== "undefined") setTimeout(() => { diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformApplication.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformApplication.java index 936d536..4d92c0f 100755 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformApplication.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformApplication.java @@ -274,4 +274,8 @@ public class PlatformApplication { } + public static void setMCServerWindowGlobal(String str) { + + } + } diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java index e703e7f..b173261 100755 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformAssets.java @@ -73,7 +73,7 @@ public class PlatformAssets { if(!a) { j = j | 0xFF000000; } - pixels[i] = (j & 0xFF00FF00) | ((j & 0x00FF0000) >> 16) | + pixels[i] = (j & 0xFF00FF00) | ((j & 0x00FF0000) >>> 16) | ((j & 0x000000FF) << 16); } return new ImageData(w, h, pixels, a); diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java index 7002d42..0d939b2 100755 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java @@ -143,7 +143,7 @@ public class PlatformRuntime { windowIcons[i].getRGB(0, 0, w, h, px, 0, w); for(int j = 0; j < px.length; ++j) { - px[j] = (px[j] & 0xFF00FF00) | ((px[j] >> 16) & 0xFF) | ((px[j] & 0xFF) << 16); // swap R/B + px[j] = (px[j] & 0xFF00FF00) | ((px[j] >>> 16) & 0xFF) | ((px[j] & 0xFF) << 16); // swap R/B } java.nio.ByteBuffer iconBuffer = st.malloc(w * h * 4); diff --git a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DesktopClientConfigAdapter.java b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DesktopClientConfigAdapter.java index 34a4bf4..e410732 100755 --- a/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DesktopClientConfigAdapter.java +++ b/src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DesktopClientConfigAdapter.java @@ -2,6 +2,7 @@ package net.lax1dude.eaglercraft.v1_8.internal.lwjgl; import java.util.ArrayList; import java.util.List; +import java.util.function.Consumer; import org.json.JSONObject; @@ -163,6 +164,11 @@ public class DesktopClientConfigAdapter implements IClientConfigAdapter { public String callLocalStorageLoadHook(String key) { return null; } - + + @Override + public void callCrashReportHook(String crashReport, Consumer customMessageCB) { + + } + } } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/EagRuntime.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/EagRuntime.java index 5e95b8a..e8f490a 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/EagRuntime.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/EagRuntime.java @@ -226,6 +226,9 @@ public class EagRuntime { return PlatformRuntime.maxMemory(); } + /** + * Note to skids: This doesn't do anything in TeaVM runtime! + */ public static long totalMemory() { return PlatformRuntime.totalMemory(); } @@ -322,4 +325,8 @@ public class EagRuntime { input.setCalendar(getLocaleCalendar()); return input; } + + public static void setMCServerWindowGlobal(String url) { + PlatformApplication.setMCServerWindowGlobal(url); + } } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftVersion.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftVersion.java index 8895692..95fd85f 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftVersion.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftVersion.java @@ -10,7 +10,7 @@ public class EaglercraftVersion { /// Customize these to fit your fork: public static final String projectForkName = "EaglercraftX"; - public static final String projectForkVersion = "u35"; + public static final String projectForkVersion = "u36"; public static final String projectForkVendor = "lax1dude"; public static final String projectForkURL = "https://gitlab.com/lax1dude/eaglercraftx-1.8"; @@ -20,7 +20,7 @@ public class EaglercraftVersion { public static final String projectOriginName = "EaglercraftX"; public static final String projectOriginAuthor = "lax1dude"; public static final String projectOriginRevision = "1.8"; - public static final String projectOriginVersion = "u35"; + public static final String projectOriginVersion = "u36"; public static final String projectOriginURL = "https://gitlab.com/lax1dude/eaglercraftx-1.8"; // rest in peace @@ -31,7 +31,7 @@ public class EaglercraftVersion { public static final boolean enableUpdateService = true; public static final String updateBundlePackageName = "net.lax1dude.eaglercraft.v1_8.client"; - public static final int updateBundlePackageVersionInt = 35; + public static final int updateBundlePackageVersionInt = 36; public static final String updateLatestLocalStorageKey = "latestUpdate_" + updateBundlePackageName; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IClientConfigAdapterHooks.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IClientConfigAdapterHooks.java index 3236026..6b26127 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IClientConfigAdapterHooks.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IClientConfigAdapterHooks.java @@ -1,5 +1,7 @@ package net.lax1dude.eaglercraft.v1_8.internal; +import java.util.function.Consumer; + /** * Copyright (c) 2024 lax1dude. All Rights Reserved. * @@ -21,4 +23,6 @@ public interface IClientConfigAdapterHooks { String callLocalStorageLoadHook(String key); + void callCrashReportHook(String crashReport, Consumer customMessageCB); + } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/AcceleratedEffectRenderer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/AcceleratedEffectRenderer.java index 7e00055..df073d3 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/AcceleratedEffectRenderer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/AcceleratedEffectRenderer.java @@ -72,14 +72,14 @@ public class AcceleratedEffectRenderer implements IAcceleratedParticleEngine { public void drawParticle(float posX, float posY, float posZ, int particleIndexX, int particleIndexY, int lightMapData, int texSize, float particleSize, float r, float g, float b, float a) { InstancedParticleRenderer.appendParticle(posX, posY, posZ, particleIndexX, particleIndexY, lightMapData & 0xFF, - (lightMapData >> 16) & 0xFF, (int)(particleSize * 16.0f), texSize, r, g, b, a); + (lightMapData >>> 16) & 0xFF, (int)(particleSize * 16.0f), texSize, r, g, b, a); } @Override public void drawParticle(float posX, float posY, float posZ, int particleIndexX, int particleIndexY, int lightMapData, int texSize, float particleSize, int rgba) { InstancedParticleRenderer.appendParticle(posX, posY, posZ, particleIndexX, particleIndexY, lightMapData & 0xFF, - (lightMapData >> 16) & 0xFF, (int)(particleSize * 16.0f), texSize, rgba); + (lightMapData >>> 16) & 0xFF, (int)(particleSize * 16.0f), texSize, rgba); } } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/EaglerFontRenderer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/EaglerFontRenderer.java index 3cd4e76..2c5708c 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/EaglerFontRenderer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/EaglerFontRenderer.java @@ -47,10 +47,10 @@ public class EaglerFontRenderer extends FontRenderer { if ((color & 0xFC000000) == 0) { color |= 0xFF000000; } - this.red = (float) (color >> 16 & 255) / 255.0F; - this.blue = (float) (color >> 8 & 255) / 255.0F; + this.red = (float) (color >>> 16 & 255) / 255.0F; + this.blue = (float) (color >>> 8 & 255) / 255.0F; this.green = (float) (color & 255) / 255.0F; - this.alpha = (float) (color >> 24 & 255) / 255.0F; + this.alpha = (float) (color >>> 24 & 255) / 255.0F; this.posX = x; this.posY = y; this.textColor = color; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/ByteBufEaglercraftImpl.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/ByteBufEaglercraftImpl.java index 8fe7a4c..342f92e 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/ByteBufEaglercraftImpl.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/netty/ByteBufEaglercraftImpl.java @@ -72,8 +72,8 @@ public class ByteBufEaglercraftImpl extends AbstractByteBuf { @Override protected void _setMedium(int index, int value) { - internal.put(index, (byte)((value >> 16) & 0xFF)); - internal.put(index + 1, (byte)((value >> 8) & 0xFF)); + internal.put(index, (byte)((value >>> 16) & 0xFF)); + internal.put(index + 1, (byte)((value >>> 8) & 0xFF)); internal.put(index + 2, (byte)(value & 0xFF)); } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ImageData.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ImageData.java index 9d6d78d..4d91176 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ImageData.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/ImageData.java @@ -118,14 +118,14 @@ public class ImageData { if((spx & 0xFF000000) == 0xFF000000 || (dpx & 0xFF000000) == 0) { pixels[di] = spx; }else { - int sa = (spx >> 24) & 0xFF; - int da = (dpx >> 24) & 0xFF; - int r = ((spx >> 16) & 0xFF) * sa / 255; - int g = ((spx >> 8) & 0xFF) * sa / 255; + int sa = (spx >>> 24) & 0xFF; + int da = (dpx >>> 24) & 0xFF; + int r = ((spx >>> 16) & 0xFF) * sa / 255; + int g = ((spx >>> 8) & 0xFF) * sa / 255; int b = (spx & 0xFF) * sa / 255; int aa = (255 - sa) * da; - r += ((dpx >> 16) & 0xFF) * aa / 65025; - g += ((dpx >> 8) & 0xFF) * aa / 65025; + r += ((dpx >>> 16) & 0xFF) * aa / 65025; + g += ((dpx >>> 8) & 0xFF) * aa / 65025; b += (dpx & 0xFF) * aa / 65025; sa += da; if(sa > 0xFF) sa = 0xFF; @@ -138,14 +138,14 @@ public class ImageData { public ImageData swapRB() { for(int i = 0; i < pixels.length; ++i) { int j = pixels[i]; - pixels[i] = (j & 0xFF00FF00) | ((j & 0x00FF0000) >> 16) | + pixels[i] = (j & 0xFF00FF00) | ((j & 0x00FF0000) >>> 16) | ((j & 0x000000FF) << 16); } return this; } public static int swapRB(int c) { - return (c & 0xFF00FF00) | ((c & 0x00FF0000) >> 16) | ((c & 0x000000FF) << 16); + return (c & 0xFF00FF00) | ((c & 0x00FF0000) >>> 16) | ((c & 0x000000FF) << 16); } } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/InstancedFontRenderer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/InstancedFontRenderer.java index 3101682..0bc60b6 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/InstancedFontRenderer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/InstancedFontRenderer.java @@ -413,7 +413,7 @@ public class InstancedFontRenderer { buf.putShort((short)y); buf.put((byte)cx); buf.put((byte)cy); - color = ((color >> 1) & 0x7F000000) | (color & 0xFFFFFF); + color = ((color >>> 1) & 0x7F000000) | (color & 0xFFFFFF); if(italic) { color |= 0x80000000; } @@ -438,7 +438,7 @@ public class InstancedFontRenderer { buf.putShort((short)y); buf.put((byte)cx); buf.put((byte)cy); - color = ((color >> 1) & 0x7F000000) | (color & 0xFFFFFF); + color = ((color >>> 1) & 0x7F000000) | (color & 0xFFFFFF); if(italic) { color |= 0x80000000; } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/WorldRenderer.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/WorldRenderer.java index fe92519..42b10e9 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/WorldRenderer.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/WorldRenderer.java @@ -267,8 +267,8 @@ public class WorldRenderer { if (!this.needsUpdate) { j = this.intBuffer.get(i); int k = (int) ((float) (j & 255) * red); - int l = (int) ((float) (j >> 8 & 255) * green); - int i1 = (int) ((float) (j >> 16 & 255) * blue); + int l = (int) ((float) (j >>> 8 & 255) * green); + int i1 = (int) ((float) (j >>> 16 & 255) * blue); j = j & -16777216; j = j | i1 << 16 | l << 8 | k; } @@ -280,10 +280,10 @@ public class WorldRenderer { */ private void putColor(int argb, int parInt2) { int i = this.getColorIndex(parInt2); - int j = argb >> 16 & 255; - int k = argb >> 8 & 255; + int j = argb >>> 16 & 255; + int k = argb >>> 8 & 255; int l = argb & 255; - int i1 = argb >> 24 & 255; + int i1 = argb >>> 24 & 255; this.putColorRGBA(i, j, k, l, i1); } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/CapePackets.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/CapePackets.java index 6b7a1cd..d5fba35 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/CapePackets.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/CapePackets.java @@ -63,8 +63,8 @@ public class CapePackets { } public static byte[] writeMyCapePreset(int capeId) { - return new byte[] { (byte) PACKET_MY_CAPE_PRESET, (byte) (capeId >> 24), (byte) (capeId >> 16), - (byte) (capeId >> 8), (byte) (capeId & 0xFF) }; + return new byte[] { (byte) PACKET_MY_CAPE_PRESET, (byte) (capeId >>> 24), (byte) (capeId >>> 16), + (byte) (capeId >>> 8), (byte) (capeId & 0xFF) }; } public static byte[] writeMyCapeCustom(CustomCape customCape) { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/DefaultCapes.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/DefaultCapes.java index a287ce7..8684d50 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/DefaultCapes.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/DefaultCapes.java @@ -39,9 +39,14 @@ public enum DefaultCapes { SNOWMAN(17, "Snowman", new ResourceLocation("eagler:capes/17.snowman.png")), SPADE(18, "Spade", new ResourceLocation("eagler:capes/18.spade.png")), BIRTHDAY(19, "Birthday", new ResourceLocation("eagler:capes/19.birthday.png")), - DB(20, "dB", new ResourceLocation("eagler:capes/20.db.png")); + DB(20, "dB", new ResourceLocation("eagler:capes/20.db.png")), + _15TH_ANNIVERSARY(21, "15th Anniversary", new ResourceLocation("eagler:capes/21.15th_anniversary.png")), + VANILLA(22, "Vanilla", new ResourceLocation("eagler:capes/22.vanilla.png")), + TIKTOK(23, "TikTok", new ResourceLocation("eagler:capes/23.tiktok.png")), + PURPLE_HEART(24, "Purple Heart", new ResourceLocation("eagler:capes/24.purple_heart.png")), + CHERRY_BLOSSOM(25, "Cherry Blossom", new ResourceLocation("eagler:capes/25.cherry_blossom.png")); - public static final DefaultCapes[] defaultCapesMap = new DefaultCapes[21]; + public static final DefaultCapes[] defaultCapesMap = new DefaultCapes[26]; public final int id; public final String name; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenEditProfile.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenEditProfile.java index e56cfaa..24cac8e 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenEditProfile.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/GuiScreenEditProfile.java @@ -345,9 +345,9 @@ public class GuiScreenEditProfile extends GuiScreen { for(int i = 0, j, k; i < 4096; ++i) { j = i << 2; k = loadedSkin.pixels[i]; - rawSkin[j] = (byte)(k >> 24); - rawSkin[j + 1] = (byte)(k >> 16); - rawSkin[j + 2] = (byte)(k >> 8); + rawSkin[j] = (byte)(k >>> 24); + rawSkin[j + 1] = (byte)(k >>> 16); + rawSkin[j + 2] = (byte)(k >>> 8); rawSkin[j + 3] = (byte)(k & 0xFF); } for(int y = 20; y < 32; ++y) { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/ProfileExporter.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/ProfileExporter.java index 0d0e8f5..faf5816 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/ProfileExporter.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/ProfileExporter.java @@ -59,7 +59,7 @@ public class ProfileExporter { + (doExportServers ? "servers " : "") + (doExportResourcePacks ? "resourcePacks" : "") + "\n\n") .getBytes(StandardCharsets.UTF_8); - osb.write((comment.length >> 8) & 255); + osb.write((comment.length >>> 8) & 255); osb.write(comment.length & 255); osb.write(comment); @@ -164,9 +164,9 @@ public class ProfileExporter { byte[] ret = osb.toByteArray(); - ret[lengthIntegerOffset] = (byte)((fileCount >> 24) & 0xFF); - ret[lengthIntegerOffset + 1] = (byte)((fileCount >> 16) & 0xFF); - ret[lengthIntegerOffset + 2] = (byte)((fileCount >> 8) & 0xFF); + ret[lengthIntegerOffset] = (byte)((fileCount >>> 24) & 0xFF); + ret[lengthIntegerOffset + 1] = (byte)((fileCount >>> 16) & 0xFF); + ret[lengthIntegerOffset + 2] = (byte)((fileCount >>> 8) & 0xFF); ret[lengthIntegerOffset + 3] = (byte)(fileCount & 0xFF); logger.info("Export complete!"); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinConverter.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinConverter.java index 6843f0c..f737d28 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinConverter.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinConverter.java @@ -42,8 +42,8 @@ public class SkinConverter { i = (y * 23 + x) * 3; j = skinIn.pixels[y * skinIn.width + x]; if((j & 0xFF000000) != 0) { - skinOut[i] = (byte)(j >> 16); - skinOut[i + 1] = (byte)(j >> 8); + skinOut[i] = (byte)(j >>> 16); + skinOut[i + 1] = (byte)(j >>> 8); skinOut[i + 2] = (byte)(j & 0xFF); }else { skinOut[i] = skinOut[i + 1] = skinOut[i + 2] = 0; @@ -54,8 +54,8 @@ public class SkinConverter { i = ((y + 6) * 23 + 22) * 3; j = skinIn.pixels[(y + 11) * skinIn.width + 22]; if((j & 0xFF000000) != 0) { - skinOut[i] = (byte)(j >> 16); - skinOut[i + 1] = (byte)(j >> 8); + skinOut[i] = (byte)(j >>> 16); + skinOut[i + 1] = (byte)(j >>> 8); skinOut[i + 2] = (byte)(j & 0xFF); }else { skinOut[i] = skinOut[i + 1] = skinOut[i + 2] = 0; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinPackets.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinPackets.java index c72325f..8215fe1 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinPackets.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/SkinPackets.java @@ -81,8 +81,8 @@ public class SkinPackets { } public static byte[] writeMySkinPreset(int skinId) { - return new byte[] { (byte) PACKET_MY_SKIN_PRESET, (byte) (skinId >> 24), (byte) (skinId >> 16), - (byte) (skinId >> 8), (byte) (skinId & 0xFF) }; + return new byte[] { (byte) PACKET_MY_SKIN_PRESET, (byte) (skinId >>> 24), (byte) (skinId >>> 16), + (byte) (skinId >>> 8), (byte) (skinId & 0xFF) }; } public static byte[] writeMySkinCustom(CustomSkin customSkin) { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/ConnectionHandshake.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/ConnectionHandshake.java index 23ad050..ddee305 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/ConnectionHandshake.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/socket/ConnectionHandshake.java @@ -191,12 +191,12 @@ public class ConnectionHandshake { int passLen = password.length(); - digest.update((byte)((passLen >> 8) & 0xFF)); + digest.update((byte)((passLen >>> 8) & 0xFF)); digest.update((byte)(passLen & 0xFF)); for(int i = 0; i < passLen; ++i) { char codePoint = password.charAt(i); - digest.update((byte)((codePoint >> 8) & 0xFF)); + digest.update((byte)((codePoint >>> 8) & 0xFF)); digest.update((byte)(codePoint & 0xFF)); } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/SkullCommand.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/SkullCommand.java index 68e8823..0530310 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/SkullCommand.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/SkullCommand.java @@ -57,9 +57,9 @@ public class SkullCommand { for(int i = 0, j, k; i < 4096; ++i) { j = i << 2; k = loaded.pixels[i]; - rawSkin[j] = (byte)(k >> 24); - rawSkin[j + 1] = (byte)(k >> 16); - rawSkin[j + 2] = (byte)(k >> 8); + rawSkin[j] = (byte)(k >>> 24); + rawSkin[j + 1] = (byte)(k >>> 16); + rawSkin[j + 2] = (byte)(k >>> 8); rawSkin[j + 3] = (byte)(k & 0xFF); } mc.thePlayer.sendQueue.addToSendQueue(new C17PacketCustomPayload("EAG|Skins-1.8", SkinPackets.writeCreateCustomSkull(rawSkin))); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenLANConnecting.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenLANConnecting.java index 85024d1..c1b594e 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenLANConnecting.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/gui/GuiScreenLANConnecting.java @@ -8,8 +8,10 @@ import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayServer; import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayServerSocket; import net.lax1dude.eaglercraft.v1_8.sp.socket.NetHandlerSingleplayerLogin; import net.minecraft.client.LoadingScreenRenderer; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiDisconnected; import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.multiplayer.ServerData; import net.minecraft.client.resources.I18n; import net.minecraft.network.EnumConnectionState; import net.minecraft.network.login.client.C00PacketLoginStart; @@ -54,6 +56,7 @@ public class GuiScreenLANConnecting extends GuiScreen { this.parent = parent; this.code = code; this.relay = relay; + Minecraft.getMinecraft().setServerData(new ServerData("Shared World", "shared:" + relay.address, false)); } public boolean doesGuiPauseGame() { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/lan/LANServerController.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/lan/LANServerController.java index f7b47b3..503f260 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/lan/LANServerController.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/lan/LANServerController.java @@ -32,7 +32,7 @@ import net.lax1dude.eaglercraft.v1_8.sp.relay.pkt.*; */ public class LANServerController { - public static final Logger logger = LogManager.getLogger("IntegratedServerLAN"); + public static final Logger logger = LogManager.getLogger("LANServerController"); public static final List currentICEServers = new ArrayList(); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/IPacket.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/IPacket.java index b7cfcd9..e7a281d 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/IPacket.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/relay/pkt/IPacket.java @@ -154,7 +154,7 @@ public class IPacket { is.write(0); }else { int l = txt.length(); - is.write((l >> 8) & 0xFF); + is.write((l >>> 8) & 0xFF); is.write(l & 0xFF); for(int i = 0; i < l; ++i) { is.write((int)txt.charAt(i)); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerChunkLoader.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerChunkLoader.java index b376ac4..3b5a609 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerChunkLoader.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/EaglerChunkLoader.java @@ -41,8 +41,8 @@ public class EaglerChunkLoader extends AnvilChunkLoader { char[] path = new char[12]; for(int i = 5; i >= 0; --i) { - path[i] = hex.charAt((unsignedX >> (i * 4)) & 0xF); - path[i + 6] = hex.charAt((unsignedZ >> (i * 4)) & 0xF); + path[i] = hex.charAt((unsignedX >>> (i << 2)) & 0xF); + path[i + 6] = hex.charAt((unsignedZ >>> (i << 2)) & 0xF); } return new String(path); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/EPKCompiler.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/EPKCompiler.java index c55032f..54a9668 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/EPKCompiler.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/export/EPKCompiler.java @@ -49,7 +49,7 @@ public class EPKCompiler { EagRuntime.fixDateFormat(new SimpleDateFormat("hh:mm:ss aa")).format(d) + "\n\n # world name: " + name + "\n\n") .getBytes(StandardCharsets.UTF_8); - os.write((comment.length >> 8) & 255); + os.write((comment.length >>> 8) & 255); os.write(comment.length & 255); os.write(comment); @@ -134,9 +134,9 @@ public class EPKCompiler { byte[] ret = os.toByteArray(); - ret[lengthIntegerOffset] = (byte)((totalFileCount >> 24) & 0xFF); - ret[lengthIntegerOffset + 1] = (byte)((totalFileCount >> 16) & 0xFF); - ret[lengthIntegerOffset + 2] = (byte)((totalFileCount >> 8) & 0xFF); + ret[lengthIntegerOffset] = (byte)(totalFileCount >>> 24); + ret[lengthIntegerOffset + 1] = (byte)(totalFileCount >>> 16); + ret[lengthIntegerOffset + 2] = (byte)(totalFileCount >>> 8); ret[lengthIntegerOffset + 3] = (byte)(totalFileCount & 0xFF); return ret; @@ -147,21 +147,21 @@ public class EPKCompiler { } public static void writeInt(int i, OutputStream os) throws IOException { - os.write((i >> 24) & 0xFF); - os.write((i >> 16) & 0xFF); - os.write((i >> 8) & 0xFF); + os.write((i >>> 24) & 0xFF); + os.write((i >>> 16) & 0xFF); + os.write((i >>> 8) & 0xFF); os.write(i & 0xFF); } public static void writeLong(long i, OutputStream os) throws IOException { - os.write((int)((i >> 56) & 0xFF)); - os.write((int)((i >> 48) & 0xFF)); - os.write((int)((i >> 40) & 0xFF)); - os.write((int)((i >> 32) & 0xFF)); - os.write((int)((i >> 24) & 0xFF)); - os.write((int)((i >> 16) & 0xFF)); - os.write((int)((i >> 8) & 0xFF)); - os.write((int)(i & 0xFF)); + os.write((int)((i >>> 56l) & 0xFFl)); + os.write((int)((i >>> 48l) & 0xFFl)); + os.write((int)((i >>> 40l) & 0xFFl)); + os.write((int)((i >>> 32l) & 0xFFl)); + os.write((int)((i >>> 24l) & 0xFFl)); + os.write((int)((i >>> 16l) & 0xFFl)); + os.write((int)((i >>> 8l) & 0xFFl)); + os.write((int)(i & 0xFFl)); } } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedCapePackets.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedCapePackets.java index 7f42067..38a3f4e 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedCapePackets.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedCapePackets.java @@ -89,9 +89,9 @@ public class IntegratedCapePackets { byte[] ret = new byte[1 + 16 + 4]; ret[0] = (byte)PACKET_OTHER_CAPE_PRESET; IntegratedSkinPackets.UUIDToBytes(uuid, ret, 1); - ret[17] = (byte)(presetId >> 24); - ret[18] = (byte)(presetId >> 16); - ret[19] = (byte)(presetId >> 8); + ret[17] = (byte)(presetId >>> 24); + ret[18] = (byte)(presetId >>> 16); + ret[19] = (byte)(presetId >>> 8); ret[20] = (byte)(presetId & 0xFF); return ret; } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedSkinPackets.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedSkinPackets.java index 673c9c3..4997e98 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedSkinPackets.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/skins/IntegratedSkinPackets.java @@ -143,9 +143,9 @@ public class IntegratedSkinPackets { byte[] ret = new byte[1 + 16 + 4]; ret[0] = (byte)PACKET_OTHER_SKIN_PRESET; UUIDToBytes(uuid, ret, 1); - ret[17] = (byte)(presetId >> 24); - ret[18] = (byte)(presetId >> 16); - ret[19] = (byte)(presetId >> 8); + ret[17] = (byte)(presetId >>> 24); + ret[18] = (byte)(presetId >>> 16); + ret[19] = (byte)(presetId >>> 8); ret[20] = (byte)(presetId & 0xFF); return ret; } @@ -197,21 +197,21 @@ public class IntegratedSkinPackets { public static void UUIDToBytes(EaglercraftUUID uuid, byte[] bytes, int off) { long msb = uuid.getMostSignificantBits(); long lsb = uuid.getLeastSignificantBits(); - bytes[off] = (byte)(msb >> 56l); - bytes[off + 1] = (byte)(msb >> 48l); - bytes[off + 2] = (byte)(msb >> 40l); - bytes[off + 3] = (byte)(msb >> 32l); - bytes[off + 4] = (byte)(msb >> 24l); - bytes[off + 5] = (byte)(msb >> 16l); - bytes[off + 6] = (byte)(msb >> 8l); + bytes[off] = (byte)(msb >>> 56l); + bytes[off + 1] = (byte)(msb >>> 48l); + bytes[off + 2] = (byte)(msb >>> 40l); + bytes[off + 3] = (byte)(msb >>> 32l); + bytes[off + 4] = (byte)(msb >>> 24l); + bytes[off + 5] = (byte)(msb >>> 16l); + bytes[off + 6] = (byte)(msb >>> 8l); bytes[off + 7] = (byte)(msb & 0xFFl); - bytes[off + 8] = (byte)(lsb >> 56l); - bytes[off + 9] = (byte)(lsb >> 48l); - bytes[off + 10] = (byte)(lsb >> 40l); - bytes[off + 11] = (byte)(lsb >> 32l); - bytes[off + 12] = (byte)(lsb >> 24l); - bytes[off + 13] = (byte)(lsb >> 16l); - bytes[off + 14] = (byte)(lsb >> 8l); + bytes[off + 8] = (byte)(lsb >>> 56l); + bytes[off + 9] = (byte)(lsb >>> 48l); + bytes[off + 10] = (byte)(lsb >>> 40l); + bytes[off + 11] = (byte)(lsb >>> 32l); + bytes[off + 12] = (byte)(lsb >>> 24l); + bytes[off + 13] = (byte)(lsb >>> 16l); + bytes[off + 14] = (byte)(lsb >>> 8l); bytes[off + 15] = (byte)(lsb & 0xFFl); } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/socket/IntegratedServerPlayerNetworkManager.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/socket/IntegratedServerPlayerNetworkManager.java index 65ec712..b6d7002 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/socket/IntegratedServerPlayerNetworkManager.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/sp/server/socket/IntegratedServerPlayerNetworkManager.java @@ -239,9 +239,9 @@ public class IntegratedServerPlayerNetworkManager { byte[] compressedData; try { temporaryOutputStream.write(2); - temporaryOutputStream.write((len >> 24) & 0xFF); - temporaryOutputStream.write((len >> 16) & 0xFF); - temporaryOutputStream.write((len >> 8) & 0xFF); + temporaryOutputStream.write((len >>> 24) & 0xFF); + temporaryOutputStream.write((len >>> 16) & 0xFF); + temporaryOutputStream.write((len >>> 8) & 0xFF); temporaryOutputStream.write(len & 0xFF); try(OutputStream os = EaglerZLIB.newDeflaterOutputStream(temporaryOutputStream)) { temporaryBuffer.readBytes(os, len); diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateVersionSlot.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateVersionSlot.java index 5dfa330..26e6507 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateVersionSlot.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/GuiUpdateVersionSlot.java @@ -127,13 +127,13 @@ public class GuiUpdateVersionSlot extends GuiSlot { if(strs.size() > 2 && screen.mx > xx + iconSize && screen.my > yy + 8 && screen.mx < xx + getListWidth() - 5 && screen.my < yy + 25) { screen.tooltip = cert.bundleVersionComment; } - char[] hexStr1 = new char[] { hexChars[(cert.bundleDataHash[0] >> 4) & 0xF], - hexChars[cert.bundleDataHash[1] & 0xF], hexChars[(cert.bundleDataHash[1] >> 4) & 0xF], - hexChars[cert.bundleDataHash[1] & 0xF], hexChars[(cert.bundleDataHash[2] >> 4) & 0xF], + char[] hexStr1 = new char[] { hexChars[(cert.bundleDataHash[0] >>> 4) & 0xF], + hexChars[cert.bundleDataHash[1] & 0xF], hexChars[(cert.bundleDataHash[1] >>> 4) & 0xF], + hexChars[cert.bundleDataHash[1] & 0xF], hexChars[(cert.bundleDataHash[2] >>> 4) & 0xF], hexChars[cert.bundleDataHash[2] & 0xF] }; - char[] hexStr2 = new char[] { hexChars[(cert.bundleDataHash[29] >> 4) & 0xF], - hexChars[cert.bundleDataHash[29] & 0xF], hexChars[(cert.bundleDataHash[30] >> 4) & 0xF], - hexChars[cert.bundleDataHash[30] & 0xF], hexChars[(cert.bundleDataHash[31] >> 4) & 0xF], + char[] hexStr2 = new char[] { hexChars[(cert.bundleDataHash[29] >>> 4) & 0xF], + hexChars[cert.bundleDataHash[29] & 0xF], hexChars[(cert.bundleDataHash[30] >>> 4) & 0xF], + hexChars[cert.bundleDataHash[30] & 0xF], hexChars[(cert.bundleDataHash[31] >>> 4) & 0xF], hexChars[cert.bundleDataHash[31] & 0xF] }; screen.drawString(mc.fontRendererObj, "Author: " + EnumChatFormatting.GRAY + cert.bundleAuthorName + EnumChatFormatting.WHITE + " Hash: " diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/UpdateCertificate.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/UpdateCertificate.java index 86a47e0..479288f 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/update/UpdateCertificate.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/update/UpdateCertificate.java @@ -141,7 +141,7 @@ public class UpdateCertificate { sha256.update(signaturePayload, 0, signaturePayload.length); sha256.doFinal(hash2048, 96); - hash2048[0] = (byte)((signaturePayload.length >> 8) & 0xFF); + hash2048[0] = (byte)((signaturePayload.length >>> 8) & 0xFF); hash2048[1] = (byte)(signaturePayload.length & 0xFF); if(!Arrays.equals(hash2048, rsa2048sumDec)) { diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/GuiVoiceMenu.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/GuiVoiceMenu.java index 8a884cc..0e69344 100755 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/GuiVoiceMenu.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/voice/GuiVoiceMenu.java @@ -559,9 +559,9 @@ public class GuiVoiceMenu extends Gui { } public static int attenuate(int cin, float r, float g, float b, float a) { - float var10 = (float) (cin >> 24 & 255) / 255.0F; - float var6 = (float) (cin >> 16 & 255) / 255.0F; - float var7 = (float) (cin >> 8 & 255) / 255.0F; + float var10 = (float) (cin >>> 24 & 255) / 255.0F; + float var6 = (float) (cin >>> 16 & 255) / 255.0F; + float var7 = (float) (cin >>> 8 & 255) / 255.0F; float var8 = (float) (cin & 255) / 255.0F; var10 *= a; var6 *= r; diff --git a/src/main/java/net/minecraft/client/Minecraft.java b/src/main/java/net/minecraft/client/Minecraft.java index 5c1c052..870b84f 100755 --- a/src/main/java/net/minecraft/client/Minecraft.java +++ b/src/main/java/net/minecraft/client/Minecraft.java @@ -1776,6 +1776,7 @@ public class Minecraft implements IThreadListener { session.reset(); SingleplayerServerController.launchEaglercraftServer(folderName, gameSettings.difficulty.getDifficultyId(), Math.max(gameSettings.renderDistanceChunks, 2), worldSettingsIn); + EagRuntime.setMCServerWindowGlobal("singleplayer"); this.displayGuiScreen(new GuiScreenIntegratedServerBusy( new GuiScreenSingleplayerConnecting(new GuiMainMenu(), "Connecting to " + folderName), "singleplayer.busy.startingIntegratedServer", "singleplayer.failed.startingIntegratedServer", @@ -2055,6 +2056,22 @@ public class Minecraft implements IThreadListener { + EaglercraftGPU.glGetString(7936); } }); + theCrash.getCategory().addCrashSectionCallable("Is Eagler Shaders", new Callable() { + public String call() throws Exception { + return Minecraft.this.gameSettings.shaders ? "Yes" : "No"; + } + }); + theCrash.getCategory().addCrashSectionCallable("Is Dynamic Lights", new Callable() { + public String call() throws Exception { + return !Minecraft.this.gameSettings.shaders && Minecraft.this.gameSettings.enableDynamicLights ? "Yes" + : "No"; + } + }); + theCrash.getCategory().addCrashSectionCallable("In Ext. Pipeline", new Callable() { + public String call() throws Exception { + return GlStateManager.isExtensionPipeline() ? "Yes" : "No"; + } + }); theCrash.getCategory().addCrashSectionCallable("Is Modded", new Callable() { public String call() throws Exception { return "Definitely Not; You're an eagler"; @@ -2134,6 +2151,7 @@ public class Minecraft implements IThreadListener { */ public void setServerData(ServerData serverDataIn) { this.currentServerData = serverDataIn; + EagRuntime.setMCServerWindowGlobal(serverDataIn != null ? serverDataIn.serverIP : null); } public ServerData getCurrentServerData() { diff --git a/src/main/java/net/minecraft/client/gui/GuiMainMenu.java b/src/main/java/net/minecraft/client/gui/GuiMainMenu.java index 8a8766f..a9cb794 100755 --- a/src/main/java/net/minecraft/client/gui/GuiMainMenu.java +++ b/src/main/java/net/minecraft/client/gui/GuiMainMenu.java @@ -575,8 +575,10 @@ public class GuiMainMenu extends GuiScreen implements GuiYesNoCallback { short short1 = 274; int k = this.width / 2 - short1 / 2; byte b0 = 30; - this.drawGradientRect(0, 0, this.width, this.height, -2130706433, 16777215); - this.drawGradientRect(0, 0, this.width, this.height, 0, Integer.MIN_VALUE); + if (enableBlur) { + this.drawGradientRect(0, 0, this.width, this.height, -2130706433, 16777215); + this.drawGradientRect(0, 0, this.width, this.height, 0, Integer.MIN_VALUE); + } this.mc.getTextureManager().bindTexture(minecraftTitleTextures); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); boolean minc = (double) this.updateCounter < 1.0E-4D; diff --git a/src/main/java/net/minecraft/client/gui/MapItemRenderer.java b/src/main/java/net/minecraft/client/gui/MapItemRenderer.java index 709175f..d70f824 100755 --- a/src/main/java/net/minecraft/client/gui/MapItemRenderer.java +++ b/src/main/java/net/minecraft/client/gui/MapItemRenderer.java @@ -116,7 +116,7 @@ public class MapItemRenderer { } else { c = MapColor.mapColorArray[j / 4].func_151643_b(j & 3); } - this.mapTextureData[i] = (c & 0xFF00FF00) | ((c & 0x00FF0000) >> 16) | ((c & 0x000000FF) << 16); + this.mapTextureData[i] = (c & 0xFF00FF00) | ((c & 0x00FF0000) >>> 16) | ((c & 0x000000FF) << 16); } this.mapTexture.updateDynamicTexture(); diff --git a/src/main/java/net/minecraft/client/renderer/entity/RendererLivingEntity.java b/src/main/java/net/minecraft/client/renderer/entity/RendererLivingEntity.java index f9a75e6..b190419 100755 --- a/src/main/java/net/minecraft/client/renderer/entity/RendererLivingEntity.java +++ b/src/main/java/net/minecraft/client/renderer/entity/RendererLivingEntity.java @@ -351,9 +351,9 @@ public abstract class RendererLivingEntity extends R return false; } else { GlStateManager.enableShaderBlendAdd(); - float f1 = 1.0F - (float) (i >> 24 & 255) / 255.0F; - float f2 = (float) (i >> 16 & 255) / 255.0F; - float f3 = (float) (i >> 8 & 255) / 255.0F; + float f1 = 1.0F - (float) (i >>> 24 & 255) / 255.0F; + float f2 = (float) (i >>> 16 & 255) / 255.0F; + float f3 = (float) (i >>> 8 & 255) / 255.0F; float f4 = (float) (i & 255) / 255.0F; GlStateManager.setShaderBlendSrc(f1, f1, f1, 1.0F); GlStateManager.setShaderBlendAdd(f2 * f1 + 0.4F, f3 * f1, f4 * f1, 0.0f); diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformApplication.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformApplication.java index 988db04..98427d5 100755 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformApplication.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformApplication.java @@ -309,4 +309,7 @@ public class PlatformApplication { public static boolean isShowingDebugConsole() { return DebugConsoleWindow.isShowingDebugConsole(); } + + @JSBody(params = { "str" }, script = "window.minecraftServer = str;") + public static native void setMCServerWindowGlobal(String str); } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformInput.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformInput.java index b9606c2..f9a5baf 100755 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformInput.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformInput.java @@ -605,6 +605,10 @@ public class PlatformInput { Window.clearTimeout(mouseUngrabTimeout); mouseUngrabTimeout = -1; } + try { + win.getDocument().exitPointerLock(); + }catch(Throwable t) { + } } public static void pressAnyKeyScreen() { diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java index a9faa01..3282abb 100755 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/PlatformRuntime.java @@ -87,6 +87,7 @@ public class PlatformRuntime { win = Window.current(); doc = win.getDocument(); DebugConsoleWindow.initialize(win); + PlatformApplication.setMCServerWindowGlobal(null); logger.info("Creating main game canvas"); diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayByteBuffer.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayByteBuffer.java index 5484374..f5664a7 100755 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayByteBuffer.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/buffer/EaglerArrayByteBuffer.java @@ -348,11 +348,11 @@ public class EaglerArrayByteBuffer implements ByteBuffer { @Override public ByteBuffer putLong(long value) { if(position + 8 > limit) throw new ArrayIndexOutOfBoundsException(position); - dataView.setUint32(position, (int) (value & 0xFFFFFFFF), true); - dataView.setUint8(position + 4, (short) ((value >> 32) & 0xFF)); - dataView.setUint8(position + 5, (short) ((value >> 40) & 0xFF)); - dataView.setUint8(position + 6, (short) ((value >> 48) & 0xFF)); - dataView.setUint8(position + 7, (short) ((value >> 56) & 0xFF)); + dataView.setUint32(position, (int) (value & 0xFFFFFFFFl), true); + dataView.setUint8(position + 4, (short) ((value >>> 32l) & 0xFFl)); + dataView.setUint8(position + 5, (short) ((value >>> 40l) & 0xFFl)); + dataView.setUint8(position + 6, (short) ((value >>> 48l) & 0xFFl)); + dataView.setUint8(position + 7, (short) ((value >>> 56l) & 0xFFl)); position += 8; return this; } @@ -368,11 +368,11 @@ public class EaglerArrayByteBuffer implements ByteBuffer { @Override public ByteBuffer putLong(int index, long value) { if(index + 8 > limit) throw new ArrayIndexOutOfBoundsException(index); - dataView.setUint32(index, (int) (value & 0xFFFFFFFF), true); - dataView.setUint8(index + 4, (short) ((value >> 32) & 0xFF)); - dataView.setUint8(index + 5, (short) ((value >> 40) & 0xFF)); - dataView.setUint8(index + 6, (short) ((value >> 48) & 0xFF)); - dataView.setUint8(index + 7, (short) ((value >> 56) & 0xFF)); + dataView.setUint32(index, (int) (value & 0xFFFFFFFFl), true); + dataView.setUint8(index + 4, (short) ((value >>> 32l) & 0xFFl)); + dataView.setUint8(index + 5, (short) ((value >>> 40l) & 0xFFl)); + dataView.setUint8(index + 6, (short) ((value >>> 48l) & 0xFFl)); + dataView.setUint8(index + 7, (short) ((value >>> 56l) & 0xFFl)); return this; } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ClientMain.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ClientMain.java index 4f970c3..de5f735 100755 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ClientMain.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/ClientMain.java @@ -3,6 +3,8 @@ package net.lax1dude.eaglercraft.v1_8.internal.teavm; import java.io.PrintStream; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.LinkedList; +import java.util.List; import org.json.JSONException; import org.teavm.jso.JSBody; @@ -76,6 +78,7 @@ public class ClientMain { try { JSEaglercraftXOptsRoot eaglercraftOpts = (JSEaglercraftXOptsRoot)opts; + crashOnUncaughtExceptions = eaglercraftOpts.getCrashOnUncaughtExceptions(false); configRootElementId = eaglercraftOpts.getContainer(); if(configRootElementId == null) { @@ -119,36 +122,38 @@ public class ClientMain { return; } - systemOut.println("ClientMain: [INFO] registering crash handlers"); - - setWindowErrorHandler(new WindowErrorHandler() { - - @Override - public void call(String message, String file, int line, int col, JSError error) { - StringBuilder str = new StringBuilder(); - - str.append("Native Browser Exception\n"); - str.append("----------------------------------\n"); - str.append(" Line: ").append((file == null ? "unknown" : file) + ":" + line + ":" + col).append('\n'); - str.append(" Type: ").append(error == null ? "generic" : error.getName()).append('\n'); - - if(error != null) { - str.append(" Desc: ").append(error.getMessage() == null ? "null" : error.getMessage()).append('\n'); - } - - if(message != null) { - if(error == null || error.getMessage() == null || !message.endsWith(error.getMessage())) { - str.append(" Desc: ").append(message).append('\n'); - } - } - - str.append("----------------------------------\n\n"); - str.append(error.getStack() == null ? "No stack trace is available" : error.getStack()).append('\n'); - - showCrashScreen(str.toString()); - } + if(crashOnUncaughtExceptions) { + systemOut.println("ClientMain: [INFO] registering crash handlers"); - }); + setWindowErrorHandler(new WindowErrorHandler() { + + @Override + public void call(String message, String file, int line, int col, JSError error) { + StringBuilder str = new StringBuilder(); + + str.append("Native Browser Exception\n"); + str.append("----------------------------------\n"); + str.append(" Line: ").append((file == null ? "unknown" : file) + ":" + line + ":" + col).append('\n'); + str.append(" Type: ").append(error == null ? "generic" : error.getName()).append('\n'); + + if(error != null) { + str.append(" Desc: ").append(error.getMessage() == null ? "null" : error.getMessage()).append('\n'); + } + + if(message != null) { + if(error == null || error.getMessage() == null || !message.endsWith(error.getMessage())) { + str.append(" Desc: ").append(message).append('\n'); + } + } + + str.append("----------------------------------\n\n"); + str.append(error.getStack() == null ? "No stack trace is available" : error.getStack()).append('\n'); + + showCrashScreen(str.toString()); + } + + }); + } systemOut.println("ClientMain: [INFO] initializing eaglercraftx runtime"); @@ -212,6 +217,7 @@ public class ClientMain { public static HTMLElement configRootElement = null; public static EPKFileEntry[] configEPKFiles = null; public static String configLocalesFolder = null; + public static boolean crashOnUncaughtExceptions = false; @JSFunctor private static interface WindowErrorHandler extends JSObject { @@ -236,61 +242,97 @@ public class ClientMain { private static boolean isCrashed = false; public static void showCrashScreen(String t) { + StringBuilder strBeforeBuilder = new StringBuilder(); + strBeforeBuilder.append("Game Crashed! I have fallen and I can't get up!\n\n"); + strBeforeBuilder.append(t); + strBeforeBuilder.append('\n').append('\n'); + String strBefore = strBeforeBuilder.toString(); + + HTMLDocument doc = Window.current().getDocument(); + if(configRootElement == null) { + configRootElement = doc.getElementById(configRootElementId); + } + + HTMLElement el = configRootElement; + + StringBuilder str = new StringBuilder(); + str.append("eaglercraft.version = \"").append(EaglercraftVersion.projectForkVersion).append("\"\n"); + str.append("eaglercraft.minecraft = \"1.8.8\"\n"); + str.append("eaglercraft.brand = \"" + EaglercraftVersion.projectForkVendor + "\"\n"); + str.append("eaglercraft.username = \"").append(EaglerProfile.getName()).append("\"\n"); + str.append('\n'); + str.append(addWebGLToCrash()); + str.append('\n'); + str.append("window.eaglercraftXOpts = "); + str.append(TeaVMClientConfigAdapter.instance.toString()).append('\n'); + str.append('\n'); + str.append("currentTime = "); + str.append(EagRuntime.fixDateFormat(new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z")).format(new Date())).append('\n'); + str.append('\n'); + addDebugNav(str, "userAgent"); + addDebugNav(str, "vendor"); + addDebugNav(str, "language"); + addDebugNav(str, "hardwareConcurrency"); + addDebugNav(str, "deviceMemory"); + addDebugNav(str, "platform"); + addDebugNav(str, "product"); + addDebugNavPlugins(str); + str.append('\n'); + addDebug(str, "localStorage"); + addDebug(str, "sessionStorage"); + addDebug(str, "indexedDB"); + str.append('\n'); + str.append("rootElement.clientWidth = ").append(el == null ? "undefined" : el.getClientWidth()).append('\n'); + str.append("rootElement.clientHeight = ").append(el == null ? "undefined" : el.getClientHeight()).append('\n'); + addDebug(str, "innerWidth"); + addDebug(str, "innerHeight"); + addDebug(str, "outerWidth"); + addDebug(str, "outerHeight"); + addDebug(str, "devicePixelRatio"); + addDebugScreen(str, "availWidth"); + addDebugScreen(str, "availHeight"); + addDebugScreen(str, "colorDepth"); + addDebugScreen(str, "pixelDepth"); + str.append('\n'); + addDebug(str, "minecraftServer"); + str.append('\n'); + addDebugLocation(str, "href"); + str.append('\n'); + String strAfter = str.toString(); + + String strFinal = strBefore + strAfter; + List additionalInfo = new LinkedList(); + try { + TeaVMClientConfigAdapter.instance.getHooks().callCrashReportHook(strFinal, additionalInfo::add); + }catch(Throwable tt) { + System.err.println("Uncaught exception invoking crash report hook!"); + EagRuntime.debugPrintStackTraceToSTDERR(tt); + } + if(!isCrashed) { isCrashed = true; - HTMLDocument doc = Window.current().getDocument(); - if(configRootElement == null) { - configRootElement = doc.getElementById(configRootElementId); + if(additionalInfo.size() > 0) { + try { + StringBuilder builderFinal = new StringBuilder(); + builderFinal.append(strBefore); + builderFinal.append("Got the following messages from the crash report hook registered in eaglercraftXOpts:\n\n"); + for(String str2 : additionalInfo) { + builderFinal.append("----------[ CRASH HOOK ]----------\n"); + builderFinal.append(str2).append('\n'); + builderFinal.append("----------------------------------\n\n"); + } + builderFinal.append(strAfter); + strFinal = builderFinal.toString(); + }catch(Throwable tt) { + System.err.println("Uncaught exception concatenating crash report hook messages!"); + EagRuntime.debugPrintStackTraceToSTDERR(tt); + } } - - HTMLElement el = configRootElement; - - StringBuilder str = new StringBuilder(); - str.append("Game Crashed! I have fallen and I can't get up!\n\n"); - str.append(t); - str.append('\n').append('\n'); - str.append("eaglercraft.version = \"").append(EaglercraftVersion.projectForkVersion).append("\"\n"); - str.append("eaglercraft.minecraft = \"1.8.8\"\n"); - str.append("eaglercraft.brand = \"" + EaglercraftVersion.projectForkVendor + "\"\n"); - str.append("eaglercraft.username = \"").append(EaglerProfile.getName()).append("\"\n"); - str.append('\n'); - str.append(addWebGLToCrash()); - str.append('\n'); - str.append("window.eaglercraftXOpts = "); - str.append(TeaVMClientConfigAdapter.instance.toString()).append('\n'); - str.append('\n'); - str.append("currentTime = "); - str.append(EagRuntime.fixDateFormat(new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z")).format(new Date())).append('\n'); - str.append('\n'); - addDebugNav(str, "userAgent"); - addDebugNav(str, "vendor"); - addDebugNav(str, "language"); - addDebugNav(str, "hardwareConcurrency"); - addDebugNav(str, "deviceMemory"); - addDebugNav(str, "platform"); - addDebugNav(str, "product"); - str.append('\n'); - str.append("rootElement.clientWidth = ").append(el == null ? "undefined" : el.getClientWidth()).append('\n'); - str.append("rootElement.clientHeight = ").append(el == null ? "undefined" : el.getClientHeight()).append('\n'); - addDebug(str, "innerWidth"); - addDebug(str, "innerHeight"); - addDebug(str, "outerWidth"); - addDebug(str, "outerHeight"); - addDebug(str, "devicePixelRatio"); - addDebugScreen(str, "availWidth"); - addDebugScreen(str, "availHeight"); - addDebugScreen(str, "colorDepth"); - addDebugScreen(str, "pixelDepth"); - str.append('\n'); - addDebug(str, "currentContext"); - str.append('\n'); - addDebugLocation(str, "href"); - str.append('\n'); if(el == null) { Window.alert("Root element not found, crash report was printed to console"); - System.err.println(str.toString()); + System.err.println(strFinal); return; } @@ -303,7 +345,7 @@ public class ClientMain { div.setAttribute("style", "z-index:100;position:absolute;top:135px;left:10%;right:10%;bottom:50px;background-color:white;border:1px solid #cccccc;overflow-x:hidden;overflow-y:scroll;overflow-wrap:break-word;white-space:pre-wrap;font: 14px monospace;padding:10px;"); el.appendChild(img); el.appendChild(div); - div.appendChild(doc.createTextNode(str.toString())); + div.appendChild(doc.createTextNode(strFinal)); PlatformRuntime.removeEventHandlers(); @@ -314,10 +356,29 @@ public class ClientMain { for(int i = 0; i < s.length; ++i) { System.err.println(" " + s[i]); } + if(additionalInfo.size() > 0) { + for(String str2 : additionalInfo) { + if(str2 != null) { + System.err.println(); + System.err.println(" ----------[ CRASH HOOK ]----------"); + s = str2.split("[\\r\\n]+"); + for(int i = 0; i < s.length; ++i) { + System.err.println(" " + s[i]); + } + System.err.println(" ----------------------------------"); + } + } + } } } + private static String webGLCrashStringCache = null; + private static String addWebGLToCrash() { + if(webGLCrashStringCache != null) { + return webGLCrashStringCache; + } + StringBuilder ret = new StringBuilder(); WebGLRenderingContext ctx = PlatformRuntime.webgl; @@ -328,7 +389,11 @@ public class ClientMain { cvs.setWidth(64); cvs.setHeight(64); - ctx = (WebGLRenderingContext)cvs.getContext("webgl"); + ctx = (WebGLRenderingContext)cvs.getContext("webgl2"); + + if(ctx == null) { + ctx = (WebGLRenderingContext)cvs.getContext("webgl"); + } } if(ctx != null) { @@ -345,12 +410,13 @@ public class ClientMain { //ret.append('\n').append("\nwebgl.anisotropicGlitch = ").append(DetectAnisotropicGlitch.hasGlitch()).append('\n'); //TODO ret.append('\n').append("webgl.ext.HDR16f = ").append(ctx.getExtension("EXT_color_buffer_half_float") != null).append('\n'); ret.append("webgl.ext.HDR32f = ").append(ctx.getExtension("EXT_color_buffer_float") != null).append('\n'); + ret.append("webgl.ext.HDR32f_linear = ").append(ctx.getExtension("OES_texture_float_linear") != null).append('\n'); }else { ret.append("Failed to query GPU info!\n"); } - return ret.toString(); + return webGLCrashStringCache = ret.toString(); } public static void showIncompatibleScreen(String t) { @@ -486,6 +552,13 @@ public class ClientMain { @JSBody(params = { "v" }, script = "try { return \"\"+window.location[v]; } catch(e) { return \"\"; }") private static native String getStringLocation(String var); + @JSBody(params = { }, script = "try { var retObj = new Array; if(typeof window.navigator.plugins === \"object\")" + + "{ var len = window.navigator.plugins.length; if(len > 0) { for(var idx = 0; idx < len; ++idx) {" + + "var thePlugin = window.navigator.plugins[idx]; retObj.push({ name: thePlugin.name," + + "filename: thePlugin.filename, desc: thePlugin.description }); } } } return JSON.stringify(retObj);" + + "} catch(e) { return \"\"; }") + private static native String getStringNavPlugins(); + private static void addDebug(StringBuilder str, String var) { str.append("window.").append(var).append(" = ").append(getString(var)).append('\n'); } @@ -494,6 +567,10 @@ public class ClientMain { str.append("window.navigator.").append(var).append(" = ").append(getStringNav(var)).append('\n'); } + private static void addDebugNavPlugins(StringBuilder str) { + str.append("window.navigator.plugins = ").append(getStringNavPlugins()).append('\n'); + } + private static void addDebugScreen(StringBuilder str, String var) { str.append("window.screen.").append(var).append(" = ").append(getStringScreen(var)).append('\n'); } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/DebugConsoleWindow.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/DebugConsoleWindow.java index cef537b..20dc6a2 100755 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/DebugConsoleWindow.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/DebugConsoleWindow.java @@ -64,13 +64,15 @@ public class DebugConsoleWindow { destroyWindow(); } }); - if("true".equals(parent.getLocalStorage().getItem(PlatformRuntime.getClientConfigAdapter().getLocalStorageNamespace() + ".showDebugConsole"))) { + if(parent.getLocalStorage() != null && "true".equals(parent.getLocalStorage().getItem(PlatformRuntime.getClientConfigAdapter().getLocalStorageNamespace() + ".showDebugConsole"))) { showDebugConsole0(); } } public static void showDebugConsole() { - parent.getLocalStorage().setItem(PlatformRuntime.getClientConfigAdapter().getLocalStorageNamespace() + ".showDebugConsole", "true"); + if(parent.getLocalStorage() != null) { + parent.getLocalStorage().setItem(PlatformRuntime.getClientConfigAdapter().getLocalStorageNamespace() + ".showDebugConsole", "true"); + } showDebugConsole0(); } @@ -108,7 +110,9 @@ public class DebugConsoleWindow { public void handleEvent(Event evt) { if(logger != null) { logger = null; - parent.getLocalStorage().setItem("_eaglercraftX.showDebugConsole", "false"); + if(parent.getLocalStorage() != null) { + parent.getLocalStorage().setItem(PlatformRuntime.getClientConfigAdapter().getLocalStorageNamespace() + ".showDebugConsole", "false"); + } } } }; diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMClientConfigAdapter.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMClientConfigAdapter.java index 17150f7..0177962 100755 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMClientConfigAdapter.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMClientConfigAdapter.java @@ -61,6 +61,7 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter { private String localStorageNamespace = "_eaglercraftX"; private final TeaVMClientConfigAdapterHooks hooks = new TeaVMClientConfigAdapterHooks(); private boolean enableMinceraft = true; + private boolean crashOnUncaughtExceptions = false; public void loadNative(JSObject jsObject) { integratedServerOpts = new JSONObject(); @@ -83,6 +84,7 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter { allowFNAWSkins = !demoMode && eaglercraftXOpts.getAllowFNAWSkins(true); localStorageNamespace = eaglercraftXOpts.getLocalStorageNamespace(EaglercraftVersion.localStorageNamespace); enableMinceraft = eaglercraftXOpts.getEnableMinceraft(true); + crashOnUncaughtExceptions = eaglercraftXOpts.getCrashOnUncaughtExceptions(false); JSEaglercraftXOptsHooks hooksObj = eaglercraftXOpts.getHooks(); if(hooksObj != null) { hooks.loadHooks(hooksObj); @@ -95,6 +97,7 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter { integratedServerOpts.put("allowUpdateDL", isAllowUpdateDL); integratedServerOpts.put("allowVoiceClient", allowVoiceClient); integratedServerOpts.put("allowFNAWSkins", allowFNAWSkins); + integratedServerOpts.put("crashOnUncaughtExceptions", crashOnUncaughtExceptions); JSArrayReader serversArray = eaglercraftXOpts.getServers(); if(serversArray != null) { @@ -178,6 +181,7 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter { allowFNAWSkins = eaglercraftOpts.optBoolean("allowFNAWSkins", true); localStorageNamespace = eaglercraftOpts.optString("localStorageNamespace", EaglercraftVersion.localStorageNamespace); enableMinceraft = eaglercraftOpts.optBoolean("enableMinceraft", true); + crashOnUncaughtExceptions = eaglercraftOpts.optBoolean("crashOnUncaughtExceptions", false); JSONArray serversArray = eaglercraftOpts.optJSONArray("servers"); if(serversArray != null) { for(int i = 0, l = serversArray.length(); i < l; ++i) { @@ -366,6 +370,7 @@ public class TeaVMClientConfigAdapter implements IClientConfigAdapter { jsonObject.put("allowFNAWSkins", allowFNAWSkins); jsonObject.put("localStorageNamespace", localStorageNamespace); jsonObject.put("enableMinceraft", enableMinceraft); + jsonObject.put("crashOnUncaughtExceptions", crashOnUncaughtExceptions); JSONArray serversArr = new JSONArray(); for(int i = 0, l = defaultServers.size(); i < l; ++i) { DefaultServer srv = defaultServers.get(i); diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMClientConfigAdapterHooks.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMClientConfigAdapterHooks.java index 2c462db..ff452f8 100755 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMClientConfigAdapterHooks.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/TeaVMClientConfigAdapterHooks.java @@ -1,5 +1,6 @@ package net.lax1dude.eaglercraft.v1_8.internal.teavm; +import java.util.function.Consumer; import java.util.function.Supplier; import org.teavm.interop.Async; @@ -34,6 +35,7 @@ public class TeaVMClientConfigAdapterHooks implements IClientConfigAdapterHooks private LocalStorageSaveHook saveHook = null; private LocalStorageLoadHook loadHook = null; + private CrashReportHook crashHook = null; @JSFunctor private static interface LocalStorageSaveHook extends JSObject { @@ -65,6 +67,25 @@ public class TeaVMClientConfigAdapterHooks implements IClientConfigAdapterHooks } } + @JSFunctor + private static interface CrashReportHook extends JSObject { + void call(String crashReport, CustomMessageCB customMessageCB); + } + + @JSFunctor + private static interface CustomMessageCB extends JSObject { + void call(String msg); + } + + @Override + public void callCrashReportHook(String crashReport, Consumer customMessageCB) { + if(crashHook != null) { + callHookSafeSync("crashReportShow", () -> { + crashHook.call(crashReport, (msg) -> customMessageCB.accept(msg)); + }); + } + } + private static void callHookSafe(String identifer, Runnable hooker) { Window.setTimeout(() -> { try { @@ -76,6 +97,22 @@ public class TeaVMClientConfigAdapterHooks implements IClientConfigAdapterHooks }, 0); } + @Async + private static native void callHookSafeSync(String identifer, Runnable hooker); + + private static void callHookSafeSync(String identifer, Runnable hooker, final AsyncCallback cb) { + Window.setTimeout(() -> { + try { + hooker.run(); + }catch(Throwable t) { + logger.error("Caught exception while invoking eaglercraftXOpts \"{}\" hook!", identifer); + logger.error(t); + }finally { + cb.complete(null); + } + }, 0); + } + @Async private static native Object callHookSafeWithReturn(String identifer, Supplier hooker); @@ -96,5 +133,6 @@ public class TeaVMClientConfigAdapterHooks implements IClientConfigAdapterHooks public void loadHooks(JSEaglercraftXOptsHooks hooks) { saveHook = (LocalStorageSaveHook)hooks.getLocalStorageSavedHook(); loadHook = (LocalStorageLoadHook)hooks.getLocalStorageLoadedHook(); + crashHook = (CrashReportHook)hooks.getCrashReportHook(); } } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsHooks.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsHooks.java index e1beb7a..0e81d61 100755 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsHooks.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsHooks.java @@ -26,4 +26,7 @@ public abstract class JSEaglercraftXOptsHooks implements JSObject { @JSBody(script = "return (typeof this.localStorageLoaded === \"function\") ? this.localStorageLoaded : null;") public native JSObject getLocalStorageLoadedHook(); + @JSBody(script = "return (typeof this.crashReportShow === \"function\") ? this.crashReportShow : null;") + public native JSObject getCrashReportHook(); + } diff --git a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsRoot.java b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsRoot.java index 9088025..d70c07b 100755 --- a/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsRoot.java +++ b/src/teavm/java/net/lax1dude/eaglercraft/v1_8/internal/teavm/opts/JSEaglercraftXOptsRoot.java @@ -96,4 +96,7 @@ public abstract class JSEaglercraftXOptsRoot implements JSObject { @JSBody(params = { "def" }, script = "return (typeof this.enableMinceraft === \"boolean\") ? this.enableMinceraft : def;") public native boolean getEnableMinceraft(boolean defaultValue); + @JSBody(params = { "def" }, script = "return (typeof this.crashOnUncaughtExceptions === \"boolean\") ? this.crashOnUncaughtExceptions : def;") + public native boolean getCrashOnUncaughtExceptions(boolean defaultValue); + }