This commit is contained in:
eaglercraft 2024-09-21 22:29:10 -07:00
commit b302c97c42
2071 changed files with 65161 additions and 8498 deletions

View file

@ -0,0 +1,514 @@
<!DOCTYPE html>
<!--
Copyright (c) 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.
-->
<html style="width:100%;height:100%;">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Eaglercraft Desktop Runtime</title>
<link type="image/png" rel="shortcut icon" id="vigg" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAR/SURBVEhLtZXZK3ZRFMYPcqXc+gv413DHxVuGIpIhkciQWaRccCNjSCkligwXSOZ5nmfv9zvn2e8+58V753sudmuvvdZ61l5r7XOc8H+GS/D19aUNkPz5+aktQH5/f//4+LBKZKuRkpUtQjCUYG5gD2T38vLy/PwsDfL9/f3Dw8PT05M0b29vnKLhCKCBT4L4gvBLBIei4//4+Hh1dUVEQutUuLu7E83FxQUGnKLBWKfQaA3S+AREVxaEOD8/Pzk50XpzcyMDcH19zdZG3N3d3dzc3Nvb01aX5pQUpQGGQJxcQpfNysoKhUIdHR1o1tbWbInYAgxIPDMzMy8vLzc3FxqOdMoRqwJK8G8ALUYIhHMiSEhIwI6CyIb0qQzC4eGhsXCc1tZWnZIEKzdQJQSXgKxfX18RCM3Z5eWlcfVAxKOjo+Pj49PTU88lTOk2NjbMsePc3t6SAfcgFdszOyMuAdeBg0CQi2lhYUHOeOLDCisN8FzcPFZXV3t7ezHY3t5GQ+6it+2xMASsKhEEWKsmRLRBBUpPvpJ/TpFKFBwKYAiITmicsbYhdHfJAltqhUCVsCQhwslmeXmZxiBQT9c0Ar9E2O3v72sYSE0N1yQArkKy0kBMXLqlZqIZHR3t6empqqqSDcBdhXEJSJ/bUc3q6uq+vj629GB9fR1WsLW1NTs7u7S0RN2locMjIyOEm5ubQ7+4uJienk4/+vv77Y1hwhLBEKhwWHitdVFfX9/Y2Gg2HuLi4owUAysrK8yCG97rh0+ApP5Q2ZycHFlPTExUVFRIBvn5+WhKSkp2dnaMKhptbW2426GgQ/rwuAQCZ1hwFayLiork9hMFBQV1dXVmE0BLS4vqw3QFB8kn4IAxoGPkYpxi4FeDmpqas7Mz4pClAgqGwD48rjY2NmacYqC0tJQ1KSlJWyE5OZkpUKkBAxZVIntAoZh04+Q48fHxPNGBgYHExMT29naj9cBodnZ2mo3jlJWVMeW2OGQck4B1amqqoaGhqamJjx2lGxwcpL0mUgR8fJhsWqJtSkoKU2SbHHUDpkhPBujd8xuQG6PJRM/Pz09PT7O1NNnZ2Tw3fgZkXVhYKCUlUhBATP+hCVyKZGky17RV0g04laayslJ6hlVeFHB4eFhKaogGd0LxtmTgE+hbhKDnPjMzgw8E3qGL2tpaBWpubjYqj2BoaEj6rq4uNATRZ0ZwCbiL6gXEzINk5vCBQJ9rMD4+rkA8QNK036uDg4Py8vLu7m680KjIBNR3zBDoWQM1g98snyB+VSoRW8C/UwR81/SvhgNj9JOTkwwVERUdRBEI0BAdLRVERkhLS8vIyEDQlrsTPTU1lVFhKxARvZgUlFLbegCf4BvIsbi4mIg4E5EogIHhiKCMtU0WUFiVy06j5fAJIDdSBDQw+PegDfBRcbOPwH4F9LuFWIIQdQNKwWqzIE0aoFUaBsw+SQuFw0uNtC9A+F4i3QNrbg3IDn+SAsHh+wYiEpeyBEMLv/cAO6KzAijxxB+Y4wisBhssJUhjEbPJf4Nw+B+JXqLW3bw+wQAAAABJRU5ErkJggg==" />
<script type="text/javascript">
"use strict";
(function() {
var webSocketURI = "${client_websocket_uri}";
if(webSocketURI === ("$" + "{client_websocket_uri}")) {
alert("Don't open this file in your browser");
window.addEventListener("load", function() {
document.body.innerHTML = "<p style=\"text-align:center;\">cunt</p>";
});
return;
}
var eaglercraftXOpts = {eaglercraftXOpts};
var cspAttrSupport = false;
var checkSupport = function() {
if(eaglercraftXOpts.forceWebViewSupport) {
cspAttrSupport = true;
return true;
}else {
var tempIFrameElement = document.createElement("iframe");
cspAttrSupport = eaglercraftXOpts.enableWebViewCSP && (typeof tempIFrameElement.csp === "string");
return (typeof tempIFrameElement.allow === "string") && (typeof tempIFrameElement.sandbox === "object");
}
};
var supported = false;
try {
supported = checkSupport();
}catch(ex) {
supported = false;
}
console.log("CSP attribute support detected as " + cspAttrSupport);
if(!supported) {
console.error("Required IFrame safety features are not supported!");
window.addEventListener("load", function() {
document.getElementById("view_loading").style.display = "none";
document.getElementById("view_safety_error").style.display = "block";
});
return;
}
var websocketInstance = null;
var hasOpened = false;
var webviewOptions = null;
var webviewResetSerial = 0;
var hasErrored = false;
var hasRegisteredOnMsgHandler = false;
var currentMessageHandler = null;
var currentIFrame = null;
var currentMessageChannelName = null;
var elements = {};
var loadElements = function() {
var jsel = document.getElementsByClassName("__jsel");
for(var i = 0; i < jsel.length; ++i) {
var el = jsel[i];
if(el.id.length > 0) {
elements[el.id] = el;
}
}
};
function loadEagtekIcon() {
var faviconSrc = document.getElementById("vigg").href;
var imgElements = document.getElementsByClassName("eagtek_icon");
for(var i = 0; i < imgElements.length; ++i) {
imgElements[i].src = faviconSrc;
}
}
function setupElementListeners() {
elements.button_allow.addEventListener("click", function() {
if(websocketInstance !== null) {
if(elements.chkbox_remember.checked) {
websocketInstance.send(JSON.stringify({$:7,perm:"ALLOW"}));
}
beginShowingDirect();
}
});
elements.button_block.addEventListener("click", function() {
if(websocketInstance !== null) {
if(elements.chkbox_remember.checked) {
websocketInstance.send(JSON.stringify({$:7,perm:"BLOCK"}));
}
beginShowingContentBlocked();
}
});
elements.button_re_evaluate.addEventListener("click", function() {
if(websocketInstance !== null) {
websocketInstance.send(JSON.stringify({$:7,perm:"NOT_SET"}));
beginShowingEnableJavaScript();
}
});
}
window.specialHack = function() {
if(websocketInstance !== null) {
websocketInstance.send(JSON.stringify({$:7,perm:"NOT_SET"}));
}
};
var handleHandshake = function(pkt) {
webviewOptions = {};
webviewOptions.contentMode = pkt.contentMode || "BLOB_BASED";
webviewOptions.fallbackTitle = pkt.fallbackTitle || "Server Info";
document.title = webviewOptions.fallbackTitle + " - Eaglercraft Desktop Runtime";
webviewOptions.scriptEnabled = !!pkt.scriptEnabled;
webviewOptions.strictCSPEnable = !!pkt.strictCSPEnable || false;
webviewOptions.serverMessageAPIEnabled = !!pkt.serverMessageAPIEnabled;
webviewOptions.url = pkt.url;
webviewOptions.blob = pkt.blob;
webviewOptions.hasApprovedJS = pkt.hasApprovedJS || "NOT_SET";
if(webviewOptions.scriptEnabled) {
if(webviewOptions.hasApprovedJS === "NOT_SET") {
beginShowingEnableJavaScript();
}else if(webviewOptions.hasApprovedJS === "ALLOW") {
beginShowingDirect();
}else if(webviewOptions.hasApprovedJS === "BLOCK") {
beginShowingContentBlocked();
}else {
setErrored("Unknown JS permission state: " + webviewOptions.hasApprovedJS);
}
}else {
beginShowingDirect();
}
};
var handleServerError = function(pkt) {
console.error("Recieved error from server: " + pkt.msg);
setErrored(pkt.msg);
};
var handleServerWebViewStrMsg = function(pkt) {
var w;
if(currentMessageChannelName !== null && currentIFrame !== null && (w = currentIFrame.contentWindow) !== null) {
w.postMessage({ver:1,channel:currentMessageChannelName,type:"string",data:pkt.msg}, "*");
}else {
console.error("Server tried to send the WebView a message, but the message channel is not open!");
}
};
var handleServerWebViewBinMsg = function(arr) {
var w;
if(currentMessageChannelName !== null && currentIFrame !== null && (w = currentIFrame.contentWindow) !== null) {
w.postMessage({ver:1,channel:currentMessageChannelName,type:"binary",data:arr}, "*");
}else {
console.error("Server tried to send the WebView a message, but the message channel is not open!");
}
};
var hideAllViews = function() {
if(currentIFrame !== null) {
++webviewResetSerial;
if(currentIFrame.parentNode) currentIFrame.parentNode.removeChild(currentIFrame);
currentIFrame = null;
}
elements.view_loading.style.display = "none";
elements.view_iframe.style.display = "none";
elements.view_allow_javascript.style.display = "none";
elements.view_javascript_blocked.style.display = "none";
elements.view_safety_error.style.display = "none";
};
var setErrored = function(str) {
if(hasErrored) return;
hasErrored = true;
hideAllViews();
elements.loading_text.style.color = "#CC0000";
elements.loading_text.innerText = str;
elements.view_loading.style.display = "block";
if(websocketInstance !== null) {
websocketInstance.close();
websocketInstance = null;
}
};
var registerMessageHandler = function() {
if(!hasRegisteredOnMsgHandler) {
hasRegisteredOnMsgHandler = true;
window.addEventListener("message", function(evt) {
if(currentIFrame !== null && currentMessageHandler !== null && evt.source === currentIFrame.contentWindow) {
currentMessageHandler(evt);
}
});
}
};
var beginShowingDirect = function() {
if(hasErrored) return;
hideAllViews();
if(!eaglercraftXOpts.forceWebViewSupport) {
try {
currentIFrame = document.createElement("iframe");
currentIFrame.allow = "";
if(currentIFrame.allow != "") throw "Failed to set allow to \"\"";
currentIFrame.referrerPolicy = "strict-origin";
var requiredSandboxTokens = [ "allow-downloads" ];
if(webviewOptions.scriptEnabled) {
requiredSandboxTokens.push("allow-scripts");
requiredSandboxTokens.push("allow-pointer-lock");
}
currentIFrame.sandbox = requiredSandboxTokens.join(" ");
for(var i = 0; i < requiredSandboxTokens.length; ++i) {
if(!currentIFrame.sandbox.contains(requiredSandboxTokens[i])) {
throw ("Failed to set sandbox attribute: " + requiredSandboxTokens[i]);
}
}
var sbox = currentIFrame.sandbox;
for(var i = 0; i < sbox.length; ++i) {
if(!requiredSandboxTokens.includes(sbox.item(i))) {
throw ("Unknown sandbox attribute detected: " + sbox.item(i));
}
}
}catch(ex) {
if(typeof ex === "string") {
console.error("Caught safety error: " + ex);
beginShowingSafetyError();
}else {webviewOptions
console.error("Fatal error while creating iframe!");
console.error(ex);
setErrored("Fatal error while creating iframe!");
}
return;
}
}else {
currentIFrame = document.createElement("iframe");
try {
currentIFrame.allow = "";
}catch(ex) {
}
try {
currentIFrame.referrerPolicy = "strict-origin";
}catch(ex) {
}
try {
var sandboxTokens = [ "allow-downloads", "allow-same-origin" ];
if(webviewOptions.scriptEnabled) {
sandboxTokens.push("allow-scripts");
sandboxTokens.push("allow-pointer-lock");
}
currentIFrame.sandbox = sandboxTokens.join(" ");
}catch(ex) {
}
}
currentIFrame.credentialless = true;
currentIFrame.loading = "lazy";
var cspWarn = false;
if(webviewOptions.contentMode === "BLOB_BASED") {
if(cspAttrSupport && eaglercraftXOpts.enableWebViewCSP) {
if(typeof currentIFrame.csp === "string") {
var csp = "default-src 'none';";
var protos = (webviewOptions.strictCSPEnable ? "" : " http: https:");
if(webviewOptions.scriptEnabled) {
csp += (" script-src 'unsafe-eval' 'unsafe-inline' data: blob:" + protos + ";");
csp += (" style-src 'unsafe-eval' 'unsafe-inline' data: blob:" + protos + ";");
csp += (" img-src data: blob:" + protos + ";");
csp += (" font-src data: blob:" + protos + ";");
csp += (" child-src data: blob:" + protos + ";");
csp += (" frame-src data: blob:;");
csp += (" media-src data: mediastream: blob:" + protos + ";");
csp += (" connect-src data: blob:" + protos + ";");
csp += (" worker-src data: blob:" + protos + ";");
}else {
csp += (" style-src data: 'unsafe-inline'" + protos + ";");
csp += (" img-src data:" + protos + ";");
csp += (" font-src data:" + protos + ";");
csp += (" media-src data:" + protos + ";");
}
currentIFrame.csp = csp;
}else {
console.error("This browser does not support CSP attribute on iframes! (try Chrome)");
cspWarn = true;
}
}else {
cspWarn = true;
}
if(cspWarn && webviewOptions.strictCSPEnable) {
console.error("Strict CSP was requested for this webview, but that feature is not available!");
}
}else {
cspWarn = true;
}
currentIFrame.style.border = "none";
currentIFrame.style.backgroundColor = "white";
currentIFrame.style.width = "100%";
currentIFrame.style.height = "100%";
elements.view_iframe.appendChild(currentIFrame);
elements.view_iframe.style.display = "block";
if(webviewOptions.contentMode === "BLOB_BASED") {
currentIFrame.srcdoc = webviewOptions.blob;
}else {
currentIFrame.src = webviewOptions.url;
}
currentIFrame.focus();
if(webviewOptions.scriptEnabled && webviewOptions.serverMessageAPIEnabled) {
var resetSer = webviewResetSerial;
var curIFrame = currentIFrame;
registerMessageHandler();
currentMessageHandler = function(evt) {
if(resetSer === webviewResetSerial && curIFrame === currentIFrame) {
handleMessageRawFromFrame(evt.data);
}
};
}
};
var handleMessageRawFromFrame = function(obj) {
if(hasErrored) return;
if((typeof obj === "object") && (obj.ver === 1) && ((typeof obj.channel === "string") && obj.channel.length > 0)) {
if(typeof obj.open === "boolean") {
sendMessageEnToServer(obj.open, obj.channel);
return;
}else if(typeof obj.data === "string") {
sendMessageToServerStr(obj.channel, obj.data);
return;
}else if(obj.data instanceof ArrayBuffer) {
sendMessageToServerBin(obj.channel, obj.data);
return;
}
}
console.error("WebView sent an invalid message!");
};
var sendMessageEnToServer = function(messageChannelOpen, channelName) {
if(channelName.length > 255) {
console.error("WebView tried to " + (messageChannelOpen ? "open" : "close") + " a channel, but channel name is too long, max is 255 characters!");
return;
}
if(messageChannelOpen && currentMessageChannelName !== null) {
console.error("WebView tried to open channel, but a channel is already open!");
sendMessageEnToServer(false, currentMessageChannelName);
}
if(!messageChannelOpen && currentMessageChannelName !== null && currentMessageChannelName === channelName) {
console.error("WebView tried to close the wrong channel!");
}
if(!messageChannelOpen && currentMessageChannelName === null) {
console.error("WebView tried to close channel, but the channel is not open!");
return;
}
if(websocketInstance !== null) {
if(messageChannelOpen) {
websocketInstance.send(JSON.stringify({$:3,channel:channelName}));
console.log("WebView opened message channel to server: \"" + channelName + "\"");
currentMessageChannelName = channelName;
}else {
websocketInstance.send(JSON.stringify({$:4}));
console.log("WebView closed message channel to server: \"" + currentMessageChannelName + "\"");
currentMessageChannelName = null;
}
}else {
console.error("WebView tried to send a message, but no websocket is open!");
}
};
var sendMessageToServerStr = function(channelName, msg) {
if(channelName.length > 255) {
console.error("WebView tried to send a message packet, but channel name is too long, max is 255 characters!");
return;
}
if(channelName !== currentMessageChannelName) {
console.error("WebView tried to send a message packet, but the channel is not open!");
return;
}
if(websocketInstance !== null) {
websocketInstance.send(JSON.stringify({$:5,msg:msg}));
}else {
console.error("WebView tried to send a message, but no callback for sending packets is set!");
}
};
var sendMessageToServerBin = function(channelName, msg) {
if(channelName.length > 255) {
console.error("WebView tried to send a message packet, but channel name is too long, max is 255 characters!");
return;
}
if(channelName !== currentMessageChannelName) {
console.error("WebView tried to send a message packet, but the channel is not open!");
return;
}
if(websocketInstance !== null) {
websocketInstance.send(msg);
}else {
console.error("WebView tried to send a message, but no callback for sending packets is set!");
}
};
var beginShowingEnableJavaScript = function() {
if(hasErrored) return;
hideAllViews();
if(webviewOptions.contentMode !== "BLOB_BASED") {
elements.strict_csp_value.innerText = "Impossible";
elements.strict_csp_value.style.color = "red";
}else if(!cspAttrSupport || !eaglercraftXOpts.enableWebViewCSP) {
elements.strict_csp_value.innerText = "Unsupported";
elements.strict_csp_value.style.color = "red";
}else if(webviewOptions.strictCSPEnable) {
elements.strict_csp_value.innerText = "Enabled";
elements.strict_csp_value.style.color = "green";
}else {
elements.strict_csp_value.innerText = "Disabled";
elements.strict_csp_value.style.color = "red";
}
if(webviewOptions.serverMessageAPIEnabled) {
elements.message_api_value.innerText = "Enabled";
elements.message_api_value.style.color = "red";
}else {
elements.message_api_value.innerText = "Disabled";
elements.message_api_value.style.color = "green";
}
elements.view_allow_javascript.style.display = "block";
};
var beginShowingContentBlocked = function() {
if(hasErrored) return;
hideAllViews();
elements.view_javascript_blocked.style.display = "block";
};
var beginShowingSafetyError = function() {
if(hasErrored) return;
hasErrored = true;
hideAllViews();
elements.view_safety_error.style.display = "block";
};
window.addEventListener("load", function() {
loadElements();
loadEagtekIcon();
setupElementListeners();
websocketInstance = new WebSocket(webSocketURI);
websocketInstance.binaryType = "arraybuffer";
websocketInstance.addEventListener("open", function(evt) {
console.log("Connection to server opened");
hasOpened = true;
websocketInstance.send(JSON.stringify({$:0,cspSupport:cspAttrSupport}));
});
websocketInstance.addEventListener("message", function(evt) {
try {
if(typeof evt.data === "string") {
var pkt = JSON.parse(evt.data);
if(typeof pkt.$ !== "number") {
throw "Packet type is invalid";
}
if(webviewOptions === null) {
if(pkt.$ === 1) {
handleHandshake(pkt);
}else if(pkt.$ === 2) {
handleServerError(pkt);
}else {
throw "Unknown packet type " + pkt.$ + " for state handshake!"
}
}else {
if(pkt.$ === 2) {
handleServerError(pkt);
}else if(pkt.$ === 6) {
handleServerWebViewStrMsg(pkt);
}else {
throw "Unknown packet type " + pkt.$ + " for state open!"
}
}
}else {
handleServerWebViewBinMsg(evt.data);
}
}catch(ex) {
console.error("Caught exception processing message from server!");
console.error(ex);
}
});
websocketInstance.addEventListener("close", function(evt) {
websocketInstance = null;
setErrored("Connection to EaglercraftX client lost!");
});
websocketInstance.addEventListener("error", function(evt) {
console.error("WebSocket error: " + evt);
});
});
})();
</script>
</head>
<body style="margin:0px;width:100%;height:100%;overflow:hidden;font-family:sans-serif;user-select:none;">
<div id="view_loading" style="width:100%;height:100%;display:block;" class="__jsel">
<div style="padding-top:13vh;">
<h2 style="text-align:center;" id="loading_text" class="__jsel">Please Wait...</h2>
</div>
</div>
<div id="view_iframe" style="width:100%;height:100%;display:none;" class="__jsel">
</div>
<div id="view_allow_javascript" style="width:100%;height:100%;display:none;" class="__jsel">
<div style="padding-top:13vh;">
<div style="margin:auto;max-width:450px;border:6px double black;text-align:center;padding:20px;">
<h2><img width="32" height="32" style="vertical-align:middle;" class="eagtek_icon">&emsp;Allow JavaScript</h2>
<p style="font-family:monospace;text-decoration:underline;word-wrap:break-word;" id="target_url"></p>
<h4 style="line-height:1.4em;">Strict CSP: <span id="strict_csp_value" class="__jsel"></span>&ensp;|&ensp;Message API: <span id="message_api_value" class="__jsel"></span></h4>
<p><input id="chkbox_remember" type="checkbox" class="__jsel" checked> Remember my choice</p>
<p><button style="font-size:1.5em;" id="button_allow" class="__jsel">Allow</button>&emsp;<button style="font-size:1.5em;" id="button_block" class="__jsel">Block</button></p>
</div>
</div>
</div>
<div id="view_javascript_blocked" style="width:100%;height:100%;display:none;" class="__jsel">
<div style="padding-top:13vh;">
<h1 style="text-align:center;"><img width="48" height="48" style="vertical-align:middle;" class="eagtek_icon">&emsp;Content Blocked</h1>
<h4 style="text-align:center;">You chose to block JavaScript execution for this embed</h4>
<p style="text-align:center;"><button style="font-size:1.0em;" id="button_re_evaluate" class="__jsel">Re-evaluate</button></p>
</div>
</div>
<div id="view_safety_error" style="width:100%;height:100%;display:none;" class="__jsel">
<div style="padding-top:13vh;">
<h1 style="text-align:center;"><img width="48" height="48" style="vertical-align:middle;" class="eagtek_icon">&emsp;IFrame Safety Error</h1>
<h4 style="text-align:center;">The content cannot be displayed safely!</h4>
<h4 style="text-align:center;">Check console for more details</h4>
</div>
</div>
</body>
</html>

View file

@ -1,6 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src_main_java"/>
<classpathentry kind="src" path="src_game_java"/>
<classpathentry kind="src" path="src_protocol-game_java"/>
<classpathentry kind="src" path="src_protocol-relay_java"/>
<classpathentry kind="src" path="src_lwjgl_java"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>

View file

@ -15,15 +15,30 @@
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
<linkedResources>
<link>
<name>src_lwjgl_java</name>
<type>2</type>
<locationURI>PARENT-2-PROJECT_LOC../src/lwjgl/java</locationURI>
</link>
<link>
<name>src_main_java</name>
<type>2</type>
<locationURI>PARENT-2-PROJECT_LOC../src/main/java</locationURI>
</link>
<link>
<name>src_game_java</name>
<type>2</type>
<locationURI>PARENT-2-PROJECT_LOC../src/game/java</locationURI>
</link>
<link>
<name>src_protocol-game_java</name>
<type>2</type>
<locationURI>PARENT-2-PROJECT_LOC../src/protocol-game/java</locationURI>
</link>
<link>
<name>src_protocol-relay_java</name>
<type>2</type>
<locationURI>PARENT-2-PROJECT_LOC../src/protocol-relay/java</locationURI>
</link>
<link>
<name>src_lwjgl_java</name>
<type>2</type>
<locationURI>PARENT-2-PROJECT_LOC../src/lwjgl/java</locationURI>
</link>
</linkedResources>
</projectDescription>

File diff suppressed because one or more lines are too long

View file

@ -3,24 +3,26 @@
~~~~~~~~~~~~~~~~~~~~~~~
lax1dude:
- Creator of Eaglercraft
- Ported the Minecraft 1.8 src to TeaVM
- Wrote HW accelerated OpenGL 1.3 emulator
- Wrote the default shader pack
- Made the integrated PBR resource pack
- Added touch and mobile device support
- Wrote all desktop emulation code
- Wrote EaglercraftXBungee
- Wrote EaglercraftXVelocity
- Wrote WebRTC relay server
- Wrote voice chat server
- Wrote the patch and build system
ayunami2000:
- Many bug fixes
- WebRTC LAN worlds
- WebRTC voice chat
- Worked on touch support
- Made velocity plugin work
- Added resource packs
- Added screen recording
@ -410,7 +412,7 @@
Project Author: The Legion of the Bouncy Castle
Project URL: https://www.bouncycastle.org/java.html
Used For: MD5, SHA-1, SHA-256 implementations
Used For: MD5, SHA-1, SHA-256, and AES implementations
* Copyright (c) 2000-2021 The Legion of the Bouncy Castle Inc. (https://www.bouncycastle.org)
*
@ -668,23 +670,23 @@
Project Author: ymnk, JCraft Inc.
Project URL: http://www.jcraft.com/jorbis/
Used For: Audio in desktop runtime
Used For: Audio in desktop runtime and browsers that don't support OGG
* JOrbis
* Copyright (C) 2000 ymnk, JCraft,Inc.
*
*
* Written by: 2000 ymnk<ymnk@jcraft.com>
*
* Many thanks to
* Monty <monty@xiph.org> and
* The XIPHOPHORUS Company http://www.xiph.org/ .
* JOrbis has been based on their awesome works, Vorbis codec.
*
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public License
* as published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
@ -696,6 +698,44 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Project Name: NanoHTTPD
Project Author: NanoHTTPD
Project URL: http://nanohttpd.org/
Used For: HTTP server in the desktop runtime
* Copyright (c) 2012-2013 by Paul S. Hawke,
* 2001,2005-2013 by Jarno Elonen,
* 2010 by Konstantinos Togias All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* Neither the name of the NanoHttpd organization nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* 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.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Project Name: sqlite-jdbc
Project Author: Taro L. Saito (xerial)
Project URL: https://github.com/xerial/sqlite-jdbc

Binary file not shown.

View file

@ -0,0 +1,88 @@
<style type="text/css" style="display:none !important;">{% embed eval `boot_menu_style.css` %}</style>
<div class="_eaglercraftX_boot_menu {% global `root_class_gen` %}">
<div class="_eaglercraftX_boot_menu_inner">
<div class="_eaglercraftX_boot_menu_header">
<p class="_eaglercraftX_boot_menu_header_title">EaglercraftX 1.8 Boot Manager</p>
</div>
<div class="_eaglercraftX_boot_menu_content">
<div class="_eaglercraftX_boot_menu_content_inner">
<div class="_eaglercraftX_boot_menu_content_view_selection" style="display:none;">
<div class="_eaglercraftX_boot_menu_content_selection"></div>
</div>
<div class="_eaglercraftX_boot_menu_content_view_editor" style="display:none;">
<div class="_eaglercraftX_boot_menu_launch_conf">
<div class="_eaglercraftX_boot_menu_launch_conf_inner">
<div class="_eaglercraftX_boot_menu_launch_conf_item_wide" style="padding: 20px;">
<p>Profile Name: <input type="text" class="_eaglercraftX_boot_menu_launch_conf_val_profile_name"></p>
</div>
<div class="_eaglercraftX_boot_menu_launch_conf_item_wide">
<div class="_eaglercraftX_boot_menu_launch_conf_item _eaglercraftX_boot_menu_launch_conf_data_format">
<p>Data Format: <span class="_eaglercraftX_boot_menu_launch_conf_val_data_format">Standard Offline</span></p>
</div>
<div class="_eaglercraftX_boot_menu_launch_conf_item _eaglercraftX_boot_menu_launch_conf_launch_type">
<p>Launch Type:
<select class="_eaglercraftX_boot_menu_launch_conf_val_launch_type">
<option class="_eaglercraftX_boot_menu_launch_conf_val_launch_type_opt" value="EAGLERX_SIGNED_V1">EaglercraftX Signed Client</option>
<option class="_eaglercraftX_boot_menu_launch_conf_val_launch_type_opt" value="EAGLERX_V1">EaglercraftX Standard Offline</option>
<option class="_eaglercraftX_boot_menu_launch_conf_val_launch_type_opt" value="EAGLER_1_5_V2">Eaglercraft 1.5 (post-22w34a)</option>
<option class="_eaglercraftX_boot_menu_launch_conf_val_launch_type_opt" value="EAGLER_1_5_V1">Eaglercraft 1.5 (pre-22w34a)</option>
<option class="_eaglercraftX_boot_menu_launch_conf_val_launch_type_opt" value="EAGLER_BETA_V1">Eaglercraft Beta 1.3</option>
<option class="_eaglercraftX_boot_menu_launch_conf_val_launch_type_opt" value="PEYTON_V1">PeytonPlayz585 Indev</option>
<option class="_eaglercraftX_boot_menu_launch_conf_val_launch_type_opt" value="PEYTON_V2">PeytonPlayz585 Alpha/Beta</option>
<option class="_eaglercraftX_boot_menu_launch_conf_val_launch_type_opt" value="STANDARD_OFFLINE_V1">Standard Offline</option>
<option class="_eaglercraftX_boot_menu_launch_conf_val_launch_type_opt" value="IFRAME_SANDBOX_V1">IFrame HTML File</option>
</select>
</p>
</div>
<div class="_eaglercraftX_boot_menu_launch_conf_item _eaglercraftX_boot_menu_launch_conf_join_server" style="display:none;">
<p>Join Server: <input type="text" class="_eaglercraftX_boot_menu_launch_conf_val_join_server"></p>
</div>
<div class="_eaglercraftX_boot_menu_launch_conf_item _eaglercraftX_boot_menu_launch_conf_opts_name" style="display:none;">
<p>Opt Variable Name: <input type="text" class="_eaglercraftX_boot_menu_launch_conf_val_opts_name"></p>
</div>
<div class="_eaglercraftX_boot_menu_launch_conf_item _eaglercraftX_boot_menu_launch_conf_assetsURI" style="display:none;">
<p>Assets URI Opt: <input type="text" class="_eaglercraftX_boot_menu_launch_conf_val_assetsURI"></p>
</div>
<div class="_eaglercraftX_boot_menu_launch_conf_item _eaglercraftX_boot_menu_launch_conf_container" style="display:none;">
<p>Container ID Opt: <input type="text" class="_eaglercraftX_boot_menu_launch_conf_val_container"></p>
</div>
<div class="_eaglercraftX_boot_menu_launch_conf_item _eaglercraftX_boot_menu_launch_conf_main_func" style="display:none;">
<p>Main function: <input type="text" class="_eaglercraftX_boot_menu_launch_conf_val_main_func"></p>
</div>
<div class="_eaglercraftX_boot_menu_launch_conf_item _eaglercraftX_boot_menu_launch_conf_clear_cookies">
<p>Clear Cookies Before Launch: <input type="checkbox" class="_eaglercraftX_boot_menu_launch_conf_val_clear_cookies"></p>
</div>
</div>
</div>
</div>
<textarea class="_eaglercraftX_boot_menu_launch_opt_editor" spellcheck="false"></textarea>
</div>
<div class="_eaglercraftX_boot_menu_popup" style="display:none;">
<div class="_eaglercraftX_boot_menu_popup_inner">
<div class="_eaglercraftX_boot_menu_popup_view_confirm" style="display:none;">
<p class="_eaglercraftX_boot_menu_popup_confirm_title"></p>
<p class="_eaglercraftX_boot_menu_popup_confirm_opts"></p>
</div>
<div class="_eaglercraftX_boot_menu_popup_view_selection" style="display:none;">
<p class="_eaglercraftX_boot_menu_popup_selection_title"></p>
<div class="_eaglercraftX_boot_menu_popup_selection"></div>
</div>
<div class="_eaglercraftX_boot_menu_popup_view_input" style="display:none;">
<p class="_eaglercraftX_boot_menu_popup_input_title"></p>
<p class="_eaglercraftX_boot_menu_popup_input_val_container"><input class="_eaglercraftX_boot_menu_popup_input_val" type="text"></p>
<p class="_eaglercraftX_boot_menu_popup_input_opts"><span class="_eaglercraftX_boot_menu_popup_input_opt _eaglercraftX_boot_menu_popup_input_opt_cancel">&nbsp;&lt;&nbsp;Cancel&nbsp;&gt;&nbsp;</span> &emsp; <span class="_eaglercraftX_boot_menu_popup_input_opt _eaglercraftX_boot_menu_popup_input_opt_done _eaglercraftX_boot_menu_popup_input_opt_selected">&nbsp;&lt;&nbsp;Done&nbsp;&gt;&nbsp;</span></p>
</div>
</div>
</div>
</div>
</div>
<div class="_eaglercraftX_boot_menu_footer">
<p class="_eaglercraftX_boot_menu_footer_text _eaglercraftX_boot_menu_footer_text_boot_select" style="display:none;">Use the &uarr; and &darr; keys to select which entry is highlighted.<br>Press enter to boot the selected client, `e' to edit eaglercraft opts before booting, or ESC to exit and boot normally.</p>
<p class="_eaglercraftX_boot_menu_footer_text _eaglercraftX_boot_menu_footer_text_boot_select_count" style="display:none;">Use the &uarr; and &darr; keys to select which entry is highlighted.<br>Press enter to boot the selected client, `e' to edit eaglercraft opts before booting.<br>The first option will be executed in <span class="_eaglercraftX_boot_menu_footer_text_boot_countdown">0</span> seconds. Press any key to cancel.</p>
<p class="_eaglercraftX_boot_menu_footer_text _eaglercraftX_boot_menu_footer_text_menu_select" style="display:none;">Use the &uarr; and &darr; keys to select which entry is highlighted.<br>Press enter to select, or ESC return to the previous screen.</p>
<p class="_eaglercraftX_boot_menu_footer_text _eaglercraftX_boot_menu_footer_text_opts_editor" style="display:none;">Press CTRL+SHIFT to open editor menu.<br>Press CTRL+ENTER to boot, or ESC return to the previous menu.</p>
<p class="_eaglercraftX_boot_menu_footer_text _eaglercraftX_boot_menu_footer_text_opts_editor_alt" style="display:none;">Press CTRL+SHIFT to open editor menu.<br>Press CTRL+ENTER to save, or ESC return to the previous menu.</p>
<p class="_eaglercraftX_boot_menu_footer_text _eaglercraftX_boot_menu_footer_text_boot_order" style="display:none;">Use the &uarr; and &darr; keys to select which entry is highlighted.<br>Press CTRL+&uarr; and CTRL+&darr; to adjust item order, or ESC to cancel.</p>
</div>
</div>
</div>

View file

@ -0,0 +1,328 @@
@font-face {
font-family: "{% global `root_class_gen` %}_font0";
src: url("data:font/woff;base64,{% embed base64 `web_cl_eagleiii_8x16.woff` %}") format("woff");
}
.{% global `root_class_gen` %} {
font: 24px "{% global `root_class_gen` %}_font0";
color: #CCCCCC;
background-color: #000000;
user-select: none;
width: 100%;
height: 100%;
overflow-y: auto;
}
.{% global `root_class_gen` %}::-moz-selection {
color: #000000;
background-color: #CCCCCC;
}
.{% global `root_class_gen` %}::selection {
color: #000000;
background-color: #CCCCCC;
}
.{% global `root_class_gen` %}::-webkit-scrollbar {
width: 12px;
}
.{% global `root_class_gen` %} ::-webkit-scrollbar {
width: 12px;
}
.{% global `root_class_gen` %}::-webkit-scrollbar-track, .{% global `root_class_gen` %} ::-webkit-scrollbar-track {
background-color: #000000;
}
.{% global `root_class_gen` %}::-webkit-scrollbar-thumb, .{% global `root_class_gen` %} ::-webkit-scrollbar-thumb {
background-color: #CCCCCC;
}
.{% global `root_class_gen` %}::-webkit-scrollbar-button, .{% global `root_class_gen` %} ::-webkit-scrollbar-button {
display: none;
}
.{% global `root_class_gen` %}::-webkit-scrollbar-corner, .{% global `root_class_gen` %} ::-webkit-scrollbar-corner {
background-color: #CCCCCC;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_inner {
width: 100%;
height: 100%;
min-height: 480px;
display: flex;
flex-flow: column;
}
.{% global `root_class_gen` %} p {
margin-block-start: 0px;
margin-block-end: 0px;
-webkit-margin-before:0px;
-webkit-margin-after:0px;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_header {
flex: 0 1 auto;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_header_title {
text-align: center;
padding: 32px 0px 0px 0px;
color: #CCCCCC;
white-space: pre-wrap;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content {
flex: 1 1 auto;
position: relative;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_inner {
position: absolute;
top: 32px;
left: 32px;
bottom: 32px;
right: 32px;
border: 2px solid white;
z-index: 1;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup {
position: absolute;
top: 128px;
left: 64px;
bottom: 64px;
right: 64px;
z-index: 10;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_inner {
width: 50%;
min-width: min(calc(100% - 20px), 400px);
max-width: 800px;
max-height: calc(100% - 20px);
margin-left: auto;
margin-right: auto;
border: 2px solid white;
background-color: #000000;
padding: 10px;
overflow-y: auto;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_confirm_title {
text-align: center;
padding: 16px;
color: #CCCCCC;
white-space: pre-wrap;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_confirm_opts {
text-align: center;
padding: 16px;
color: #CCCCCC;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_confirm_opt {
cursor: pointer;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_confirm_opt_selected {
color: #000000;
background-color: #CCCCCC;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_confirm_opt_disabled {
color: #888888;
cursor: default;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_selection_title {
text-align: center;
padding: 16px;
color: #CCCCCC;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_selection {
width: calc(100% - 8px);
padding: 8px 4px;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_title {
text-align: center;
padding: 16px;
color: #CCCCCC;
white-space: pre-wrap;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_opts {
text-align: center;
padding: 16px;
color: #CCCCCC;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_opt {
cursor: pointer;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_opt_selected {
color: #000000;
background-color: #CCCCCC;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_opt_disabled {
color: #888888;
cursor: default;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_val_container {
text-align: center;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_val {
min-width: 15em;
width: calc(90% - 50px);
font: 24px "{% global `root_class_gen` %}_font0";
outline: none;
resize: none;
background-color: #000000;
color: #CCCCCC;
border: 2px solid white;
padding: 2px 4px;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_val:disabled {
color: #888888;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_val::-moz-selection {
color: #000000;
background-color: #CCCCCC;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_val::selection {
color: #000000;
background-color: #CCCCCC;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_view_selection {
width: 100%;
height: 100%;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_selection {
width: calc(100% - 8px);
height: calc(100% - 16px);
padding: 8px 4px;
overflow-y: auto;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_item {
width: 100%;
overflow-y: auto;
cursor: pointer;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_item::before {
content: "\00a0";
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_item_selected {
color: #000000;
background-color: #CCCCCC;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_item_selected::before {
content: "*";
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_item_disabled {
color: #888888;
cursor: default;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_view_editor {
width: 100%;
height: 100%;
position: relative;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf {
position: absolute;
top: 0px;
left: 0px;
right: 0px;
height: calc(25% - 20px);
padding: 10px;
overflow-x: hidden;
overflow-y: auto;
color: #CCCCCC;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item_wide {
width: 100%;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item {
display: inline-block;
padding: 20px;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item input[type=text] {
min-width: 15em;
font: 24px "{% global `root_class_gen` %}_font0";
outline: none;
resize: none;
background-color: #000000;
color: #CCCCCC;
border: 2px solid white;
padding: 2px 4px;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item input[type=text]:disabled {
color: #888888;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item input[type=checkbox] {
zoom: 2;
padding: 2px 4px;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item select {
font: 24px "{% global `root_class_gen` %}_font0";
outline: none;
resize: none;
background-color: #000000;
color: #CCCCCC;
border: 2px solid white;
padding: 2px 4px;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item option:checked {
background-color: #CCCCCC;
color: #000000;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item option:disabled {
color: #888888;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item input::-moz-selection {
color: #000000;
background-color: #CCCCCC;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item input::selection {
color: #000000;
background-color: #CCCCCC;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_val_profile_name {
width: calc(100% - 10em);
font: 24px "{% global `root_class_gen` %}_font0";
outline: none;
resize: none;
background-color: #000000;
color: #CCCCCC;
border: 2px solid white;
padding: 2px 4px;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_val_profile_name::-moz-selection {
color: #000000;
background-color: #CCCCCC;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_val_profile_name::selection {
color: #000000;
background-color: #CCCCCC;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_val_profile_name:disabled {
color: #888888;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_val_data_format {
padding: 2px 4px;
border: 2px solid white;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_opt_editor {
position: absolute;
bottom: 0px;
left: 0px;
right: 0px;
height: calc(75% - 22px);
width: calc(100% - 20px);
margin: 0px;
padding: 10px;
font: 24px "{% global `root_class_gen` %}_font0";
border: none;
border-top: 2px solid white;
outline: none;
resize: none;
background-color: #000000;
color: #CCCCCC;
overflow: auto;
tab-size: 4;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_opt_editor:disabled {
color: #888888;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_opt_editor::-moz-selection {
color: #000000;
background-color: #CCCCCC;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_opt_editor::selection {
color: #000000;
background-color: #CCCCCC;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_footer {
flex: 0 1 auto;
}
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_footer_text {
text-align: left;
padding: 0px 0px 32px 64px;
color: #CCCCCC;
}

View file

@ -0,0 +1,4 @@
{
"client_launch_type": "EAGLERX_V1",
"clear_cookies_before_launch": false
}

View file

@ -0,0 +1,4 @@
{
"client_launch_type": "EAGLERX_SIGNED_V1",
"clear_cookies_before_launch": false
}

View file

@ -0,0 +1,4 @@
{
"client_launch_type": "EAGLER_1_5_V2",
"clear_cookies_before_launch": false
}

View file

@ -0,0 +1,5 @@
{
"client_launch_type": "EAGLER_1_5_V1",
"join_server": "",
"clear_cookies_before_launch": false
}

View file

@ -0,0 +1,5 @@
{
"client_launch_type": "EAGLER_BETA_V1",
"join_server": "",
"clear_cookies_before_launch": false
}

View file

@ -0,0 +1,4 @@
{
"client_launch_type": "PEYTON_V2",
"clear_cookies_before_launch": false
}

View file

@ -0,0 +1,4 @@
{
"client_launch_type": "PEYTON_V2",
"clear_cookies_before_launch": false
}

View file

@ -0,0 +1,4 @@
{
"client_launch_type": "PEYTON_V1",
"clear_cookies_before_launch": false
}

View file

@ -0,0 +1,8 @@
{
"client_launch_type": "STANDARD_OFFLINE_V1",
"client_launch_opts_var": "eaglercraftXOpts",
"client_launch_opts_assetsURI_var": "assetsURI",
"client_launch_opts_container_var": "container",
"client_launch_main_func": "main",
"clear_cookies_before_launch": false
}

View file

@ -0,0 +1,192 @@
{
"defaults": {
"EAGLERX_SIGNED_V1": {
"conf": "conf_template_eaglercraftX_1_8_signed.json",
"opts": "opts_template_eaglercraftX_1_8.txt"
},
"EAGLERX_V1": {
"conf": "conf_template_eaglercraftX_1_8.json",
"opts": "opts_template_eaglercraftX_1_8.txt"
},
"EAGLER_BETA_V1": {
"conf": "conf_template_eaglercraft_b1_3.json",
"opts": null
},
"EAGLER_1_5_V1": {
"conf": "conf_template_eaglercraft_1_5_legacy.json",
"opts": "opts_template_eaglercraft_1_5_legacy.txt"
},
"EAGLER_1_5_V2": {
"conf": "conf_template_eaglercraft_1_5.json",
"opts": "opts_template_eaglercraft_1_5.txt"
},
"PEYTON_V1": {
"conf": "conf_template_peytonplayz585_indev.json",
"opts": null
},
"PEYTON_V2": {
"conf": "conf_template_peytonplayz585_a1_2_6.json",
"opts": "opts_template_peytonplayz585_a1_2_6.txt"
},
"STANDARD_OFFLINE_V1": {
"conf": "conf_template_standard_offline.json",
"opts": null
}
},
"templates": [
{
"name": "EaglercraftX 1.8",
"conf": "conf_template_eaglercraftX_1_8.json",
"opts": "opts_template_eaglercraftX_1_8.txt",
"allow": [
"EAGLER_STANDARD_OFFLINE"
],
"parseTypes": [
"EAGLERCRAFTX_1_8_OFFLINE"
]
},
{
"name": "EaglercraftX 1.8 Demo",
"conf": "conf_template_eaglercraftX_1_8.json",
"opts": "opts_template_eaglercraftX_1_8_demo.txt",
"allow": [
"EAGLER_STANDARD_OFFLINE"
],
"parseTypes": [
"EAGLERCRAFTX_1_8_OFFLINE"
]
},
{
"name": "EaglercraftX 1.8 HTML5 Cursors",
"conf": "conf_template_eaglercraftX_1_8.json",
"opts": "opts_template_eaglercraftX_1_8_html5Cursors.txt",
"allow": [
"EAGLER_STANDARD_OFFLINE"
],
"parseTypes": [
"EAGLERCRAFTX_1_8_OFFLINE"
]
},
{
"name": "EaglercraftX 1.8 Signed",
"conf": "conf_template_eaglercraftX_1_8_signed.json",
"opts": "opts_template_eaglercraftX_1_8.txt",
"allow": [
"EAGLER_SIGNED_OFFLINE"
],
"parseTypes": [
"EAGLERCRAFTX_1_8_SIGNED"
]
},
{
"name": "EaglercraftX 1.8 Signed Demo",
"conf": "conf_template_eaglercraftX_1_8_signed.json",
"opts": "opts_template_eaglercraftX_1_8_demo.txt",
"allow": [
"EAGLER_SIGNED_OFFLINE"
],
"parseTypes": [
"EAGLERCRAFTX_1_8_SIGNED"
]
},
{
"name": "EaglercraftX 1.8 Signed HTML5 Cursors",
"conf": "conf_template_eaglercraftX_1_8_signed.json",
"opts": "opts_template_eaglercraftX_1_8_html5Cursors.txt",
"allow": [
"EAGLER_SIGNED_OFFLINE"
],
"parseTypes": [
"EAGLERCRAFTX_1_8_SIGNED"
]
},
{
"name": "Eaglercraft 1.5.2 (post-22w34a)",
"conf": "conf_template_eaglercraft_1_5.json",
"opts": "opts_template_eaglercraft_1_5.txt",
"allow": [
"EAGLER_STANDARD_1_5_OFFLINE"
],
"parseTypes": [
"EAGLERCRAFT_1_5_NEW_OFFLINE"
]
},
{
"name": "Eaglercraft 1.5.2 Live Music (post-22w34a)",
"conf": "conf_template_eaglercraft_1_5.json",
"opts": "opts_template_eaglercraft_1_5_livestream.txt",
"allow": [
"EAGLER_STANDARD_1_5_OFFLINE"
],
"parseTypes": [
"EAGLERCRAFT_1_5_NEW_OFFLINE"
]
},
{
"name": "Eaglercraft 1.5.2 (pre-22w34a)",
"conf": "conf_template_eaglercraft_1_5_legacy.json",
"opts": "opts_template_eaglercraft_1_5_legacy.txt",
"allow": [
"EAGLER_STANDARD_OFFLINE"
],
"parseTypes": [
"EAGLERCRAFT_1_5_OLD_OFFLINE"
]
},
{
"name": "Eaglercraft Beta 1.3",
"conf": "conf_template_eaglercraft_b1_3.json",
"opts": null,
"allow": [
"EAGLER_STANDARD_OFFLINE"
],
"parseTypes": [
"EAGLERCRAFT_BETA_B1_3_OFFLINE"
]
},
{
"name": "PeytonPlayz585 Beta 1.7.3",
"conf": "conf_template_peytonplayz585_b1_7_3.json",
"opts": "opts_template_peytonplayz585_b1_7_3.txt",
"allow": [
"EAGLER_STANDARD_OFFLINE"
],
"parseTypes": [
"PEYTONPLAYZ585_ALPHA_BETA"
]
},
{
"name": "PeytonPlayz585 Alpha 1.2.6",
"conf": "conf_template_peytonplayz585_a1_2_6.json",
"opts": "opts_template_peytonplayz585_a1_2_6.txt",
"allow": [
"EAGLER_STANDARD_OFFLINE"
],
"parseTypes": [
"PEYTONPLAYZ585_ALPHA_BETA"
]
},
{
"name": "PeytonPlayz585 Indev",
"conf": "conf_template_peytonplayz585_indev.json",
"opts": null,
"allow": [
"EAGLER_STANDARD_OFFLINE"
],
"parseTypes": [
"PEYTONPLAYZ585_INDEV"
]
},
{
"name": "Standard Offline Download",
"conf": "conf_template_standard_offline.json",
"opts": null,
"allow": [
"EAGLER_STANDARD_OFFLINE"
],
"parseTypes": [
"EXPORTED_STANDARD_OFFLINE"
]
}
]
}

View file

@ -0,0 +1,86 @@
<!DOCTYPE html>
<!--
This file is from ${date}, it was generated using EaglercraftX 1.8 boot manager
-->
<html style="width:100%;height:100%;background-color:black;">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0" />
<meta name="description" content="${client_name}" />
<meta name="keywords" content="eaglercraft, eaglercraftx, minecraft, 1.8, 1.8.8" />
<title>${client_name}</title>
<meta property="og:locale" content="en-US" />
<meta property="og:type" content="website" />
<meta property="og:title" content="${client_name}" />
<meta property="og:description" content="this file is not a website, whoever uploaded it to this URL is a dumbass" />
<style type="eaglercraftOfflineParseHint">{"type":"EAGLERCRAFTX_1_8_OFFLINE","launchConf":${launch_conf_json}}</style>
<script type="text/javascript">
"use strict";
var relayIdMax = ${relayId_max};
var relayId = relayIdMax > 1 ? Math.floor(Math.random() * relayIdMax) : 0;
// %%%%%%%%% launch options %%%%%%%%%%%%
window.eaglercraftXOpts = ${launch_opts};
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
</script>
<script type="text/javascript">
"use strict";
if(typeof window !== "undefined") window.eaglercraftXClientScriptElement = document.currentScript;
${classes_js}
</script>
<script type="text/javascript">
"use strict";
(function(){
window.eaglercraftXOpts.container = "game_frame";
window.eaglercraftXOpts.assetsURI = ${assets_epk};
var launchInterval = -1;
var launchCounter = 1;
var launchCountdownNumberElement = null;
var launchCountdownProgressElement = null;
var launchSkipCountdown = false;
var launchTick = function() {
launchCountdownNumberElement.innerText = "" + Math.floor(6.0 - launchCounter * 0.06);
launchCountdownProgressElement.style.width = "" + launchCounter + "%";
if(++launchCounter > 100 || launchSkipCountdown) {
clearInterval(launchInterval);
setTimeout(function() { document.body.removeChild(document.getElementById("launch_countdown_screen")); document.body.style.backgroundColor = "black"; main(); }, 50);
}
};
window.addEventListener("load", function() {
launchCountdownNumberElement = document.getElementById("launchCountdownNumber");
launchCountdownProgressElement = document.getElementById("launchCountdownProgress");
launchInterval = setInterval(launchTick, 50);
document.getElementById("skipCountdown").addEventListener("click", function() {
launchSkipCountdown = true;
});
document.getElementById("bootMenu").addEventListener("click", function() {
launchSkipCountdown = true;
window.eaglercraftXOpts.showBootMenuOnLaunch = true;
});
});
})();
</script>
<link type="image/png" rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAR/SURBVEhLtZXZK3ZRFMYPcqXc+gv413DHxVuGIpIhkciQWaRccCNjSCkligwXSOZ5nmfv9zvn2e8+58V753sudmuvvdZ61l5r7XOc8H+GS/D19aUNkPz5+aktQH5/f//4+LBKZKuRkpUtQjCUYG5gD2T38vLy/PwsDfL9/f3Dw8PT05M0b29vnKLhCKCBT4L4gvBLBIei4//4+Hh1dUVEQutUuLu7E83FxQUGnKLBWKfQaA3S+AREVxaEOD8/Pzk50XpzcyMDcH19zdZG3N3d3dzc3Nvb01aX5pQUpQGGQJxcQpfNysoKhUIdHR1o1tbWbInYAgxIPDMzMy8vLzc3FxqOdMoRqwJK8G8ALUYIhHMiSEhIwI6CyIb0qQzC4eGhsXCc1tZWnZIEKzdQJQSXgKxfX18RCM3Z5eWlcfVAxKOjo+Pj49PTU88lTOk2NjbMsePc3t6SAfcgFdszOyMuAdeBg0CQi2lhYUHOeOLDCisN8FzcPFZXV3t7ezHY3t5GQ+6it+2xMASsKhEEWKsmRLRBBUpPvpJ/TpFKFBwKYAiITmicsbYhdHfJAltqhUCVsCQhwslmeXmZxiBQT9c0Ar9E2O3v72sYSE0N1yQArkKy0kBMXLqlZqIZHR3t6empqqqSDcBdhXEJSJ/bUc3q6uq+vj629GB9fR1WsLW1NTs7u7S0RN2locMjIyOEm5ubQ7+4uJienk4/+vv77Y1hwhLBEKhwWHitdVFfX9/Y2Gg2HuLi4owUAysrK8yCG97rh0+ApP5Q2ZycHFlPTExUVFRIBvn5+WhKSkp2dnaMKhptbW2426GgQ/rwuAQCZ1hwFayLiork9hMFBQV1dXVmE0BLS4vqw3QFB8kn4IAxoGPkYpxi4FeDmpqas7Mz4pClAgqGwD48rjY2NmacYqC0tJQ1KSlJWyE5OZkpUKkBAxZVIntAoZh04+Q48fHxPNGBgYHExMT29naj9cBodnZ2mo3jlJWVMeW2OGQck4B1amqqoaGhqamJjx2lGxwcpL0mUgR8fJhsWqJtSkoKU2SbHHUDpkhPBujd8xuQG6PJRM/Pz09PT7O1NNnZ2Tw3fgZkXVhYKCUlUhBATP+hCVyKZGky17RV0g04laayslJ6hlVeFHB4eFhKaogGd0LxtmTgE+hbhKDnPjMzgw8E3qGL2tpaBWpubjYqj2BoaEj6rq4uNATRZ0ZwCbiL6gXEzINk5vCBQJ9rMD4+rkA8QNK036uDg4Py8vLu7m680KjIBNR3zBDoWQM1g98snyB+VSoRW8C/UwR81/SvhgNj9JOTkwwVERUdRBEI0BAdLRVERkhLS8vIyEDQlrsTPTU1lVFhKxARvZgUlFLbegCf4BvIsbi4mIg4E5EogIHhiKCMtU0WUFiVy06j5fAJIDdSBDQw+PegDfBRcbOPwH4F9LuFWIIQdQNKwWqzIE0aoFUaBsw+SQuFw0uNtC9A+F4i3QNrbg3IDn+SAsHh+wYiEpeyBEMLv/cAO6KzAijxxB+Y4wisBhssJUhjEbPJf4Nw+B+JXqLW3bw+wQAAAABJRU5ErkJggg==" />
</head>
<body style="margin:0px;width:100%;height:100%;overflow:hidden;background-color:white;" id="game_frame">
<div style="margin:0px;width:100%;height:100%;font-family:sans-serif;display:flex;align-items:center;user-select:none;" id="launch_countdown_screen">
<div style="margin:auto;text-align:center;">
<h1>${client_name}</h1>
<h2>Game will launch in <span id="launchCountdownNumber">5</span>...</h2>
<div style="border:2px solid black;width:100%;height:15px;padding:1px;margin-bottom:20vh;"><div id="launchCountdownProgress" style="background-color:#555555;width:0%;height:100%;"></div>
<p style="margin-top:30px;"><button id="skipCountdown" autofocus>Skip Countdown</button>&emsp;<button id="bootMenu">Enter Boot Menu</button></p></div>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,85 @@
<!DOCTYPE html>
<!--
This file is from ${date}, it was generated using EaglercraftX 1.8 boot manager
-->
<html style="width:100%;height:100%;background-color:black;">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0" />
<meta name="description" content="EaglercraftX 1.8" />
<meta name="keywords" content="eaglercraft, eaglercraftx, minecraft, 1.8, 1.8.8" />
<title>EaglercraftX 1.8</title>
<meta property="og:locale" content="en-US" />
<meta property="og:type" content="website" />
<meta property="og:title" content="EaglercraftX 1.8" />
<meta property="og:description" content="this file is not a website, whoever uploaded it to this URL is a dumbass" />
<style type="eaglercraftOfflineParseHint">{"type":"EAGLERCRAFTX_1_8_FAT_OFFLINE","launchConf":${launch_conf_json}}</style>
<script type="text/javascript">
"use strict";
var relayIdMax = ${relayId_max};
var relayId = relayIdMax > 1 ? Math.floor(Math.random() * relayIdMax) : 0;
// %%%%%%%%% launch options %%%%%%%%%%%%
window.eaglercraftXOpts = ${launch_opts};
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
</script>
<script type="text/javascript">
"use strict";
if(typeof window !== "undefined") window.eaglercraftXClientScriptElement = document.currentScript;
${classes_js}
</script>
<script type="text/javascript">
"use strict";
(function(){
window.eaglercraftXOpts.container = "game_frame";
window.eaglercraftXOpts.assetsURI = ${assets_epk};
window.eaglercraftXOpts.showBootMenuOnLaunch = true;
var launchInterval = -1;
var launchCounter = 1;
var launchCountdownNumberElement = null;
var launchCountdownProgressElement = null;
var launchSkipCountdown = false;
var launchTick = function() {
launchCountdownNumberElement.innerText = "" + Math.floor(6.0 - launchCounter * 0.06);
launchCountdownProgressElement.style.width = "" + launchCounter + "%";
if(++launchCounter > 100 || launchSkipCountdown) {
clearInterval(launchInterval);
setTimeout(function() { document.body.removeChild(document.getElementById("launch_countdown_screen")); document.body.style.backgroundColor = "black"; main(); }, 50);
}
};
window.addEventListener("load", function() {
launchCountdownNumberElement = document.getElementById("launchCountdownNumber");
launchCountdownProgressElement = document.getElementById("launchCountdownProgress");
launchInterval = setInterval(launchTick, 50);
document.getElementById("skipCountdown").addEventListener("click", function() {
launchSkipCountdown = true;
});
});
})();
</script>
<link type="image/png" rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAR/SURBVEhLtZXZK3ZRFMYPcqXc+gv413DHxVuGIpIhkciQWaRccCNjSCkligwXSOZ5nmfv9zvn2e8+58V753sudmuvvdZ61l5r7XOc8H+GS/D19aUNkPz5+aktQH5/f//4+LBKZKuRkpUtQjCUYG5gD2T38vLy/PwsDfL9/f3Dw8PT05M0b29vnKLhCKCBT4L4gvBLBIei4//4+Hh1dUVEQutUuLu7E83FxQUGnKLBWKfQaA3S+AREVxaEOD8/Pzk50XpzcyMDcH19zdZG3N3d3dzc3Nvb01aX5pQUpQGGQJxcQpfNysoKhUIdHR1o1tbWbInYAgxIPDMzMy8vLzc3FxqOdMoRqwJK8G8ALUYIhHMiSEhIwI6CyIb0qQzC4eGhsXCc1tZWnZIEKzdQJQSXgKxfX18RCM3Z5eWlcfVAxKOjo+Pj49PTU88lTOk2NjbMsePc3t6SAfcgFdszOyMuAdeBg0CQi2lhYUHOeOLDCisN8FzcPFZXV3t7ezHY3t5GQ+6it+2xMASsKhEEWKsmRLRBBUpPvpJ/TpFKFBwKYAiITmicsbYhdHfJAltqhUCVsCQhwslmeXmZxiBQT9c0Ar9E2O3v72sYSE0N1yQArkKy0kBMXLqlZqIZHR3t6empqqqSDcBdhXEJSJ/bUc3q6uq+vj629GB9fR1WsLW1NTs7u7S0RN2locMjIyOEm5ubQ7+4uJienk4/+vv77Y1hwhLBEKhwWHitdVFfX9/Y2Gg2HuLi4owUAysrK8yCG97rh0+ApP5Q2ZycHFlPTExUVFRIBvn5+WhKSkp2dnaMKhptbW2426GgQ/rwuAQCZ1hwFayLiork9hMFBQV1dXVmE0BLS4vqw3QFB8kn4IAxoGPkYpxi4FeDmpqas7Mz4pClAgqGwD48rjY2NmacYqC0tJQ1KSlJWyE5OZkpUKkBAxZVIntAoZh04+Q48fHxPNGBgYHExMT29naj9cBodnZ2mo3jlJWVMeW2OGQck4B1amqqoaGhqamJjx2lGxwcpL0mUgR8fJhsWqJtSkoKU2SbHHUDpkhPBujd8xuQG6PJRM/Pz09PT7O1NNnZ2Tw3fgZkXVhYKCUlUhBATP+hCVyKZGky17RV0g04laayslJ6hlVeFHB4eFhKaogGd0LxtmTgE+hbhKDnPjMzgw8E3qGL2tpaBWpubjYqj2BoaEj6rq4uNATRZ0ZwCbiL6gXEzINk5vCBQJ9rMD4+rkA8QNK036uDg4Py8vLu7m680KjIBNR3zBDoWQM1g98snyB+VSoRW8C/UwR81/SvhgNj9JOTkwwVERUdRBEI0BAdLRVERkhLS8vIyEDQlrsTPTU1lVFhKxARvZgUlFLbegCf4BvIsbi4mIg4E5EogIHhiKCMtU0WUFiVy06j5fAJIDdSBDQw+PegDfBRcbOPwH4F9LuFWIIQdQNKwWqzIE0aoFUaBsw+SQuFw0uNtC9A+F4i3QNrbg3IDn+SAsHh+wYiEpeyBEMLv/cAO6KzAijxxB+Y4wisBhssJUhjEbPJf4Nw+B+JXqLW3bw+wQAAAABJRU5ErkJggg==" />
${fat_offline_data}
</head>
<body style="margin:0px;width:100%;height:100%;overflow:hidden;background-color:white;" id="game_frame">
<div style="margin:0px;width:100%;height:100%;font-family:sans-serif;display:flex;align-items:center;user-select:none;" id="launch_countdown_screen">
<div style="margin:auto;text-align:center;">
<h1>EaglercraftX 1.8 "Fat Offline"</h1>
<h3>Contains: ${num_clients} Client(s)</h3>
<h2>Game will launch in <span id="launchCountdownNumber">5</span>...</h2>
<div style="border:2px solid black;width:100%;height:15px;padding:1px;margin-bottom:20vh;"><div id="launchCountdownProgress" style="background-color:#555555;width:0%;height:100%;"></div>
<p style="margin-top:30px;"><button id="skipCountdown" autofocus>Skip Countdown</button></p></div>
</div>
</div>
</body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,78 @@
<!DOCTYPE html>
<!--
This file is from ${date}, it was generated using EaglercraftX 1.8 boot manager
-->
<html style="width:100%;height:100%;">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>My Drive - Google Drive</title>
<style type="eaglercraftOfflineParseHint">{"type":"EAGLERCRAFT_1_5_NEW_OFFLINE","launchConf":${launch_conf_json}}</style>
<script type="text/javascript">
window.addEventListener("load", function() {
countdown();
setTimeout(function(){
document.getElementById("locally").remove();
const relayIdMax = ${relayId_max};
const relayId = relayIdMax > 1 ? Math.floor(Math.random() * relayIdMax) : 0;
window.eaglercraftOpts = ${launch_opts};
window.eaglercraftOpts.container = "game_frame";
window.eaglercraftOpts.assetsURI = getAssetsURI();
window.eaglercraftOpts.serverWorkerURI = createWorkerURI("sp_worker");
main();
}, 6000);
});
</script>
<script type="text/javascript">
function getAssetsURI() {
return "data:application/octet-stream;base64,${assets_epk}";
}
</script>
<script type="text/javascript">
function createWorkerURI(el) {
var eee = document.getElementById(el);
var str = eee.innerHTML;
eee.remove();
str = "\"use strict\";var eaglercraftServerOpts;onmessage = function(o) { eaglercraftServerOpts = o.data; main(); };" + str;
return URL.createObjectURL(new Blob([str], {type:"text/javascript"}));
}
</script>
<link type="image/png" rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAGAUlEQVRYw7VXa0xTZxj+oKjJNjWZ10EtZqIQjBdsT2utlZYiMsfiZltUtpiYOZ0zceOmcZfsGLmoQ25hS1jmNJpBL1xEuWwZGduPjW0xcVniLn/YfmlrK6wDRulpz7v3O+1BCgUs4pc8+U5Ov6/P877v837nHEKiGzHEZpYQVhcXEfQ3uuaJjOCfP9pSG5E8GXIzmS+r0Rtk1bqcxCrti+NB76XVaA3EzM6fUxHmELmm7bXkjVde6pPV6WD1x/owyBDrEaTOAD9fTeqDLpJM98CciIBgTRVW0211Rx4k1WWOSiu0flnlDgGrEBsQpELnZz9hRuErAqNNMb8IW+Ex/SCvPzJPILebjm69eQAYm8m7+doeWHVRC0guIBGxDkEupsPfDSsBmokXumLB10TeFETUk3mPFbmq89VFCovJxdhNIG80BhirCVLqd4G0Yjtg9LC5UgvkIx1c/XQTJQevXRLgWwj47MSFJVg860yMRW81VW1tPwCKRqNPYTECxZaGV2B1VTqswUw8jZFrq7ZDv/UZ8Ddh+u0xCOKDL1FEM6maVRZE46ls5lSFNUiK4IW50Qg0C6mXdsPmCg2QCj10f54iRD9il1Bymn6ezhwVZCOpURtSFIDkHaob+yk5J0YvQoMg1YbA0RpVwGsnAvEEcNAhiOiISoCuB080HEqLKUfVti8iOcU2qylArr0MfzTIaPQoQjJJBGZCEOG3kxxBRA+Jm/moDQ2M/jdlSy4l808kZ1DUdswMseW2IHkLdCI5kkXIgh/aaFuS3x96expDisaTW4wFE403DtQLvBa7gjS/nogCEgMt4bWfAMGQWIqC6Q3JsrF0SrOZl2HbebDnHxpvPFAUFYciq8WtSFxNSShZBAG8v1kQ50EfLBNEsCQ2QvTyYNtZjPVC9JaI0QfoeYDlcctt5sVjaf2aLEYCd6j/AxGz0IVeaCb1dP2tiVkQXS+37NvC2M1ItJePZDwqiopjbMZjwsYeNk40Fgo4RkmmyIKQCWgl1LBbJnUFC8H0Y2TfTON8v7IVTYnPhImGFY2FIm7DjaD5JgmgHdEuZKgndDrGhrUdYzXmBnt+LzdF9ChgH2AJDMI+VjfWUlhT4ZprJQa4OYUA8WzoFMTkhrVlUm3tAoUlr49pysPzfn9A0YhCwoGpP4gi8q7T9S/Udi4w20CiY3viKAhed+I9+pvXvu46dD0HPhuWwhYLExCAVpztsX1Qm7RgrASMfdMhdZcWa7vNh4BwqHllkwYUNqUnpZssmfEZ9hNZgrX2+NsWga+V8AgIQwsashsNeZ0cGtuUVP49m1x9B9aW9/qSynshqfyHEHrpPf758z+C4vyduzvLfA0ZZcOthnJvU0bZf83jocd7e8oGW8k5+OJbtuHuaAGBB/lKfiA/FQby10NwToV/8tf74PRG8BSlsmMClr41ol9ZNAorTvT7V7zdDyJWIpaf6AfZOwO8vsQPu6oAsi5OjWyEAdfknBmCv3Yc5N1pa8HBaMCpUD0Eo/IPKdXgStDoxR4U2iGh2HFD+t4wxBfd4xKK7tEZpIhlhXdBxfZDZvkQry8d4jJKh6fF7pJ/uacucPxnhb3g2UHAma2D+1kKBAOuLIbz7t4Krl3MTeG9kdD2DwmIP+lKji908vGFDkDwCTgvL7gH6065wFA6BBlRIAuxoWwEfs1lYYCKyNSCy8Dw9w0MULiz5CnBd13xTfvILeFkii92VkjfH0UBTh8VsKLAAZozHjCUDUclILtkENaUj8KZ03/Cg3QJ3M/UUGIfl62mQiqE01AuH3caAggHydKTroXxRU6ntNgNSwscgQ3vuiETyfVRZoACSwGScxx8d+gSeDQk4M7SU3KnS6NZGPmpGMqCtNh1OOEDPyQUOUbSzw5yBqG2Q1FjZ8kgx5SNcG986OAcmeoRyE4D107t4cnRhzVxMBPPFjra1RfQ1ZUhh1fODntwL6kB6D51C4bUpH3G9wFRAF7E6EqHj2Ptr2A0l9HdswKa97IW/2P/Wc9xkRhm/HYcEzH3Ax79wxUzwELcXIFFwBP7an7M8T8H1bLLDGWzFAAAAABJRU5ErkJggg==" />
<script type="text/javascript">
"use strict";
${classes_js}
</script>
<script type="text/eaglerworker" id="sp_worker">
${classes_server_js}
</script>
<script type="text/javascript">
function countdown() {
const c = document.getElementById("countdown");
setTimeout(function(){ c.innerText = "(Game will launch in 4)"; }, 1000);
setTimeout(function(){ c.innerText = "(Game will launch in 3)"; }, 2000);
setTimeout(function(){ c.innerText = "(Game will launch in 2)"; }, 3000);
setTimeout(function(){ c.innerText = "(Game will launch in 1)"; }, 4000);
setTimeout(function(){ c.innerText = "(Game will launch in 0)"; }, 5000);
}
</script>
</head>
<body style="margin:0px;width:100%;height:100%;font-family:sans-serif;overflow:hidden;" id="game_frame">
<div id="locally" style="text-align:center;">
<div style="height:5vh;"></div>
<h2>${client_name}</h2>
<p id="countdown" style="text-align:center;">(Game will launch in 5)</p>
</div>
</body>
</html>

View file

@ -0,0 +1,59 @@
<!DOCTYPE html>
<!--
This file is from ${date}, it was generated using EaglercraftX 1.8 boot manager
-->
<html style="width:100%;height:100%;">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>${client_name}</title>
<style type="eaglercraftOfflineParseHint">{"type":"EAGLERCRAFT_1_5_OLD_OFFLINE","launchConf":${launch_conf_json}}</style>
<script type="text/javascript">
window.addEventListener("load", function() {
countdown();
setTimeout(function(){
document.getElementById("locally").remove();
window.minecraftOpts = [ "game_frame", getAssetsURI(), "${launch_opts}" ];
main();
}, 6000);
});
</script>
<script type="text/javascript">
function getAssetsURI() {
return "data:application/octet-stream;base64,${assets_epk}";
}
</script>
<link type="image/x-icon" rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAICAQAAEABADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3d3d3d3d3d3d3d3d3cHiIiIiIiIiIiIiIiIiIiHB4f/////////////////hweH/////////////////4cHh/////cAAHiI//////+HB4f///8REREAiIj/////hweH///3GNmREHAAAIiI/4cHh///8Y2ZmREHeqoIiI+HB4f///GNmZmRB3qqIIiIhweH///xjZmZkQd6qiIIiIcHh///8Y2ZmZEHqqoiD/+HB4f///cY2ZmRd6qqIg//hweH////EY2ZEXqqqiIP/4cHh/////cREXL6qqoiD/+HB4f////////y////Ig//hweH/////////yIiIoIP/4cHh//////////yIiIoD/+HB4f//////////yIiIn//hweH/////////////////4cHh/////////////////+HB4d3d3d3d3d3d3d3d3d3hweIiIiIiIiIiIiIiIiIiIcHhMwiRERERERERAAAAAAHB4TsokRERERERESICICIBweEETNEREREREREiAiAiAcHhJGzRERERERERERERERHB4iIiIiIiIiIiIiIiIiIhwd3d3d3d3d3d3d3d3d3d3cAAAAAAAAAAAAAAAAAAAAAD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////w==" />
<script type="text/javascript">
"use strict";
${classes_js}
</script>
<script type="text/javascript">
function countdown() {
const c = document.getElementById("countdown");
setTimeout(function(){ c.innerText = "(Game will launch in 4)"; }, 1000);
setTimeout(function(){ c.innerText = "(Game will launch in 3)"; }, 2000);
setTimeout(function(){ c.innerText = "(Game will launch in 2)"; }, 3000);
setTimeout(function(){ c.innerText = "(Game will launch in 1)"; }, 4000);
setTimeout(function(){ c.innerText = "(Game will launch in 0)"; }, 5000);
}
</script>
</head>
<body style="margin:0px;width:100%;height:100%;font-family:sans-serif;overflow:hidden;" id="game_frame">
<div id="locally" style="text-align:center;">
<div style="height:5vh;"></div>
<h2>${client_name}</h2>
<p id="countdown" style="text-align:center;">(Game will launch in 5)</p>
</div>
</body>
</html>

View file

@ -0,0 +1,59 @@
<!DOCTYPE html>
<!--
This file is from ${date}, it was generated using EaglercraftX 1.8 boot manager
-->
<html style="width:100%;height:100%;">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>${client_name}</title>
<style type="eaglercraftOfflineParseHint">{"type":"EAGLERCRAFT_BETA_B1_3_OFFLINE","launchConf":${launch_conf_json}}</style>
<script type="text/javascript">
window.addEventListener("load", function() {
countdown();
setTimeout(function(){
document.getElementById("locally").remove();
window.minecraftOpts = [ "game_frame", getAssetsURI() ];
main();
}, 6000);
});
</script>
<script type="text/javascript">
function getAssetsURI() {
return "data:application/octet-stream;base64,${assets_epk}";
}
</script>
<link type="image/x-icon" rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAICAQAAEABADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3d3d3d3d3d3d3d3d3cHiIiIiIiIiIiIiIiIiIiHB4f/////////////////hweH/////////////////4cHh/////cAAHiI//////+HB4f///8REREAiIj/////hweH///3GNmREHAAAIiI/4cHh///8Y2ZmREHeqoIiI+HB4f///GNmZmRB3qqIIiIhweH///xjZmZkQd6qiIIiIcHh///8Y2ZmZEHqqoiD/+HB4f///cY2ZmRd6qqIg//hweH////EY2ZEXqqqiIP/4cHh/////cREXL6qqoiD/+HB4f////////y////Ig//hweH/////////yIiIoIP/4cHh//////////yIiIoD/+HB4f//////////yIiIn//hweH/////////////////4cHh/////////////////+HB4d3d3d3d3d3d3d3d3d3hweIiIiIiIiIiIiIiIiIiIcHhMwiRERERERERAAAAAAHB4TsokRERERERESICICIBweEETNEREREREREiAiAiAcHhJGzRERERERERERERERHB4iIiIiIiIiIiIiIiIiIhwd3d3d3d3d3d3d3d3d3d3cAAAAAAAAAAAAAAAAAAAAAD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////w==" />
<script type="text/javascript">
"use strict";
${classes_js}
</script>
<script type="text/javascript">
function countdown() {
const c = document.getElementById("countdown");
setTimeout(function(){ c.innerText = "(Game will launch in 4)"; }, 1000);
setTimeout(function(){ c.innerText = "(Game will launch in 3)"; }, 2000);
setTimeout(function(){ c.innerText = "(Game will launch in 2)"; }, 3000);
setTimeout(function(){ c.innerText = "(Game will launch in 1)"; }, 4000);
setTimeout(function(){ c.innerText = "(Game will launch in 0)"; }, 5000);
}
</script>
</head>
<body style="margin:0px;width:100%;height:100%;font-family:sans-serif;overflow:hidden;" id="game_frame">
<div id="locally" style="text-align:center;">
<div style="height:5vh;"></div>
<h2>${client_name}</h2>
<p id="countdown" style="text-align:center;">(Game will launch in 5)</p>
</div>
</body>
</html>

View file

@ -0,0 +1,40 @@
<!DOCTYPE html>
<!--
This file is from ${date}, it was generated using EaglercraftX 1.8 boot manager
-->
<html style="width:100%;height:100%;">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>${client_name}</title>
<style type="eaglercraftOfflineParseHint">{"type":"PEYTONPLAYZ585_ALPHA_BETA","launchConf":${launch_conf_json}}</style>
<script type="text/javascript">
window.addEventListener("load", function() {
window.config = ${launch_opts};
window.config.gameContainer = "game_frame";
window.config.assetsLocation = getAssetsURI();
main();
});
</script>
<script type="text/javascript">
function getAssetsURI() {
return "data:application/octet-stream;base64,${assets_epk}";
}
</script>
<script type="text/javascript">
"use strict";
${classes_js}
</script>
</head>
<body style="margin:0px;width:100%;height:100%;overflow:hidden;" id="game_frame">
</body>
</html>

View file

@ -0,0 +1,38 @@
<!DOCTYPE html>
<!--
This file is from ${date}, it was generated using EaglercraftX 1.8 boot manager
-->
<html style="width:100%;height:100%;">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>${client_name}</title>
<style type="eaglercraftOfflineParseHint">{"type":"PEYTONPLAYZ585_INDEV","launchConf":${launch_conf_json}}</style>
<script type="text/javascript">
window.addEventListener("load", function() {
window.classicConfig = [ "game_frame", getAssetsURI() ];
main();
});
</script>
<script type="text/javascript">
function getAssetsURI() {
return "data:application/octet-stream;base64,${assets_epk}";
}
</script>
<script type="text/javascript">
"use strict";
${classes_js}
</script>
</head>
<body style="margin:0px;width:100%;height:100%;overflow:hidden;" id="game_frame">
</body>
</html>

View file

@ -0,0 +1,77 @@
<!DOCTYPE html>
<!--
This file is from ${date}, it was generated using EaglercraftX 1.8 boot manager
-->
<html style="width:100%;height:100%;">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="${client_name}" />
<meta name="keywords" content="eaglercraft, eaglercraftx, minecraft, 1.8, 1.8.8" />
<title>${client_name}</title>
<meta property="og:locale" content="en-US" />
<meta property="og:type" content="website" />
<meta property="og:title" content="${client_name}" />
<meta property="og:description" content="this file is not a website, whoever uploaded it to this URL is a dumbass" />
<style type="eaglercraftOfflineParseHint">{"type":"EXPORTED_STANDARD_OFFLINE","launchConf":${launch_conf_json}}</style>
<script type="text/javascript">
"use strict";
const relayIdMax = ${relayId_max};
const relayId = relayIdMax > 1 ? Math.floor(Math.random() * relayIdMax) : 0;
// %%%%%%%%% launch options %%%%%%%%%%%%
window["${launch_opts_var_name}"] = ${launch_opts};
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
</script>
<script type="text/javascript">
"use strict";
if(typeof window !== "undefined") window.eaglercraftXClientScriptElement = document.currentScript;
${classes_js}
</script>
<script type="text/javascript">
"use strict";
(function(){
window["${launch_opts_var_name}"]["${launch_opts_var_container_name}"] = "game_frame";
window["${launch_opts_var_name}"]["${launch_opts_var_assetsURI_name}"] = /*{:BEGIN_ASSETS_EPK:}*/${assets_epk}/*{:END_ASSETS_EPK:}*/;
var launchInterval = -1;
var launchCounter = 1;
var launchCountdownNumberElement = null;
var launchCountdownProgressElement = null;
function launchTick() {
launchCountdownNumberElement.innerText = "" + Math.floor(6.0 - launchCounter * 0.06);
launchCountdownProgressElement.style.width = "" + launchCounter + "%";
if(++launchCounter > 100) {
clearInterval(launchInterval);
setTimeout(() => { document.getElementById("launch_countdown_screen").remove(); window["${main_function_name}"](); }, 50);
}
}
window.addEventListener("load", () => {
launchCountdownNumberElement = document.getElementById("launchCountdownNumber");
launchCountdownProgressElement = document.getElementById("launchCountdownProgress");
launchInterval = setInterval(launchTick, 50);
});
})();
</script>
<link type="image/png" rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAR/SURBVEhLtZXZK3ZRFMYPcqXc+gv413DHxVuGIpIhkciQWaRccCNjSCkligwXSOZ5nmfv9zvn2e8+58V753sudmuvvdZ61l5r7XOc8H+GS/D19aUNkPz5+aktQH5/f//4+LBKZKuRkpUtQjCUYG5gD2T38vLy/PwsDfL9/f3Dw8PT05M0b29vnKLhCKCBT4L4gvBLBIei4//4+Hh1dUVEQutUuLu7E83FxQUGnKLBWKfQaA3S+AREVxaEOD8/Pzk50XpzcyMDcH19zdZG3N3d3dzc3Nvb01aX5pQUpQGGQJxcQpfNysoKhUIdHR1o1tbWbInYAgxIPDMzMy8vLzc3FxqOdMoRqwJK8G8ALUYIhHMiSEhIwI6CyIb0qQzC4eGhsXCc1tZWnZIEKzdQJQSXgKxfX18RCM3Z5eWlcfVAxKOjo+Pj49PTU88lTOk2NjbMsePc3t6SAfcgFdszOyMuAdeBg0CQi2lhYUHOeOLDCisN8FzcPFZXV3t7ezHY3t5GQ+6it+2xMASsKhEEWKsmRLRBBUpPvpJ/TpFKFBwKYAiITmicsbYhdHfJAltqhUCVsCQhwslmeXmZxiBQT9c0Ar9E2O3v72sYSE0N1yQArkKy0kBMXLqlZqIZHR3t6empqqqSDcBdhXEJSJ/bUc3q6uq+vj629GB9fR1WsLW1NTs7u7S0RN2locMjIyOEm5ubQ7+4uJienk4/+vv77Y1hwhLBEKhwWHitdVFfX9/Y2Gg2HuLi4owUAysrK8yCG97rh0+ApP5Q2ZycHFlPTExUVFRIBvn5+WhKSkp2dnaMKhptbW2426GgQ/rwuAQCZ1hwFayLiork9hMFBQV1dXVmE0BLS4vqw3QFB8kn4IAxoGPkYpxi4FeDmpqas7Mz4pClAgqGwD48rjY2NmacYqC0tJQ1KSlJWyE5OZkpUKkBAxZVIntAoZh04+Q48fHxPNGBgYHExMT29naj9cBodnZ2mo3jlJWVMeW2OGQck4B1amqqoaGhqamJjx2lGxwcpL0mUgR8fJhsWqJtSkoKU2SbHHUDpkhPBujd8xuQG6PJRM/Pz09PT7O1NNnZ2Tw3fgZkXVhYKCUlUhBATP+hCVyKZGky17RV0g04laayslJ6hlVeFHB4eFhKaogGd0LxtmTgE+hbhKDnPjMzgw8E3qGL2tpaBWpubjYqj2BoaEj6rq4uNATRZ0ZwCbiL6gXEzINk5vCBQJ9rMD4+rkA8QNK036uDg4Py8vLu7m680KjIBNR3zBDoWQM1g98snyB+VSoRW8C/UwR81/SvhgNj9JOTkwwVERUdRBEI0BAdLRVERkhLS8vIyEDQlrsTPTU1lVFhKxARvZgUlFLbegCf4BvIsbi4mIg4E5EogIHhiKCMtU0WUFiVy06j5fAJIDdSBDQw+PegDfBRcbOPwH4F9LuFWIIQdQNKwWqzIE0aoFUaBsw+SQuFw0uNtC9A+F4i3QNrbg3IDn+SAsHh+wYiEpeyBEMLv/cAO6KzAijxxB+Y4wisBhssJUhjEbPJf4Nw+B+JXqLW3bw+wQAAAABJRU5ErkJggg==" />
</head>
<body style="margin:0px;width:100%;height:100%;overflow:hidden;" id="game_frame">
<div style="margin:0px;width:100%;height:100%;font-family:sans-serif;display:flex;align-items:center;user-select:none;" id="launch_countdown_screen">
<div style="margin:auto;text-align:center;">
<h1>${client_name}</h1>
<h2>Game will launch in <span id="launchCountdownNumber">5</span>...</h2>
<div style="border:2px solid black;width:100%;height:15px;padding:1px;margin-bottom:20vh;"><div id="launchCountdownProgress" style="background-color:#555555;width:0%;height:100%;"></div></div>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,66 @@
{
"joinServer": null,
"servers": [
{
"addr": "ws://localhost:8081/",
"hideAddr": false,
"name": "Local test server"
}
],
"relays": [
{
"addr": "wss://relay.deev.is/",
"primary": "$random_relay_primary_0",
"comment": "lax1dude relay #1"
},
{
"addr": "wss://relay.lax1dude.net/",
"primary": "$random_relay_primary_1",
"comment": "lax1dude relay #2"
},
{
"addr": "wss://relay.shhnowisnottheti.me/",
"primary": "$random_relay_primary_2",
"comment": "ayunami relay #1"
}
],
"openDebugConsoleOnLaunch": false,
"showBootMenuOnLaunch": false,
"bootMenuBlocksUnsignedClients": false,
"allowBootMenu": true,
"forceWebViewSupport": false,
"enableServerCookies": true,
"enableDownloadOfflineButton": true,
"resourcePacksDB": "resourcePacks",
"enableWebViewCSP": true,
"checkRelaysForUpdates": true,
"allowServerRedirects": true,
"allowUpdateSvc": true,
"html5CursorSupport": false,
"allowFNAWSkins": true,
"allowVoiceClient": true,
"worldsDB": "worlds",
"demoMode": false,
"localStorageNamespace": "_eaglercraftX",
"enableSignatureBadge": false,
"lang": "en_US",
"enableMinceraft": true,
"autoFixLegacyStyleAttr": true,
"allowUpdateDL": true,
"logInvalidCerts": false,
"checkShaderGLErrors": false,
"crashOnUncaughtExceptions": false,
"forceWebGL1": false,
"forceWebGL2": false,
"allowExperimentalWebGL1": true,
"useWebGLExt": true,
"useDelayOnSwap": false,
"useJOrbisAudioDecoder": false,
"useXHRFetch": false,
"useVisualViewport": true,
"deobfStackTraces": true,
"disableBlobURLs": false,
"eaglerNoDelay": false,
"ramdiskMode": false,
"singleThreadMode": false
}

View file

@ -0,0 +1,66 @@
{
"joinServer": null,
"servers": [
{
"addr": "ws://localhost:8081/",
"hideAddr": false,
"name": "Local test server"
}
],
"relays": [
{
"addr": "wss://relay.deev.is/",
"primary": "$random_relay_primary_0",
"comment": "lax1dude relay #1"
},
{
"addr": "wss://relay.lax1dude.net/",
"primary": "$random_relay_primary_1",
"comment": "lax1dude relay #2"
},
{
"addr": "wss://relay.shhnowisnottheti.me/",
"primary": "$random_relay_primary_2",
"comment": "ayunami relay #1"
}
],
"openDebugConsoleOnLaunch": false,
"showBootMenuOnLaunch": false,
"bootMenuBlocksUnsignedClients": false,
"allowBootMenu": true,
"forceWebViewSupport": false,
"enableServerCookies": true,
"enableDownloadOfflineButton": true,
"resourcePacksDB": "resourcePacks",
"enableWebViewCSP": true,
"checkRelaysForUpdates": true,
"allowServerRedirects": true,
"allowUpdateSvc": true,
"html5CursorSupport": false,
"allowFNAWSkins": true,
"allowVoiceClient": true,
"worldsDB": "worlds",
"demoMode": true,
"localStorageNamespace": "_eaglercraftX",
"enableSignatureBadge": false,
"lang": "en_US",
"enableMinceraft": true,
"autoFixLegacyStyleAttr": true,
"allowUpdateDL": true,
"logInvalidCerts": false,
"checkShaderGLErrors": false,
"crashOnUncaughtExceptions": false,
"forceWebGL1": false,
"forceWebGL2": false,
"allowExperimentalWebGL1": true,
"useWebGLExt": true,
"useDelayOnSwap": false,
"useJOrbisAudioDecoder": false,
"useXHRFetch": false,
"useVisualViewport": true,
"deobfStackTraces": true,
"disableBlobURLs": false,
"eaglerNoDelay": false,
"ramdiskMode": false,
"singleThreadMode": false
}

View file

@ -0,0 +1,66 @@
{
"joinServer": null,
"servers": [
{
"addr": "ws://localhost:8081/",
"hideAddr": false,
"name": "Local test server"
}
],
"relays": [
{
"addr": "wss://relay.deev.is/",
"primary": "$random_relay_primary_0",
"comment": "lax1dude relay #1"
},
{
"addr": "wss://relay.lax1dude.net/",
"primary": "$random_relay_primary_1",
"comment": "lax1dude relay #2"
},
{
"addr": "wss://relay.shhnowisnottheti.me/",
"primary": "$random_relay_primary_2",
"comment": "ayunami relay #1"
}
],
"openDebugConsoleOnLaunch": false,
"showBootMenuOnLaunch": false,
"bootMenuBlocksUnsignedClients": false,
"allowBootMenu": true,
"forceWebViewSupport": false,
"enableServerCookies": true,
"enableDownloadOfflineButton": true,
"resourcePacksDB": "resourcePacks",
"enableWebViewCSP": true,
"checkRelaysForUpdates": true,
"allowServerRedirects": true,
"allowUpdateSvc": true,
"html5CursorSupport": true,
"allowFNAWSkins": true,
"allowVoiceClient": true,
"worldsDB": "worlds",
"demoMode": false,
"localStorageNamespace": "_eaglercraftX",
"enableSignatureBadge": false,
"lang": "en_US",
"enableMinceraft": true,
"autoFixLegacyStyleAttr": true,
"allowUpdateDL": true,
"logInvalidCerts": false,
"checkShaderGLErrors": false,
"crashOnUncaughtExceptions": false,
"forceWebGL1": false,
"forceWebGL2": false,
"allowExperimentalWebGL1": true,
"useWebGLExt": true,
"useDelayOnSwap": false,
"useJOrbisAudioDecoder": false,
"useXHRFetch": false,
"useVisualViewport": true,
"deobfStackTraces": true,
"disableBlobURLs": false,
"eaglerNoDelay": false,
"ramdiskMode": false,
"singleThreadMode": false
}

View file

@ -0,0 +1,52 @@
{
"joinServer": null,
"servers": [
{
"serverName": "Local Test Server",
"serverAddress": "localhost:25565",
"hideAddress": false
}
],
"relays": [
{
"addr": "wss://relay.deev.is/",
"name": "lax1dude relay #1",
"primary": "$random_relay_primary_0"
},
{
"addr": "wss://relay.lax1dude.net/",
"name": "lax1dude relay #2",
"primary": "$random_relay_primary_1"
},
{
"addr": "wss://relay.shhnowisnottheti.me/",
"name": "ayunami relay #1",
"primary": "$random_relay_primary_2"
}
],
"mainMenu": {
"splashes": [
"Darviglet!",
"eaglerenophile!",
"You Eagler!",
"Yeeeeeee!",
"yeee",
"EEEEEEEEE!",
"You Darvig!",
"You Vigg!",
":>",
"|>",
"You Yumpster!"
],
"eaglerLogo": false,
"itemLink": null,
"itemLine0": null,
"itemLine1": null,
"itemLine2": null
},
"worldsFolder": "MAIN",
"profanity": false,
"hideDownServers": false,
"serverListTitle": null,
"serverListLink": null
}

View file

@ -0,0 +1,32 @@
[NBT]{
servers: [
{
name: "Local Test Server",
ip: "localhost:25565",
hideAddress: false
}
],
mainMenu: {
itemLink: "",
itemLine0: "",
itemLine1: "",
itemLine2: "",
splashes: [
"Darviglet!",
"eaglerenophile!",
"You Eagler!",
"Yeeeeeee!",
"yeee",
"EEEEEEEEE!",
"You Darvig!",
"You Vigg!",
":>",
"|>",
"You Yumpster!"
]
},
profanity: false,
hide_down: false,
serverListTitle: "",
serverListLink: ""
}[/NBT]

View file

@ -0,0 +1,63 @@
{
"joinServer": null,
"servers": [
{
"serverName": "Local Test Server",
"serverAddress": "localhost:25565",
"hideAddress": false
}
],
"relays": [
{
"addr": "wss://relay.deev.is/",
"name": "lax1dude relay #1",
"primary": "$random_relay_primary_0"
},
{
"addr": "wss://relay.lax1dude.net/",
"name": "lax1dude relay #2",
"primary": "$random_relay_primary_1"
},
{
"addr": "wss://relay.shhnowisnottheti.me/",
"name": "ayunami relay #1",
"primary": "$random_relay_primary_2"
}
],
"mainMenu": {
"splashes": [
"Darviglet!",
"eaglerenophile!",
"You Eagler!",
"Yeeeeeee!",
"yeee",
"EEEEEEEEE!",
"You Darvig!",
"You Vigg!",
":>",
"|>",
"You Yumpster!"
],
"eaglerLogo": false,
"itemLink": null,
"itemLine0": null,
"itemLine1": null,
"itemLine2": null
},
"worldsFolder": "MAIN",
"assetOverrides": {
"title/no-pano-blur.flag": "false",
"records/wait.mp3": "wait.mp3",
"records/mellohi.mp3": "https://stream.nightride.fm/chillsynth.m4a",
"records/far.mp3": "https://stream.nightride.fm/nightride.m4a",
"records/cat.mp3": "http://usa9.fastcast4u.com/proxy/jamz?mp=/1",
"records/ward.mp3": "http://fr4.1mix.co.uk:8000/192h",
"records/strad.mp3": "http://listen.011fm.com:8028/stream15",
"records/blocks.mp3": "https://www.ophanim.net:8444/s/9780",
"records/13.mp3": "https://s2.radio.co/s2b2b68744/listen"
},
"profanity": false,
"hideDownServers": false,
"serverListTitle": null,
"serverListLink": null
}

View file

@ -0,0 +1,6 @@
{
"dataBaseName": "_net_PeytonPlayz585_eaglercraft_Alpha_IndexedDBFilesystem_1_2_6",
"playerUsername": null,
"serverIP": null,
"joinServerOnLaunch": null
}

View file

@ -0,0 +1,6 @@
{
"dataBaseName": "_net_PeytonPlayz585_eaglercraft_beta_IndexedDBFilesystem_1_7_3",
"playerUsername": null,
"serverIP": null,
"joinServerOnLaunch": null
}

View file

@ -1,7 +1,7 @@
#line 2
/*
* Copyright (c) 2022-2023 lax1dude. All Rights Reserved.
* 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
@ -16,21 +16,17 @@
*
*/
precision lowp int;
precision mediump float;
precision mediump sampler2D;
EAGLER_IN(vec2, v_texCoord2f)
EAGLER_IN(vec4, v_color4f)
in vec2 v_texCoord2f;
in vec4 v_color4f;
layout(location = 0) out vec4 output4f;
EAGLER_FRAG_OUT()
uniform sampler2D u_inputTexture;
uniform vec4 u_colorBias4f;
void main() {
output4f = texture(u_inputTexture, v_texCoord2f) * v_color4f + u_colorBias4f;
if(output4f.a < 0.004) {
EAGLER_FRAG_COLOR = EAGLER_TEXTURE_2D(u_inputTexture, v_texCoord2f) * v_color4f + u_colorBias4f;
if(EAGLER_FRAG_COLOR.a < 0.004) {
discard;
}
}

View file

@ -1,7 +1,7 @@
#line 2
/*
* Copyright (c) 2022-2023 lax1dude. All Rights Reserved.
* 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
@ -16,18 +16,15 @@
*
*/
precision lowp int;
precision highp float;
precision mediump sampler2D;
EAGLER_VSH_LAYOUT_BEGIN()
EAGLER_IN(0, vec3, a_position3f)
EAGLER_IN(1, vec2, c_position2i)
EAGLER_IN(2, vec2, c_coords2i)
EAGLER_IN(3, vec4, c_color4f)
EAGLER_VSH_LAYOUT_END()
layout(location = 0) in vec3 a_position3f;
layout(location = 1) in vec2 c_position2i;
layout(location = 2) in vec2 c_coords2i;
layout(location = 3) in vec4 c_color4f;
out vec2 v_texCoord2f;
out vec4 v_color4f;
EAGLER_OUT(vec2, v_texCoord2f)
EAGLER_OUT(vec4, v_color4f)
uniform mat4 u_matrixTransform;
uniform vec2 u_charSize2f;
@ -49,5 +46,5 @@ void main() {
pos2d.x -= (a_position3f.y - 0.5) * italicBit;
v_color4f.a *= 2.0;
v_color4f *= u_color4f;
gl_Position = u_matrixTransform * vec4(pos2d, 0.0, 1.0);
EAGLER_VERT_POSITION = u_matrixTransform * vec4(pos2d, 0.0, 1.0);
}

View file

@ -1,7 +1,7 @@
#line 2
/*
* Copyright (c) 2022-2023 lax1dude. All Rights Reserved.
* 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
@ -16,20 +16,16 @@
*
*/
precision lowp int;
precision mediump float;
precision mediump sampler2D;
EAGLER_IN(vec2, v_texCoord2f)
EAGLER_IN(vec4, v_color4f)
in vec2 v_texCoord2f;
in vec4 v_color4f;
layout(location = 0) out vec4 output4f;
EAGLER_FRAG_OUT()
uniform sampler2D u_inputTexture;
void main() {
output4f = texture(u_inputTexture, v_texCoord2f) * v_color4f;
if(output4f.a < 0.004) {
EAGLER_FRAG_COLOR = EAGLER_TEXTURE_2D(u_inputTexture, v_texCoord2f) * v_color4f;
if(EAGLER_FRAG_COLOR.a < 0.004) {
discard;
}
}

View file

@ -1,7 +1,7 @@
#line 2
/*
* Copyright (c) 2022-2023 lax1dude. All Rights Reserved.
* 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
@ -16,20 +16,17 @@
*
*/
precision lowp int;
precision highp float;
precision mediump sampler2D;
EAGLER_VSH_LAYOUT_BEGIN()
EAGLER_IN(0, vec2, a_position2f)
EAGLER_IN(1, vec3, p_position3f)
EAGLER_IN(2, vec2, p_texCoords2i)
EAGLER_IN(3, vec2, p_lightMap2f)
EAGLER_IN(4, vec2, p_particleSize_texCoordsSize_2i)
EAGLER_IN(5, vec4, p_color4f)
EAGLER_VSH_LAYOUT_END()
layout(location = 0) in vec2 a_position2f;
layout(location = 1) in vec3 p_position3f;
layout(location = 2) in vec2 p_texCoords2i;
layout(location = 3) in vec2 p_lightMap2f;
layout(location = 4) in vec2 p_particleSize_texCoordsSize_2i;
layout(location = 5) in vec4 p_color4f;
out vec2 v_texCoord2f;
out vec4 v_color4f;
EAGLER_OUT(vec2, v_texCoord2f)
EAGLER_OUT(vec4, v_color4f)
uniform mat4 u_matrixTransform;
uniform vec3 u_texCoordSize2f_particleSize1f;
@ -40,7 +37,7 @@ uniform vec4 u_color4f;
uniform sampler2D u_lightmapTexture;
void main() {
v_color4f = u_color4f * p_color4f.bgra * texture(u_lightmapTexture, p_lightMap2f);
v_color4f = u_color4f * p_color4f.bgra * EAGLER_TEXTURE_2D(u_lightmapTexture, p_lightMap2f);
vec2 tex2f = a_position2f * 0.5 + 0.5;
tex2f.y = 1.0 - tex2f.y;
@ -54,5 +51,5 @@ void main() {
pos3f += u_transformParam_1_2_5_f * spos2f.xyy;
pos3f.zx += u_transformParam_3_4_f * spos2f;
gl_Position = u_matrixTransform * vec4(pos3f, 1.0);
EAGLER_VERT_POSITION = u_matrixTransform * vec4(pos3f, 1.0);
}

View file

@ -1,7 +1,7 @@
#line 2
/*
* Copyright (c) 2022-2023 lax1dude. All Rights Reserved.
* 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
@ -17,11 +17,11 @@
*/
#if defined(COMPILE_ENABLE_TEX_GEN) || defined(COMPILE_ENABLE_FOG)
in vec4 v_position4f;
EAGLER_IN(vec4, v_position4f)
#endif
#ifdef COMPILE_TEXTURE_ATTRIB
in vec2 v_texture2f;
EAGLER_IN(vec2, v_texture2f)
#endif
uniform vec4 u_color4f;
@ -32,15 +32,15 @@ uniform vec4 u_colorBlendAdd4f;
#endif
#ifdef COMPILE_COLOR_ATTRIB
in vec4 v_color4f;
EAGLER_IN(vec4, v_color4f)
#endif
#ifdef COMPILE_NORMAL_ATTRIB
in vec3 v_normal3f;
EAGLER_IN(vec3, v_normal3f)
#endif
#ifdef COMPILE_LIGHTMAP_ATTRIB
in vec2 v_lightmap2f;
EAGLER_IN(vec2, v_lightmap2f)
#endif
#ifdef COMPILE_ENABLE_TEXTURE2D
@ -76,7 +76,7 @@ uniform vec4 u_fogColor4f;
#endif
#ifdef COMPILE_ENABLE_TEX_GEN
in vec3 v_objectPosition3f;
EAGLER_IN(vec3, v_objectPosition3f)
uniform ivec4 u_texGenPlane4i;
uniform vec4 u_texGenS4f;
uniform vec4 u_texGenT4f;
@ -89,7 +89,7 @@ uniform mat4 u_textureMat4f01;
uniform vec2 u_textureAnisotropicFix;
#endif
layout(location = 0) out vec4 output4f;
EAGLER_FRAG_OUT()
void main() {
@ -98,22 +98,29 @@ void main() {
#else
vec4 color = u_color4f;
#endif
#ifdef COMPILE_ENABLE_TEX_GEN
vec4 tmpVec4 = vec4(v_objectPosition3f, 1.0);
vec4 texGenVector;
vec4 texGenPosSrc[2];
texGenPosSrc[0] = vec4(v_objectPosition3f, 1.0);
texGenPosSrc[1] = v_position4f;
texGenVector.x = dot(texGenPosSrc[u_texGenPlane4i.x], u_texGenS4f);
texGenVector.y = dot(texGenPosSrc[u_texGenPlane4i.y], u_texGenT4f);
texGenVector.z = dot(texGenPosSrc[u_texGenPlane4i.z], u_texGenR4f);
texGenVector.w = dot(texGenPosSrc[u_texGenPlane4i.w], u_texGenQ4f);
texGenVector.x = dot(u_texGenPlane4i.x == 1 ? v_position4f : tmpVec4, u_texGenS4f);
texGenVector.y = dot(u_texGenPlane4i.y == 1 ? v_position4f : tmpVec4, u_texGenT4f);
texGenVector.z = dot(u_texGenPlane4i.z == 1 ? v_position4f : tmpVec4, u_texGenR4f);
texGenVector.w = dot(u_texGenPlane4i.w == 1 ? v_position4f : tmpVec4, u_texGenQ4f);
#ifdef EAGLER_HAS_GLES_300
texGenVector.xyz = mat4x3(
u_textureMat4f01[0].xyw,
u_textureMat4f01[1].xyw,
u_textureMat4f01[2].xyw,
u_textureMat4f01[3].xyw
) * texGenVector;
texGenVector.xy /= texGenVector.z;
#else
texGenVector = u_textureMat4f01 * texGenVector;
color *= texture(u_samplerTexture, texGenVector.xy / texGenVector.w);
texGenVector.xy /= texGenVector.w;
#endif
color *= EAGLER_TEXTURE_2D(u_samplerTexture, texGenVector.xy);
#ifdef COMPILE_ENABLE_ALPHA_TEST
if(color.a < u_alphaTestRef1f) discard;
#endif
@ -126,20 +133,20 @@ void main() {
// d3d11 doesn't support GL_NEAREST upscaling with anisotropic
// filtering enabled, so it needs this stupid fix to 'work'
vec2 uv = floor(v_texture2f * u_textureAnisotropicFix) + 0.5;
color *= texture(u_samplerTexture, uv / u_textureAnisotropicFix);
color *= EAGLER_TEXTURE_2D(u_samplerTexture, uv / u_textureAnisotropicFix);
#else
color *= texture(u_samplerTexture, v_texture2f);
color *= EAGLER_TEXTURE_2D(u_samplerTexture, v_texture2f);
#endif
#else
color *= texture(u_samplerTexture, u_textureCoords01);
color *= EAGLER_TEXTURE_2D(u_samplerTexture, u_textureCoords01);
#endif
#endif
#ifdef COMPILE_ENABLE_LIGHTMAP
#ifdef COMPILE_LIGHTMAP_ATTRIB
color *= texture(u_samplerLightmap, v_lightmap2f);
color *= EAGLER_TEXTURE_2D(u_samplerLightmap, v_lightmap2f);
#else
color *= texture(u_samplerLightmap, u_textureCoords02);
color *= EAGLER_TEXTURE_2D(u_samplerLightmap, u_textureCoords02);
#endif
#endif
@ -161,9 +168,18 @@ void main() {
#endif
float diffuse = 0.0;
vec4 light;
#ifdef EAGLER_HAS_GLES_300
for(int i = 0; i < u_lightsEnabled1i; ++i) {
#else
for(int i = 0; i < 4; ++i) {
#endif
light = u_lightsDirections4fv[i];
diffuse += max(dot(light.xyz, normal), 0.0) * light.w;
#ifndef EAGLER_HAS_GLES_300
if(i + 1 >= u_lightsEnabled1i) {
break;
}
#endif
}
color.rgb *= min(u_lightsAmbient3f + vec3(diffuse), 1.0);
#endif
@ -179,5 +195,5 @@ void main() {
color.rgb = mix(color.rgb, u_fogColor4f.rgb, clamp(f, 0.0, 1.0) * u_fogColor4f.a);
#endif
output4f = color;
EAGLER_FRAG_COLOR = color;
}

View file

@ -1,7 +1,7 @@
#line 2
/*
* Copyright (c) 2022-2023 lax1dude. All Rights Reserved.
* 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
@ -16,39 +16,39 @@
*
*/
in vec3 a_position3f;
EAGLER_IN_AUTO(vec3, a_position3f)
#if defined(COMPILE_ENABLE_TEX_GEN) || defined(COMPILE_ENABLE_FOG)
#define _COMPILE_VARYING_POSITION
#endif
#ifdef _COMPILE_VARYING_POSITION
out vec4 v_position4f;
EAGLER_OUT(vec4, v_position4f)
#endif
#ifdef COMPILE_ENABLE_TEX_GEN
out vec3 v_objectPosition3f;
EAGLER_OUT(vec3, v_objectPosition3f)
#endif
#ifdef COMPILE_TEXTURE_ATTRIB
in vec2 a_texture2f;
out vec2 v_texture2f;
EAGLER_IN_AUTO(vec2, a_texture2f)
EAGLER_OUT(vec2, v_texture2f)
uniform mat4 u_textureMat4f01;
#endif
#ifdef COMPILE_COLOR_ATTRIB
in vec4 a_color4f;
out vec4 v_color4f;
EAGLER_IN_AUTO(vec4, a_color4f)
EAGLER_OUT(vec4, v_color4f)
#endif
#ifdef COMPILE_NORMAL_ATTRIB
in vec4 a_normal4f;
out vec3 v_normal3f;
EAGLER_IN_AUTO(vec4, a_normal4f)
EAGLER_OUT(vec3, v_normal3f)
#endif
#ifdef COMPILE_LIGHTMAP_ATTRIB
in vec2 a_lightmap2f;
out vec2 v_lightmap2f;
EAGLER_IN_AUTO(vec2, a_lightmap2f)
EAGLER_OUT(vec2, v_lightmap2f)
uniform mat4 u_textureMat4f02;
#endif
@ -92,8 +92,8 @@ void main() {
#endif
#ifdef _COMPILE_VARYING_POSITION
gl_Position = u_projectionMat4f * v_position4f;
EAGLER_VERT_POSITION = u_projectionMat4f * v_position4f;
#else
gl_Position = u_modelviewProjMat4f * vec4(a_position3f, 1.0);
EAGLER_VERT_POSITION = u_modelviewProjMat4f * vec4(a_position3f, 1.0);
#endif
}

View file

@ -226,20 +226,18 @@ void main() {
#ifdef COMPILE_ENABLE_TEXTURE2D
vec2 texCoords2f;
#ifdef COMPILE_ENABLE_TEX_GEN
vec4 tmpVec4 = vec4(v_objectPosition3f, 1.0);
vec4 texGenVector;
vec4 texGenPosSrc[2];
texGenPosSrc[0] = vec4(v_objectPosition3f, 1.0);
texGenPosSrc[1] = v_position4f;
texGenVector.x = dot(texGenPosSrc[u_texGenPlane4i.x], u_texGenS4f);
texGenVector.y = dot(texGenPosSrc[u_texGenPlane4i.y], u_texGenT4f);
texGenVector.z = dot(texGenPosSrc[u_texGenPlane4i.z], u_texGenR4f);
texGenVector.w = dot(texGenPosSrc[u_texGenPlane4i.w], u_texGenQ4f);
texGenVector = vec4(mat4x3(
texGenVector.x = dot(u_texGenPlane4i.x == 1 ? v_position4f : tmpVec4, u_texGenS4f);
texGenVector.y = dot(u_texGenPlane4i.y == 1 ? v_position4f : tmpVec4, u_texGenT4f);
texGenVector.z = dot(u_texGenPlane4i.z == 1 ? v_position4f : tmpVec4, u_texGenR4f);
texGenVector.w = dot(u_texGenPlane4i.w == 1 ? v_position4f : tmpVec4, u_texGenQ4f);
texGenVector.xyz = mat4x3(
u_textureMat4f01[0].xyw,
u_textureMat4f01[1].xyw,
u_textureMat4f01[2].xyw,
u_textureMat4f01[3].xyw
) * texGenVector, 0.0);
) * texGenVector;
texCoords2f = texGenVector.xy / texGenVector.z;
#else

View file

@ -99,13 +99,13 @@ void main() {
reprojectionReflectionOutput4f = vec4(0.0, 0.0, 0.0, 0.0);
reprojectionHitVectorOutput4f = vec4(0.0, 0.0, 0.0, 0.0);
#endif
float fragDepth = textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r;
float fragDepth = textureLod(u_gbufferDepthTexture, v_position2f2, 0.0).r;
if(fragDepth < 0.000001) {
return;
}
vec4 fragClipSpacePos4f = vec4(v_position2f, fragDepth, 1.0) * 2.0 - 1.0;
vec4 fragClipSpacePos4f = vec4(v_position2f2, fragDepth, 1.0) * 2.0 - 1.0;
vec4 fragPos4f = u_inverseViewProjMatrix4f * fragClipSpacePos4f;
fragPos4f.xyz /= fragPos4f.w;
fragPos4f.w = 1.0;

View file

@ -1,7 +1,7 @@
{
"name": "§eHigh Performance PBR",
"desc": "Pack made from scratch specifically for this client, designed to give what I call the best balance between quality and performance possible in a browser but obviously that's just my opinion",
"vers": "1.2.1",
"vers": "1.2.2",
"author": "lax1dude",
"api_vers": 1,
"features": [

View file

@ -70,7 +70,7 @@ void main() {
originalViewSpacePos.xyz /= originalViewSpacePos.w;
originalViewSpacePos.w = 1.0;
vec4 noiseVec = textureLod(u_noiseConstantTexture, u_randomizerDataMatrix2f * (v_position2f + originalViewSpacePos.xy + normal3f.xz), 0.0);
vec4 noiseVec = textureLod(u_noiseConstantTexture, 13.3725 / fract((u_randomizerDataMatrix2f * (v_position2f * 0.42695346 + originalViewSpacePos.xy * 1.373769945645 + normal3f.xz * 42.69456453)) * 1.123234234), 0.0);
noiseVec.xyz *= 2.0;
noiseVec.xyz -= 1.0;

View file

@ -107,22 +107,23 @@ void main() {
#else
vec4 color = u_color4f;
#endif
#ifdef COMPILE_ENABLE_TEX_GEN
vec4 tmpVec4 = vec4(v_objectPosition3f, 1.0);
vec4 texGenVector;
vec4 texGenPosSrc[2];
texGenPosSrc[0] = vec4(v_objectPosition3f, 1.0);
texGenPosSrc[1] = v_position4f;
texGenVector.x = dot(texGenPosSrc[u_texGenPlane4i.x], u_texGenS4f);
texGenVector.y = dot(texGenPosSrc[u_texGenPlane4i.y], u_texGenT4f);
texGenVector.z = dot(texGenPosSrc[u_texGenPlane4i.z], u_texGenR4f);
texGenVector.w = dot(texGenPosSrc[u_texGenPlane4i.w], u_texGenQ4f);
texGenVector = u_textureMat4f01 * texGenVector;
color *= texture(u_samplerTexture, texGenVector.xy / texGenVector.w);
texGenVector.x = dot(u_texGenPlane4i.x == 1 ? v_position4f : tmpVec4, u_texGenS4f);
texGenVector.y = dot(u_texGenPlane4i.y == 1 ? v_position4f : tmpVec4, u_texGenT4f);
texGenVector.z = dot(u_texGenPlane4i.z == 1 ? v_position4f : tmpVec4, u_texGenR4f);
texGenVector.w = dot(u_texGenPlane4i.w == 1 ? v_position4f : tmpVec4, u_texGenQ4f);
texGenVector.xyz = mat4x3(
u_textureMat4f01[0].xyw,
u_textureMat4f01[1].xyw,
u_textureMat4f01[2].xyw,
u_textureMat4f01[3].xyw
) * texGenVector;
color *= texture(u_samplerTexture, texGenVector.xy / texGenVector.z);
#ifdef COMPILE_ENABLE_ALPHA_TEST
if(color.a < u_alphaTestRef1f) discard;
#endif

View file

@ -0,0 +1,98 @@
#line 2 6969
/*
* Copyright (c) 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.
*
*/
#ifdef EAGLER_HAS_GLES_300
// For GLES 3.00+ (WebGL 2.0)
#ifdef EAGLER_IS_VERTEX_SHADER
// Vertex Shaders:
#define EAGLER_VSH_LAYOUT_BEGIN()
#define EAGLER_VSH_LAYOUT_END()
#define EAGLER_IN(_loc, _type, _name) layout(location = _loc) in _type _name;
#define EAGLER_IN_AUTO(_type, _name) in _type _name;
#define EAGLER_OUT(_type, _name) out _type _name;
#define EAGLER_VERT_POSITION gl_Position
#else
#ifdef EAGLER_IS_FRAGMENT_SHADER
// Fragment Shaders:
#define EAGLER_IN(_type, _name) in _type _name;
#define EAGLER_FRAG_COLOR eagler_FragColor
#define EAGLER_FRAG_DEPTH gl_FragDepth
#define EAGLER_FRAG_OUT() layout(location = 0) out vec4 EAGLER_FRAG_COLOR;
#endif
#endif
// All Shaders:
#define EAGLER_TEXTURE_2D(tex, coord2f) texture(tex, coord2f)
#define EAGLER_TEXTURE_2D_LOD(_tex, _coord2f, _lod1f) textureLod(_tex, _coord2f, _lod1f)
#define EAGLER_HAS_TEXTURE_2D_LOD
#else
#ifdef EAGLER_HAS_GLES_200
// For GLES 2.00 (WebGL 1.0)
#ifdef EAGLER_IS_VERTEX_SHADER
// Vertex Shaders:
#define EAGLER_VSH_LAYOUT_BEGIN()
#define EAGLER_VSH_LAYOUT_END()
#define EAGLER_IN(_loc, _type, _name) attribute _type _name;
#define EAGLER_IN_AUTO(_type, _name) attribute _type _name;
#define EAGLER_OUT(_type, _name) varying _type _name;
#define EAGLER_VERT_POSITION gl_Position
#else
#ifdef EAGLER_IS_FRAGMENT_SHADER
// Fragment Shaders:
#define EAGLER_IN(_type, _name) varying _type _name;
#define EAGLER_FRAG_COLOR gl_FragColor
// TODO: Must require EXT_frag_depth to use this on GLES 2.0 (currently not needed)
#define EAGLER_FRAG_DEPTH gl_FragDepth
#define EAGLER_FRAG_OUT()
#endif
#endif
// All Shaders:
#define EAGLER_TEXTURE_2D(_tex, _coord2f) texture2D(_tex, _coord2f)
#ifdef EAGLER_HAS_GLES_200_SHADER_TEXTURE_LOD
#define EAGLER_TEXTURE_2D_LOD(_tex, _coord2f, _lod1f) texture2DLodEXT(_tex, _coord2f, _lod1f)
#define EAGLER_HAS_TEXTURE_2D_LOD
#else
// Beware!
#define EAGLER_TEXTURE_2D_LOD(_tex, _coord2f, _lod1f) texture2D(_tex, _coord2f)
#define EAGLER_HAS_TEXTURE_2D_LOD
#endif
#else
#error Unable to determine API version! (Missing directive EAGLER_HAS_GLES_200 or 300)
#endif
#endif
#line 1 0

View file

@ -0,0 +1,55 @@
#line 2
/*
* Copyright (c) 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.
*
*/
EAGLER_IN(vec2, v_position2f)
EAGLER_FRAG_OUT()
uniform sampler2D u_inputTexture;
uniform mat4 u_textureMatrix;
vec2 rand(in vec2 co){
float f = dot(co, vec2(12.98984576, 78.23378678));
return fract(vec2(sin(f + 0.32490982), cos(f - 0.69890)) * 43758.54576873);
}
void main() {
vec4 coords4f = vec4(v_position2f.x * 0.25 - 0.125, v_position2f.y * 0.25 - 0.125, v_position2f.y * 10.0 - 9.0, 1.0);
coords4f = u_textureMatrix * coords4f;
coords4f.xy /= coords4f.w;
EAGLER_FRAG_COLOR = EAGLER_TEXTURE_2D(u_inputTexture, coords4f.xy * 0.5 + 0.5);
EAGLER_FRAG_COLOR.rg += rand(v_position2f * 1.2344574345) * 0.05;
EAGLER_FRAG_COLOR.ba -= rand(v_position2f * 1.2343525225) * 0.05;
EAGLER_FRAG_COLOR.a = fract(sin(dot(coords4f.yz, vec2(12.9898, 78.233))) * 43758.5453);
EAGLER_FRAG_COLOR.a += exp(length(rand(coords4f.xw)) * -69.420);
EAGLER_FRAG_COLOR = pow(EAGLER_FRAG_COLOR, vec4(1.0 / 2.423952));
EAGLER_FRAG_COLOR = pow(EAGLER_FRAG_COLOR, vec4(5.4523856));
EAGLER_FRAG_COLOR += 0.00004423 + EAGLER_FRAG_COLOR.a * 0.02;
EAGLER_FRAG_COLOR = sqrt(EAGLER_FRAG_COLOR);
EAGLER_FRAG_COLOR = pow(EAGLER_FRAG_COLOR, vec4(1.0 / 1.9023576));
#ifdef EAGLER_HAS_GLES_300
EAGLER_FRAG_COLOR.ra += tanh(fract(EAGLER_FRAG_COLOR.a * 32.324834)) * 0.1012426;
#endif
EAGLER_FRAG_COLOR.b *= 0.934924;
EAGLER_FRAG_COLOR.b += (1.23213 / inversesqrt(EAGLER_FRAG_COLOR.a)) * 0.156365;
EAGLER_FRAG_COLOR.ga += rand(gl_FragCoord.xy) * 0.13423567;
EAGLER_FRAG_COLOR.rb += gl_PointCoord * 0.0124264565;
#ifdef EAGLER_HAS_GLES_300
EAGLER_FRAG_COLOR *= 0.95234 + asinh(EAGLER_FRAG_COLOR.g * 5.23423) * 0.0254325;
#endif
}

View file

@ -1,7 +1,7 @@
#line 2
/*
* Copyright (c) 2022-2023 lax1dude. All Rights Reserved.
* 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
@ -16,15 +16,13 @@
*
*/
precision lowp int;
precision highp float;
precision lowp sampler2D;
EAGLER_VSH_LAYOUT_BEGIN()
EAGLER_IN(0, vec2, a_position2f)
EAGLER_VSH_LAYOUT_END()
layout(location = 0) in vec2 a_position2f;
out vec2 v_position2f;
EAGLER_OUT(vec2, v_position2f)
void main() {
v_position2f = a_position2f * 0.5 + 0.5;
gl_Position = vec4(a_position2f, 0.0, 1.0);
EAGLER_VERT_POSITION = vec4(a_position2f, 0.0, 1.0);
}

View file

@ -1,11 +1,13 @@
#line 2
// Remove this line below if you plan to modify this file
#ifndef EAGLER_IS_GLES_200
#define USE_OPTIMIZED
#endif
/*
* Copyright (c) 2022-2023 lax1dude. All Rights Reserved.
* 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
@ -52,14 +54,9 @@
*
*/
precision lowp int;
precision mediump float;
precision mediump sampler2D;
EAGLER_IN(vec2, v_position2f)
in vec2 v_position2f;
layout(location = 0) out vec4 output4f;
EAGLER_FRAG_OUT()
uniform sampler2D u_screenTexture;
uniform vec2 u_screenSize2f;
@ -110,7 +107,7 @@ uniform vec2 u_screenSize2f;
#define FxaaTex sampler2D
/*--------------------------------------------------------------------------*/
#define FxaaTexTop(t, p) textureLod(t, p, 0.0)
#define FxaaTexTop(t, p) EAGLER_TEXTURE_2D_LOD(t, p, 0.0)
/*============================================================================
GREEN AS LUMA OPTION SUPPORT FUNCTION
@ -298,7 +295,7 @@ void main(){
rcpFrameOpt.xy = -screenSize05;
rcpFrameOpt.zw = screenSize05;
output4f = vec4(FxaaPixelShader(v_position2f + screenSize05, posPos, u_screenTexture, rcpFrameOpt, rcpFrameOpt * 4.0, edgeSharpness, edgeThreshold, edgeThresholdMin).rgb, 1.0);
EAGLER_FRAG_COLOR = vec4(FxaaPixelShader(v_position2f + screenSize05, posPos, u_screenTexture, rcpFrameOpt, rcpFrameOpt * 4.0, edgeSharpness, edgeThreshold, edgeThresholdMin).rgb, 1.0);
}
#else
@ -306,7 +303,6 @@ void main(){
// Is it faster? Idfk, probably compiles faster at least, what matters it I tried
float _616;
vec4 _617;
void main()
{
@ -317,14 +313,14 @@ void main()
mediump vec4 _608;
for(;;)
{
mediump vec3 _532 = textureLod(u_screenTexture, _611.xy, 0.0).xyz;
mediump vec3 _532 = EAGLER_TEXTURE_2D_LOD(u_screenTexture, _611.xy, 0.0).xyz;
mediump float _536 = dot(_532 * _532, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625));
mediump vec3 _540 = textureLod(u_screenTexture, _611.xw, 0.0).xyz;
mediump vec3 _540 = EAGLER_TEXTURE_2D_LOD(u_screenTexture, _611.xw, 0.0).xyz;
mediump float _544 = dot(_540 * _540, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625));
mediump vec3 _548 = textureLod(u_screenTexture, _611.zy, 0.0).xyz;
mediump vec3 _556 = textureLod(u_screenTexture, _611.zw, 0.0).xyz;
mediump vec3 _548 = EAGLER_TEXTURE_2D_LOD(u_screenTexture, _611.zy, 0.0).xyz;
mediump vec3 _556 = EAGLER_TEXTURE_2D_LOD(u_screenTexture, _611.zw, 0.0).xyz;
mediump float _560 = dot(_556 * _556, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625));
mediump vec4 _390 = textureLod(u_screenTexture, _290, 0.0);
mediump vec4 _390 = EAGLER_TEXTURE_2D_LOD(u_screenTexture, _290, 0.0);
mediump vec3 _564 = _390.xyz;
mediump float _568 = dot(_564 * _564, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625));
mediump float _397 = dot(_548 * _548, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625)) + 0.00260416674427688121795654296875;
@ -347,8 +343,8 @@ void main()
mediump vec2 _484 = (_612 * 4.0).zw;
vec2 _615 = -hp_copy_481;
mediump vec2 mp_copy_615 = _615;
mediump vec4 _498 = textureLod(u_screenTexture, mp_copy_614 * _454 + _290, 0.0) + textureLod(u_screenTexture, _449 * _454 + _290, 0.0);
mediump vec4 _505 = ((textureLod(u_screenTexture, mp_copy_615 * _484 + _290, 0.0) + textureLod(u_screenTexture, _481 * _484 + _290, 0.0)) * 0.25) + (_498 * 0.25);
mediump vec4 _498 = EAGLER_TEXTURE_2D_LOD(u_screenTexture, mp_copy_614 * _454 + _290, 0.0) + EAGLER_TEXTURE_2D_LOD(u_screenTexture, _449 * _454 + _290, 0.0);
mediump vec4 _505 = ((EAGLER_TEXTURE_2D_LOD(u_screenTexture, mp_copy_615 * _484 + _290, 0.0) + EAGLER_TEXTURE_2D_LOD(u_screenTexture, _481 * _484 + _290, 0.0)) * 0.25) + (_498 * 0.25);
mediump float _576 = dot(_505.xyz * _505.xyz, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625));
mediump vec4 _607;
if ((_576 < _412) || (_576 > _409))
@ -367,7 +363,7 @@ void main()
_608 = _607;
break;
}
output4f = vec4(_608.xyz, 1.0);
EAGLER_FRAG_COLOR = vec4(_608.xyz, 1.0);
}
#endif

View file

@ -1,7 +1,7 @@
#line 2
/*
* Copyright (c) 2023 lax1dude. All Rights Reserved.
* Copyright (c) 2023-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
@ -16,14 +16,10 @@
*
*/
precision lowp int;
precision highp float;
precision highp sampler2D;
in vec2 v_texCoords2f;
EAGLER_IN(vec2, v_texCoords2f)
#ifndef COMPILE_BLIT_DEPTH
layout(location = 0) out vec4 output4f;
EAGLER_FRAG_OUT()
#endif
uniform sampler2D u_inputTexture;
@ -40,8 +36,8 @@ void main() {
uv2f = (floor(uv2f * u_pixelAlignmentSizes4f.xy) + u_pixelAlignmentOffset2f) * u_pixelAlignmentSizes4f.zw;
#endif
#ifndef COMPILE_BLIT_DEPTH
output4f = textureLod(u_inputTexture, uv2f, u_textureLod1f);
EAGLER_FRAG_COLOR = EAGLER_TEXTURE_2D_LOD(u_inputTexture, uv2f, u_textureLod1f);
#else
gl_FragDepth = textureLod(u_inputTexture, uv2f, u_textureLod1f).r;
EAGLER_FRAG_DEPTH = EAGLER_TEXTURE_2D_LOD(u_inputTexture, uv2f, u_textureLod1f).r;
#endif
}

View file

@ -1,7 +1,7 @@
#line 2
/*
* Copyright (c) 2023 lax1dude. All Rights Reserved.
* Copyright (c) 2023-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
@ -16,13 +16,11 @@
*
*/
precision lowp int;
precision lowp float;
precision lowp sampler2D;
EAGLER_VSH_LAYOUT_BEGIN()
EAGLER_IN(0, vec2, a_position2f)
EAGLER_VSH_LAYOUT_END()
layout(location = 0) in vec2 a_position2f;
out vec2 v_texCoords2f;
EAGLER_OUT(vec2, v_texCoords2f)
uniform vec4 u_srcCoords4f;
uniform vec4 u_dstCoords4f;
@ -30,5 +28,5 @@ uniform vec4 u_dstCoords4f;
void main() {
vec2 uv = a_position2f * 0.5 + 0.5;
v_texCoords2f = u_srcCoords4f.xy + u_srcCoords4f.zw * uv;
gl_Position = vec4(u_dstCoords4f.xy + u_dstCoords4f.zw * uv, 0.0, 1.0);
EAGLER_VERT_POSITION = vec4(u_dstCoords4f.xy + u_dstCoords4f.zw * uv, 0.0, 1.0);
}

View file

@ -1,7 +1,7 @@
#line 2
/*
* Copyright (c) 2022-2023 lax1dude. All Rights Reserved.
* 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
@ -16,13 +16,9 @@
*
*/
precision lowp int;
precision highp float;
precision highp sampler2D;
EAGLER_IN(vec2, v_position2f)
in vec2 v_position2f;
layout(location = 0) out vec4 output4f;
EAGLER_FRAG_OUT()
uniform sampler2D u_inputTexture;
uniform float u_textureLod1f;
@ -32,6 +28,6 @@ uniform mat3 u_matrixTransform;
void main() {
vec3 coords = u_matrixTransform * vec3(v_position2f, 1.0);
vec4 color4f = textureLod(u_inputTexture, coords.xy, u_textureLod1f);
output4f = color4f * u_blendFactor4f + u_blendBias4f;
vec4 color4f = EAGLER_TEXTURE_2D_LOD(u_inputTexture, coords.xy, u_textureLod1f);
EAGLER_FRAG_COLOR = color4f * u_blendFactor4f + u_blendBias4f;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View file

@ -15,11 +15,6 @@ gui.no=No
gui.none=None
gui.all=All
eaglercraft.recording.unsupported=Recording Unsupported!
eaglercraft.recording.stop=Stop Recording
eaglercraft.recording.start=Record Screen...
eaglercraft.soundCategory.voice=Recording Voice
eaglercraft.resourcePack.prompt.title=What do you want to do with '%s'?
eaglercraft.resourcePack.prompt.text=Tip: Hold Shift to skip this screen when selecting a resource pack!
eaglercraft.resourcePack.prompt.delete=Delete this resource pack
@ -246,6 +241,7 @@ eaglercraft.shaders.gui.option.POST_FXAA.desc.5=OFF: disable fxaa (faster)
eaglercraft.shaders.gui.unsupported.title=Shaders are unavailable on this device!
eaglercraft.shaders.gui.unsupported.reason.hdrFramebuffer=Reason: No HDR render target support
eaglercraft.shaders.gui.unsupported.reason.oldOpenGLVersion=Reason: OpenGL ES 3.0 (WebGL 2.0) is not supported!
eaglercraft.shaders.debugMenuTip=Press %s+4 to access the shader debug menu
@ -253,7 +249,7 @@ eaglercraft.command.skull.tip=Use /eagskull to create custom skulls
eaglercraft.command.skull.usage=/eagskull
eaglercraft.command.skull.nopermission=Cheats are not enabled!
eaglercraft.command.skull.feedback=Created new skull: "%s"
eaglercraft.command.skull.error.invalid.png=Invalid PNG file!
eaglercraft.command.skull.error.invalid.format=Invalid or unsupported image file!
eaglercraft.command.skull.error.invalid.skin=Image with size %dx%d is not a valid minecraft skin!
eaglercraft.command.clientStub=This command is client side!
@ -428,13 +424,14 @@ eaglercraft.singleplayer.busy.confirmCancel=Confirm Cancel
eaglercraft.singleplayer.crashed.title=Recieved a crash report from integrated server!
eaglercraft.singleplayer.crashed.checkConsole=Check the console for more details
eaglercraft.singleplayer.crashed.continue=Continue
eaglercraft.singleplayer.crashed.singleThreadCont=Single Thread Mode
eaglercraft.singleplayer.failed.title=Singleplayer Task Failed!
eaglercraft.singleplayer.failed.killed=The worker process was killed
eaglercraft.singleplayer.failed.notStarted=The worker process could not start
eaglercraft.singleplayer.failed.singleThreadWarning.1=Worker Thread Startup Failure!
eaglercraft.singleplayer.failed.singleThreadWarning.2=The integrated server will run in single-threaded mode
eaglercraft.singleplayer.failed.singleThreadWarning.1=Worker Thread Issue Detected
eaglercraft.singleplayer.failed.singleThreadWarning.2=The integrated server is running in single-threaded mode
eaglercraft.singleplayer.busy.listingworlds=Loading worlds
eaglercraft.singleplayer.failed.listingworlds=Could not fetch worlds list!
@ -508,11 +505,21 @@ eaglercraft.singleplayer.backup.clearPlayerData.tooltip=Clears the inventories o
eaglercraft.singleplayer.backup.clearPlayerData.warning1=Are you sure you want to delete all player data?
eaglercraft.singleplayer.backup.clearPlayerData.warning2=All players in '%s' will lose their inventories (besides %s)
eaglercraft.singleplayer.ramdiskdetected.title=Worker Issues Detected
eaglercraft.singleplayer.ramdiskdetected.text0=Running in "RAMDisk mode", worlds cannot be saved!
eaglercraft.singleplayer.ramdiskdetected.text1=Single thread mode may solve this issue
eaglercraft.singleplayer.ramdiskdetected.continue=Continue
eaglercraft.singleplayer.ramdiskdetected.singleThreadCont=Single Thread Mode
eaglercraft.selectWorld.backup=Backup
eaglercraft.selectWorld.duplicate=Duplicate World:
eaglercraft.selectWorld.duplicateButton=Duplicate
eaglercraft.selectWorld.ramdiskWarning=WARNING: Running in "RAMDisk mode", worlds will NOT be saved to local storage!
eaglercraft.singleplayer.tpscounter.singleThreadMode=Single Thread Mode
eaglercraft.networkSettings.title=Shared World Relay Servers
eaglercraft.networkSettings.add=Add Relay
eaglercraft.networkSettings.delete=Delete Relay
@ -613,6 +620,27 @@ eaglercraft.updateList.refresh=Refresh
eaglercraft.updateList.note.0=Note: Updates are digitally signed, EaglercraftX will block any
eaglercraft.updateList.note.1=updates that were not created by lax1dude or ayunami2000
eaglercraft.updateSuccess.title=Update Successful
eaglercraft.updateSuccess.installToBootMenu=Install to Boot Menu
eaglercraft.updateSuccess.downloadOffline=Download Offline
eaglercraft.updateSuccess.downloading=Downloading Offline...
eaglercraft.updateSuccess.installing=Installing Client...
eaglercraft.updateFailed.title=Update Failed
eaglercraft.installFailed.title=Installation Failed
eaglercraft.updateInstall.title=Install to Boot Menu
eaglercraft.updateInstall.setDefault=Make Default
eaglercraft.updateInstall.setCountdown=Enable Countdown
eaglercraft.updateInstall.install=Install
eaglercraft.options.pressDeleteText=Press DEL to enter boot menu
eaglercraft.enterBootMenu.title=Enter Boot Menu
eaglercraft.enterBootMenu.text0=Refresh the page to enter the boot menu
eaglercraft.voice.title=Voice Channel
eaglercraft.voice.titleNoVoice=Voice is disabled on this server
eaglercraft.voice.titleVoiceUnavailable=Voice is unavailable
@ -643,14 +671,15 @@ eaglercraft.voice.volumeSpeakerLabel=Speakers:
eaglercraft.voice.volumeMicrophoneLabel=Microphone:
eaglercraft.voice.unsupportedWarning1=Voice Warning
eaglercraft.voice.unsupportedWarning2=Your network's firewall may not support
eaglercraft.voice.unsupportedWarning2=Your network configuration may not support
eaglercraft.voice.unsupportedWarning3=eaglercraft's voice chat.
eaglercraft.voice.unsupportedWarning4=If your game doesn't work it's your issue
eaglercraft.voice.unsupportedWarning5=to solve, not ayunami2000's or lax1dude's.
eaglercraft.voice.unsupportedWarning6=Don't ask them to 'fix' it for you because
eaglercraft.voice.unsupportedWarning7=they won't help you fix a problem that only
eaglercraft.voice.unsupportedWarning8=you or your network's administrator has the
eaglercraft.voice.unsupportedWarning9=ability to correctly resolve.
eaglercraft.voice.unsupportedWarning4=Voice chat is based on WebRTC and is
eaglercraft.voice.unsupportedWarning5=normally meant to be peer-to-peer, if your
eaglercraft.voice.unsupportedWarning6=firewall blocks peer-to-peer connections
eaglercraft.voice.unsupportedWarning7=a TURN server will be required.
eaglercraft.voice.unsupportedWarning8=The default OpenRelayProject TURN servers
eaglercraft.voice.unsupportedWarning9=are no longer working in 2024!
eaglercraft.voice.unsupportedWarning10=Continue
eaglercraft.voice.unsupportedWarning11=Cancel
@ -660,12 +689,115 @@ eaglercraft.voice.ipGrabWarning3=IP address to be logged by other players
eaglercraft.voice.ipGrabWarning4=also using voice on the server.
eaglercraft.voice.ipGrabWarning5=This issue will not be fixed, it is an
eaglercraft.voice.ipGrabWarning6=internal browser issue, not a mistake in the
eaglercraft.voice.ipGrabWarning7=game. Fortunately, this can only be done if
eaglercraft.voice.ipGrabWarning8=the other player uses a hacked web browser
eaglercraft.voice.ipGrabWarning9=or has Wireshark to capture the voice
eaglercraft.voice.ipGrabWarning10=packets, as there exists no real javascript
eaglercraft.voice.ipGrabWarning11=method to log IPs using a normal skidded
eaglercraft.voice.ipGrabWarning12=eaglercraft hacked client.
eaglercraft.voice.ipGrabWarning7=game. Sorry about that.
eaglercraft.revokeSessionToken.button=Revoke Session Token
eaglercraft.revokeSessionToken.title=Select session to revoke:
eaglercraft.revokeSessionToken.inspect=Inspect
eaglercraft.revokeSessionToken.revoke=Revoke
eaglercraft.revokeSessionToken.note.0=Use this tool when you believe someone has stolen your cookies
eaglercraft.revokeSessionToken.note.1=Eagler will request the server invalidate all session tokens
eaglercraft.inspectSessionToken.title=Cookie Details
eaglercraft.inspectSessionToken.details.server=Server Address:
eaglercraft.inspectSessionToken.details.expires=Expires At:
eaglercraft.inspectSessionToken.details.length=Byte Length:
eaglercraft.errorNoSessions.title=No Sessions Active!
eaglercraft.errorNoSessions.desc=There are no revokable sessions
eaglercraft.revokeSendingScreen.title=Revoking Session
eaglercraft.revokeSendingScreen.message.opening=Connecting to %s...
eaglercraft.revokeSendingScreen.message.sending=Sending Request...
eaglercraft.revokeSuccess.title=Revoke Success
eaglercraft.revokeSuccess.desc=The session was revoked sucessfully!
eaglercraft.revokeFailure.title=Revoke Failed
eaglercraft.revokeFailure.desc.notSupported=The server does not support this feature!
eaglercraft.revokeFailure.desc.notAllowed=The server does not allow revoking this token!
eaglercraft.revokeFailure.desc.notFound=The session was not found on the server!
eaglercraft.revokeFailure.desc.serverError=Internal server error!
eaglercraft.revokeFailure.desc.clientError=Error handling server's response!
eaglercraft.revokeFailure.desc.genericCode=Error code received! (Check Console)
eaglercraft.revokeFailure.desc.connectionError=Failed to connect to the server!
eaglercraft.revokeFailure.desc.cancelled=Connection closed
eaglercraft.recieveServerInfo.title=Retrieving Server Info
eaglercraft.recieveServerInfo.checkingCache=Checking Cache
eaglercraft.recieveServerInfo.contactingServer=Contacting Server
eaglercraft.recieveServerInfo.recievingData=Recieving Data
eaglercraft.recieveServerInfo.decompressing=Decompressing + Verifying
eaglercraft.serverInfoFailure.title=Retrieval Failed
eaglercraft.serverInfoFailure.desc=Failed to retrieve server info!
eaglercraft.webviewNotSupported.title=WebView Error
eaglercraft.webviewNotSupported.desc=WebView is not supported on this platform!
eaglercraft.webviewInvalidURL.title=WebView Error
eaglercraft.webviewInvalidURL.desc=Server provided an invalid URL!
eaglercraft.fallbackWebViewScreen.text0=View in your browser at:
eaglercraft.fallbackWebViewScreen.startingUp=Starting Up...
eaglercraft.fallbackWebViewScreen.pleaseWait=Please Wait...
eaglercraft.fallbackWebViewScreen.exited=(exited)
eaglercraft.fallbackWebViewScreen.openButton=Open
eaglercraft.fallbackWebViewScreen.exitButton=Exit
eaglercraft.webviewPhishingWaring.title=WARNING!!!
eaglercraft.webviewPhishingWaring.text0=If you see a login page, think before you enter a password
eaglercraft.webviewPhishingWaring.text1=Passwords can be stolen by the owner of this server or website
eaglercraft.webviewPhishingWaring.text2=Do not log in to accounts you don't want hackers to steal
eaglercraft.webviewPhishingWaring.dontShowAgain=Do not show this message again
eaglercraft.webviewPhishingWaring.continue=Continue
eaglercraft.notifications.title=Notifications
eaglercraft.notifications.priority=Priority: %s
eaglercraft.notifications.priority.low=All
eaglercraft.notifications.priority.normal=Info
eaglercraft.notifications.priority.higher=Warning
eaglercraft.notifications.priority.highest=Severe
eaglercraft.notifications.clearAll=Clear All
eaglercraft.options.touchControlOpacity=Touch Ctrls Opacity
eaglercraft.options.profanityFilterButton=Profanity Filter
eaglercraft.profanityFilterWarning.title=Content Warning
eaglercraft.profanityFilterWarning.text0=If you are streaming this game on Twitch, or
eaglercraft.profanityFilterWarning.text1=are under the wise old age of 14, please enable
eaglercraft.profanityFilterWarning.text2=the profanity filter before playing Multiplayer
eaglercraft.profanityFilterWarning.text4=(Disable in the 'Options' -> 'Chat Settings' menu)
eaglercraft.options.screenRecording.unsupported=Recording Unsupported!
eaglercraft.options.screenRecording.button=Record Screen...
eaglercraft.options.screenRecording.title=Screen Recording
eaglercraft.options.screenRecording.codec=Output Format: %s
eaglercraft.options.screenRecording.codecButton=Change...
eaglercraft.options.screenRecording.start=Start Recording
eaglercraft.options.screenRecording.stop=Stop Recording
eaglercraft.options.screenRecording.status=Status: %s
eaglercraft.options.screenRecording.status.0=Not Recording
eaglercraft.options.screenRecording.status.1=Recording!
eaglercraft.options.screenRecording.audioBitrate=Audio Bitrate
eaglercraft.options.screenRecording.videoBitrate=Video Bitrate
eaglercraft.options.screenRecording.videoResolution=Video Resolution
eaglercraft.options.screenRecording.microphoneVolume=Microphone Volume
eaglercraft.options.screenRecording.gameVolume=Game Volume
eaglercraft.options.screenRecording.videoFPS=Video Frame Rate
eaglercraft.options.screenRecording.onVSync=VSync
eaglercraft.options.screenRecording.failed=Failed to begin recording!
eaglercraft.options.recordingCodec.title=Select Codec
eaglercraft.options.recordingCodec.showAdvancedCodecs=Show Advanced: %s
eaglercraft.options.recordingNote.title=Recording Note
eaglercraft.options.recordingNote.text0=If the recorded video does not play,
eaglercraft.options.recordingNote.text1=try opening the file in your browser
eaglercraft.touch.interact.entity=Interact
selectServer.title=Select Server
selectServer.empty=empty
@ -685,10 +817,14 @@ addServer.enterName=Server Name
addServer.enterIp=Server Address
addServer.add=Done
addServer.hideAddress=Hide Address
eaglercraft.addServer.hideAddr=Hide Addr
addServer.resourcePack=Server Resource Packs
addServer.resourcePack.enabled=Enabled
addServer.resourcePack.disabled=Disabled
addServer.resourcePack.prompt=Prompt
eaglercraft.addServer.enableCookies=Cookies
eaglercraft.addServer.enableCookies.enabled=Enabled
eaglercraft.addServer.enableCookies.disabled=Disabled
lanServer.title=Shared World
lanServer.scanning=Scanning for games on your local network
lanServer.start=Start Shared World

View file

@ -1 +1 @@
{"pluginName":"EaglercraftXBungee","pluginVersion":"1.2.7","pluginButton":"Download \"EaglerXBungee-1.2.7.jar\"","pluginFilename":"EaglerXBungee.zip"}
{"pluginName":"EaglercraftXBungee","pluginVersion":"1.3.0","pluginButton":"Download \"EaglerXBungee-1.3.0.jar\"","pluginFilename":"EaglerXBungee.zip"}

View file

@ -0,0 +1,740 @@
1488
a55hole
ahole
ainujin
ainuzin
akimekura
anal
anus
anuses
anushead
anuslick
anuss
aokan
arsch
arschloch
arse
arsed
arsehole
arseholed
arseholes
arseholing
arselicker
arses
ass
asshat
asshole
assholed
assholes
assholing
asslick
asslicker
asses
auschwitz
b00bs
b00bz
b1tc
baise
bakachon
bakatyon
ballsack
ballzack
bamf
beaner
beeatch
beeeyotch
beefwhistle
beeotch
beetch
beeyotch
bellend
bestiality
beyitch
beyotch
biach
biotch
bitch
bitches
bitching
blad
bladt
blowjob
blow job
blowme
blow me
blyad
blyadt
bon3r
boner
boobs
boobz
btch
bukakke
bullshit
bung
butagorosi
butthead
butthole
buttplug
c0ck
cabron
cacca
cadela
cagada
cameljockey
caralho
castrate
cazzo
ceemen
ch1nk
chankoro
chieokure
chikusatsu
ching chong
chinga
chingada madre
chingado
chingate
chink
chinpo
chlamydia
choad
chode
chonga
chonko
chonkoro
chourimbo
chourinbo
chourippo
chuurembo
chuurenbo
circlejerk
cl1t
cli7
clit
clitoris
cocain
cocaine
cock
cocksucker
coglione
coglioni
coitus
coituss
cojelon
cojones
condom
coon
coon hunt
coon kill
coonhunt
coonkill
cooter
cotton pic
cotton pik
cottonpic
cottonpik
culear
culero
culo
cum
cumming
cun7
cunt
cvn7
cvnt
cyka
d1kc
d4go
dago
darkie
dickhead
dick
dicks
dikc
dildo
dio bestia
dumass
dumbass
durka durka
dyke
ejaculate
encule
enjokousai
enzyokousai
etahinin
etambo
etanbo
f0ck
f0kc
f3lch
facking
fag
faggot
fags
faggots
fanculo
fatass
fcuk
fcuuk
felch
fellatio
fetish
fickdich
figlio di puttana
fku
fock
fokc
foreskin
fotze
foutre
fucc
fuck
fucks
fuckd
fucked
fucker
fuckers
fucking
fuckr
fuct
fujinoyamai
fukashokumin
fupa
fuuck
fuuckd
fuucked
fuucker
fuucking
fuuckr
fuuuck
fuuuckd
fuuucked
fuuucker
fuuucking
fuuuckr
fuuuuck
fuuuuckd
fuuuucked
fuuuucker
fuuuucking
fuuuuckr
fuuuuuck
fuuuuuckd
fuuuuucked
fuuuuucker
fuuuuucking
fuuuuuckr
fuuuuuuck
fuuuuuuckd
fuuuuuucked
fuuuuuucker
fuuuuuucking
fuuuuuuckr
fuuuuuuuck
fuuuuuuuckd
fuuuuuuucked
fuuuuuuucker
fuuuuuuucking
fuuuuuuuckr
fuuuuuuuuck
fuuuuuuuuckd
fuuuuuuuucked
fuuuuuuuucker
fuuuuuuuucking
fuuuuuuuuckr
fuuuuuuuuuck
fuuuuuuuuuckd
fuuuuuuuuucked
fuuuuuuuuucker
fuuuuuuuuucking
fuuuuuuuuuckr
fuuuuuuuuuu
fvck
fxck
fxuxcxk
g000k
g00k
g0ok
gestapo
go0k
god damn
goddamn
goldenshowers
golliwogg
gollywog
gooch
gook
goook
gyp
h0m0
h0mo
h1tl3
h1tle
hairpie
hakujakusha
hakuroubyo
hakuzyakusya
hantoujin
hantouzin
herpes
hitl3r
hitler
hitlr
holocaust
hom0
homo
honky
hooker
hor3
hore
hukasyokumin
hure
hurensohn
huzinoyamai
hymen
inc3st
incest
inculato
injun
intercourse
inugoroshi
inugorosi
j1g4b0
j1g4bo
j1gab0
j1gabo
jack off
jackass
jap
jerkoff
jig4b0
jig4bo
jigabo
jigaboo
jiggaboo
jizz
joder
joto
jungle bunny
junglebunny
k k k
k1k3
kichigai
kik3
kike
kikeiji
kikeizi
kilurself
kitigai
kkk
klu klux
klu klux klan
kluklux
knobhead
koon hunt
koon kill
koonhunt
koonkill
koroshiteyaru
koumoujin
koumouzin
ku klux klan
kun7
kurombo
kurva
kurwa
kxkxk
l3sb0
lesbo
lezbo
lezzie
m07th3rfukr
m0th3rfvk3r
m0th3rfvker
madonna puttana
manberries
manko
manshaft
maricon
masterbat
masterbate
masturbacion
masturbait
masturbare
masturbate
masturbazione
merda
merde
meth
mierda
milf
minge
miststück
mitsukuchi
mitukuti
molest
molester
molestor
mong
moon cricket
moth3rfucer
moth3rfvk3r
moth3rfvker
motherfucker
mulatto
n1663r
n1664
n166a
n166er
n1g3r
n1german
n1gg3r
n1ggerman
n3gro
n4g3r
n4gg3r
n4ggerman
n4z1
nag3r
nagg3r
naggerman
natzi
naz1
nazi
nazl
negerman
nggerman
nggr
nhiggerman
ni666
ni66a
ni66er
ni66g
ni6g
ni6g6
ni6gg
nig
nig66
nig6g
nigar
nigerman
nigg3
nigg6
nigga
niggaz
niggerman
nigger
nigglet
niggr
nigguh
niggur
niggy
niglet
nignog
nimpinin
ninpinin
nipples
niqqa
niqqer
nonce
nugga
nutsack
nutted
nyggerman
omeko
orgy
p3n15
p3n1s
p3ni5
p3nis
p3nl5
p3nls
paki
panties
pedo
pedoph
pedophile
pen15
pen1s
pendejo
peni5
penile
penis
penis
penl5
penls
penus
perra
phag
phaggot
phagot
phuck
pikey
pinche
pizda
polla
porca madonna
porch monkey
porn
pornhub
porra
pu555y
pu55y
pub1c
pube
pubic
pun4ni
pun4nl
punal
punan1
punani
punanl
puss1
puss3
puss5
pusse
pussi
pussy
pussys
pussies
pusss1
pussse
pusssi
pusssl
pusssy
pussy
puta
putain
pute
puto
puttana
puttane
puttaniere
puzzy
pvssy
queef
r3c7um
r4p15t
r4p1st
r4p3
r4pi5t
r4pist
raape
raghead
raibyo
raip
rap15t
rap1st
rapage
rape
raped
rapi5t
raping
rapist
red tube
reggin
reipu
retard
ricchione
rimjob
rimming
rizzape
rompari
salaud
salope
sangokujin
sangokuzin
santorum
scheiße
schlampe
schlampe
schlong
schwuchtel
scrote
secks
seishinhakujaku
seishinijo
seisinhakuzyaku
seisinizyo
semen
semushiotoko
semusiotoko
sh|t
sh|thead
sh|tstain
sh17
sh17head
sh17stain
sh1t
sh1thead
sh1tstain
shat
shemale
shi7
shi7head
shi7stain
shinajin
shinheimin
shirakko
shit
shithead
shitstain
shitting
shitty
shokubutsuningen
sinazin
sinheimin
skank
slut
smd
sodom
sofa king
sofaking
spanishick
spanishook
spanishunk
succhia cazzi
syokubutuningen
taint
tapatte
tapette
tarlouse
tea bag
teabag
teebag
teensex
teino
testa di cazzo
testicles
thot
tieokure
tinpo
tits
titz
titties
tittiez
tokushugakkyu
tokusyugakkyu
torukoburo
torukojo
torukozyo
tosatsu
tosatu
towelhead
trannie
tranny
tunbo
tw47
tw4t
twat
tyankoro
tyonga
tyonko
tyonkoro
tyourinbo
tyourippo
tyurenbo
ushigoroshi
usigorosi
v461n4
v461na
v46in4
v46ina
v4g1n4
v4g1na
v4gin4
v4gina
va61n4
va61na
va6in4
va6ina
vaccagare
vaffanculo
vag
vag1n4
vag1na
vagin4
vagina
vatefaire
vvhitepower
w3tb4ck
w3tback
wank
wanker
wetb4ck
wetback
wh0r3
wh0re
white power
whitepower
whor3
whore
whores
wog
wop
x8lp3t
xbl pet
xblpet
xblrewards
xl3lpet
yabunirami
zipperhead
блядь
сука
アオカン
あおかん
イヌゴロシ
いぬごろし
インバイ
いんばい
オナニー
おなにー
オメコ
カワラコジキ
かわらこじき
カワラモノ
かわらもの
キケイジ
きけいじ
キチガイ
きちがい
キンタマ
きんたま
クロンボ
くろんぼ
コロシテヤル
ころしてやる
シナジン
しなじん
タチンボ
たちんぼ
チョンコウ
ちょんこう
チョンコロ
ちょんころ
ちょん公
チンポ
ちんぽ
ツンボ
つんぼ
とるこじょう
とるこぶろ
トルコ嬢
トルコ風呂
ニガー
ニグロ
にんぴにん
はんとうじん
マンコ
まんこ
レイプ
れいぷ
低能
屠殺
強姦
援交
支那人
精薄
精薄者
輪姦