diff --git a/eaglermobile.user.js b/eaglermobile.user.js index 759777b..99e9fb8 100644 --- a/eaglermobile.user.js +++ b/eaglermobile.user.js @@ -6,17 +6,20 @@ // @downloadURL https://raw.githubusercontent.com/FlamedDogo99/EaglerMobile/main/eaglermobile.user.js // @license Apache License 2.0 - http://www.apache.org/licenses/ // @match https://eaglercraft.com/mc/* -// @version 3.0.3-alpha-5 +// @version 3.0.3-alpha-4 // @updateURL https://raw.githubusercontent.com/FlamedDogo99/EaglerMobile/main/eaglermobile.user.js // @run-at document-start +// @grant unsafeWindow // ==/UserScript== // THIS IS LAZY AND CAN EXPOSE INTERNALS // IN THE FUTURE, JUST INJECT A SCRIPT TAG -var mobileScript = document.createElement("script"); -mobileScript.id = "mobileScript"; -mobileScript.textContent = ` +try { +window = unsafeWindow ?? window +} catch { + +} function isMobile() { try { @@ -61,7 +64,8 @@ function logManager() { // better charCodeAt function String.prototype.toKeyCode = function() { - const keyCodeList = {"0": 48, "1": 49, "2": 50, "3": 51, "4": 52, "5": 53, "6": 54, "7": 55, "8": 56, "9": 57, "backspace": 8, "tab": 9, "enter": 13, "shift": 16, "ctrl": 17, "alt": 18, "pause_break": 19, "caps_lock": 20, "escape": 27, " ": 32, "page_up": 33, "page_down": 34, "end": 35, "home": 36, "left_arrow": 37, "up_arrow": 38, "right_arrow": 39, "down_arrow": 40, "insert": 45, "delete": 46, "a": 65, "b": 66, "c": 67, "d": 68, "e": 69, "f": 70, "g": 71, "h": 72, "i": 73, "j": 74, "k": 75, "l": 76, "m": 77, "n": 78, "o": 79, "p": 80, "q": 81, "r": 82, "s": 83, "t": 84, "u": 85, "v": 86, "w": 87, "x": 88, "y": 89, "z": 90, "left_window_key": 91, "right_window_key": 92, "select_key": 93, "numpad_0": 96, "numpad_1": 97, "numpad_2": 98, "numpad_3": 99, "numpad_4": 100, "numpad_5": 101, "numpad_6": 102, "numpad_7": 103, "numpad_8": 104, "numpad_9": 105, "*": 106, "+": 107, "-": 109, ".": 110, "/": 111, "f1": 112, "f2": 113, "f3": 114, "f4": 115, "f5": 116, "f6": 117, "f7": 118, "f8": 119, "f9": 120, "f10": 121, "f11": 122, "f12": 123, "num_lock": 144, "scroll_lock": 145, ";": 186, "=": 187, ",": 188, "-": 189, ".": 190, "/": 191, "\`": 192, "[": 219, "\\\": 220, "]": 221, "\\"": 222}; + const keyCodeList = {"0": 48, "1": 49, "2": 50, "3": 51, "4": 52, "5": 53, "6": 54, "7": 55, "8": 56, "9": 57, "backspace": 8, "tab": 9, "enter": 13, "shift": 16, "ctrl": 17, "alt": 18, "pause_break": 19, "caps_lock": 20, "escape": 27, " ": 32, "page_up": 33, "page_down": 34, "end": 35, "home": 36, "left_arrow": 37, "up_arrow": 38, "right_arrow": 39, "down_arrow": 40, "insert": 45, "delete": 46, "a": 65, "b": 66, "c": 67, "d": 68, "e": 69, "f": 70, "g": 71, "h": 72, "i": 73, "j": 74, "k": 75, "l": 76, "m": 77, "n": 78, "o": 79, "p": 80, "q": 81, "r": 82, "s": 83, "t": 84, "u": 85, "v": 86, "w": 87, "x": 88, "y": 89, "z": 90, "left_window_key": 91, "right_window_key": 92, "select_key": 93, "numpad_0": 96, "numpad_1": 97, "numpad_2": 98, "numpad_3": 99, "numpad_4": 100, "numpad_5": 101, "numpad_6": 102, "numpad_7": 103, "numpad_8": 104, "numpad_9": 105, "*": 106, "+": 107, "-": 109, ".": 110, "/": 111, "f1": 112, "f2": 113, "f3": 114, "f4": 115, "f5": 116, "f6": 117, "f7": 118, "f8": 119, "f9": 120, "f10": 121, "f11": 122, "f12": 123, "num_lock": 144, "scroll_lock": 145, ";": 186, "=": 187, ",": 188, "-": 189, ".": 190, "/": 191, "\u0060": 192, "[": 219, "\u005C": 220, "]": 221, "\u0022": 222}; + return keyCodeList[this]; } // Ignores keydown events that don't have the isValid parameter set to true @@ -195,6 +199,24 @@ document.createElement = function(type, ignore) { return element; } +// Lazy way to hide touch controls through CSS. +let inGameStyle = document.createElement("style"); +inGameStyle.id = "inGameStyle"; +inGameStyle.textContent = ` + .inGame { + display: none; + }`; +document.documentElement.appendChild(inGameStyle); + +let inMenuStyle = document.createElement("style"); +inMenuStyle.id = "inMenuStyle"; +inMenuStyle.textContent = ` + .inMenu { + display: none; + }`; +document.documentElement.appendChild(inMenuStyle); + + // The canvas is created by the client after it finishes unzipping and loading. When the canvas is created, this applies any necessary event listeners function waitForElm(selector) { return new Promise(resolve => { @@ -366,8 +388,8 @@ function insertCanvasElements() { document.body.appendChild(inventoryButton); let exitButton = createTouchButton("exitButton", "inMenu"); exitButton.style.cssText = "top: 0vh; margin: auto; left: 0vh; right:8vh; width: 8vh; height: 8vh;" - exitButton.addEventListener("touchstart", function(e){keyEvent("\`", "keydown")}, false); - exitButton.addEventListener("touchend", function(e){keyEvent("\`", "keyup")}, false); + exitButton.addEventListener("touchstart", function(e){keyEvent("`", "keydown")}, false); + exitButton.addEventListener("touchend", function(e){keyEvent("`", "keyup")}, false); document.body.appendChild(exitButton); // input for keyboard button let hiddenInput = document.createElement('input', true); @@ -382,7 +404,7 @@ function insertCanvasElements() { hiddenInput.addEventListener("input", function(e) { e.preventDefault(true); let inputData = e.data == null ? "delete" : e.data.slice(-1); - console.log("Received input by " + e.inputType + ": " + e.data + " -> " + inputData); + console.log(`Received input by ${e.inputType}: ${e.data} -> ${inputData}`); window.lastKey = inputData hiddenInput.value = " "; // We need a character to detect deleting @@ -471,8 +493,8 @@ function insertCanvasElements() { document.body.appendChild(sprintButton); let pauseButton = createTouchButton("pauseButton", "inGame"); pauseButton.style.cssText = "top: 0vh; margin: auto; left: 0vh; right: 32vh; width: 8vh; height: 8vh;" - pauseButton.addEventListener("touchstart", function(e){keyEvent("\`", "keydown")}, false); - pauseButton.addEventListener("touchend", function(e){keyEvent("\`", "keyup")}, false); + pauseButton.addEventListener("touchstart", function(e){keyEvent("`", "keydown")}, false); + pauseButton.addEventListener("touchend", function(e){keyEvent("`", "keyup")}, false); document.body.appendChild(pauseButton); let chatButton = createTouchButton("chatButton", "inGame"); chatButton.style.cssText = "top: 0vh; margin: auto; left: 0vh; right: 16vh; width: 8vh; height: 8vh;" @@ -521,24 +543,6 @@ function insertCanvasElements() { document.temp = new logManager(); document.temp.init(); } -` -document.documentElement.appendChild(mobileScript); -// Lazy way to hide touch controls through CSS. -let inGameStyle = document.createElement("style"); -inGameStyle.id = "inGameStyle"; -inGameStyle.textContent = ` - .inGame { - display: none; - }`; -document.documentElement.appendChild(inGameStyle); - -let inMenuStyle = document.createElement("style"); -inMenuStyle.id = "inMenuStyle"; -inMenuStyle.textContent = ` - .inMenu { - display: none; - }`; -document.documentElement.appendChild(inMenuStyle); // CSS for touch screen buttons, along with fixing iOS's issues with 100vh ignoring the naviagtion bar, and actually disabling zoom because safari ignores user-scalable=no :( let customStyle = document.createElement("style"); customStyle.textContent = `