import resent source

This commit is contained in:
ThisIsALegitUsername 2022-12-27 20:54:38 +00:00
parent 205787372d
commit 20907f090c
3875 changed files with 728018 additions and 110 deletions

View File

@ -1,6 +0,0 @@
@echo off
title epkcompiler
echo compiling, please wait...
java -jar "desktopRuntime/CompileEPK.jar" "desktopRuntime/resources" "javascript/assets.epk"
echo finished compiling epk
pause

View File

@ -1,4 +0,0 @@
@echo off
title MakeOfflineDownload
java -cp "desktopRuntime/MakeOfflineDownload.jar;desktopRuntime/CompileEPK.jar" net.lax1dude.eaglercraft.v1_8.buildtools.workspace.MakeOfflineDownload "javascript/OfflineDownloadTemplate.txt" "javascript/classes.js;javascript/fix-webm-duration.js" "javascript/assets.epk" "javascript/EaglercraftX_1.8_Offline_en_US.html" "javascript/EaglercraftX_1.8_Offline_International.html" "javascript/lang"
pause

79
Resent-main/.classpath Normal file
View File

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry output="bin/main" kind="src" path="src/main/java">
<attributes>
<attribute name="gradle_scope" value="main"/>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry output="bin/main" kind="src" path="src/teavm/java">
<attributes>
<attribute name="gradle_scope" value="main"/>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry output="bin/main" kind="src" path="sp-server/src/ipc/java">
<attributes>
<attribute name="gradle_scope" value="main"/>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/>
<classpathentry kind="output" path="bin/default"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8/"/>
<classpathentry sourcepath="/workspace/.gradle/caches/modules-2/files-2.1/org.teavm/teavm-classlib/0.6.1/ed928987ac8c74c3279dbc00d777ea87155469bc/teavm-classlib-0.6.1-sources.jar" kind="lib" path="/workspace/.gradle/caches/modules-2/files-2.1/org.teavm/teavm-classlib/0.6.1/3b0f0cb8c3d879f6dd9d9d0101e0032d57f5fa8/teavm-classlib-0.6.1.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry sourcepath="/workspace/.gradle/caches/modules-2/files-2.1/org.teavm/teavm-platform/0.6.1/69815866360883bc945cc2704e01c2aafc1ce296/teavm-platform-0.6.1-sources.jar" kind="lib" path="/workspace/.gradle/caches/modules-2/files-2.1/org.teavm/teavm-platform/0.6.1/18dfcd3bf6c2e379e23cf168549585aae98857f/teavm-platform-0.6.1.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry sourcepath="/workspace/.gradle/caches/modules-2/files-2.1/org.teavm/teavm-jso-impl/0.6.1/e39d63686c38ec74d4eaa4d12d5259ac0e8483b9/teavm-jso-impl-0.6.1-sources.jar" kind="lib" path="/workspace/.gradle/caches/modules-2/files-2.1/org.teavm/teavm-jso-impl/0.6.1/b5caec1ba7fed15254b9f8b50340549023cce240/teavm-jso-impl-0.6.1.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry sourcepath="/workspace/.gradle/caches/modules-2/files-2.1/org.teavm/teavm-jso-apis/0.6.1/55274af88c7746aea55fcfef45dc9397228c8a38/teavm-jso-apis-0.6.1-sources.jar" kind="lib" path="/workspace/.gradle/caches/modules-2/files-2.1/org.teavm/teavm-jso-apis/0.6.1/622597700c7debce22e5d0997b649016447d67f7/teavm-jso-apis-0.6.1.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry sourcepath="/workspace/.gradle/caches/modules-2/files-2.1/org.teavm/teavm-jso/0.6.1/78c94b8a7aba6960a5ce43331c66d6c2c5ff968a/teavm-jso-0.6.1-sources.jar" kind="lib" path="/workspace/.gradle/caches/modules-2/files-2.1/org.teavm/teavm-jso/0.6.1/9d86da37b45a9c60644818536959459222083936/teavm-jso-0.6.1.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry sourcepath="/workspace/.gradle/caches/modules-2/files-2.1/org.teavm/teavm-metaprogramming-impl/0.6.1/aa2d2217e5dd4e612baa393d0a0003a066cd1f16/teavm-metaprogramming-impl-0.6.1-sources.jar" kind="lib" path="/workspace/.gradle/caches/modules-2/files-2.1/org.teavm/teavm-metaprogramming-impl/0.6.1/5eab0c2ab199d76b004265af824f36f1706b7d62/teavm-metaprogramming-impl-0.6.1.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry sourcepath="/workspace/.gradle/caches/modules-2/files-2.1/org.teavm/teavm-metaprogramming-api/0.6.1/f103f71f184e676b2d7e6f5872e148f7d794a93c/teavm-metaprogramming-api-0.6.1-sources.jar" kind="lib" path="/workspace/.gradle/caches/modules-2/files-2.1/org.teavm/teavm-metaprogramming-api/0.6.1/2c3da6a61a58ed2c3d10cf405dffad90488ed6a2/teavm-metaprogramming-api-0.6.1.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry sourcepath="/workspace/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.2.4/a6dc5db8a12928e583bd3f23e72d3ab611ecd58f/gson-2.2.4-sources.jar" kind="lib" path="/workspace/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.2.4/a60a5e993c98c864010053cb901b7eab25306568/gson-2.2.4.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry sourcepath="/workspace/.gradle/caches/modules-2/files-2.1/com.jcraft/jzlib/1.1.3/3102d5e0e3e6cdb601b42f7bdcbff13167a2226d/jzlib-1.1.3-sources.jar" kind="lib" path="/workspace/.gradle/caches/modules-2/files-2.1/com.jcraft/jzlib/1.1.3/c01428efa717624f7aabf4df319939dda9646b2d/jzlib-1.1.3.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry sourcepath="/workspace/.gradle/caches/modules-2/files-2.1/joda-time/joda-time/2.7/1fc633cf2a3f5a1767ef28b81ebc5d0ecfa1ffda/joda-time-2.7-sources.jar" kind="lib" path="/workspace/.gradle/caches/modules-2/files-2.1/joda-time/joda-time/2.7/5599707a3eaad13e889f691b3af78c8c03842195/joda-time-2.7.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry sourcepath="/workspace/.gradle/caches/modules-2/files-2.1/org.teavm/teavm-interop/0.6.1/6f27194568262d33bd82a443632e8d1a778c7c1a/teavm-interop-0.6.1-sources.jar" kind="lib" path="/workspace/.gradle/caches/modules-2/files-2.1/org.teavm/teavm-interop/0.6.1/556d85e513f13e867435c34f2128e79d98995c41/teavm-interop-0.6.1.jar">
<attributes>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
</classpath>

View File

@ -0,0 +1,25 @@
# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.245.2/containers/java-8/.devcontainer/base.Dockerfile
# [Choice] Debian OS version (use bullseye on local arm64/Apple Silicon): buster, bullseye
ARG VARIANT="bullseye"
FROM mcr.microsoft.com/vscode/devcontainers/java:1-8-${VARIANT}
# [Option] Install Maven
ARG INSTALL_MAVEN="false"
ARG MAVEN_VERSION=""
# [Option] Install Gradle
ARG INSTALL_GRADLE="false"
ARG GRADLE_VERSION=""
RUN if [ "${INSTALL_MAVEN}" = "true" ]; then su vscode -c "umask 0002 && . /usr/local/sdkman/bin/sdkman-init.sh && sdk install maven \"${MAVEN_VERSION}\""; fi \
&& if [ "${INSTALL_GRADLE}" = "true" ]; then su vscode -c "umask 0002 && . /usr/local/sdkman/bin/sdkman-init.sh && sdk install gradle \"${GRADLE_VERSION}\""; fi
# [Choice] Node.js version: none, lts/*, 16, 14, 12, 10
ARG NODE_VERSION="lts/*"
RUN if [ "${NODE_VERSION}" != "none" ]; then su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi
# [Optional] Uncomment this section to install additional OS packages.
# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
# && apt-get -y install --no-install-recommends <your-package-list-here>
# [Optional] Uncomment this line to install global node packages.
# RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g <your-package-here>" 2>&1

View File

@ -0,0 +1,52 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
// https://github.com/microsoft/vscode-dev-containers/tree/v0.245.2/containers/java-8
{
"name": "Java 8",
"build": {
"dockerfile": "Dockerfile",
"args": {
// Use the VARIANT arg to pick a Debian OS version: buster, bullseye
// Use bullseye when running on local arm64/Apple Silicon.
"VARIANT": "buster",
// Options
"INSTALL_MAVEN": "false",
"INSTALL_GRADLE": "true",
"NODE_VERSION": "lts/*"
}
},
// Configure tool-specific properties.
"customizations": {
// Configure properties specific to VS Code.
"vscode": {
// Set *default* container specific settings.json values on container create.
"settings": {
"java.import.gradle.java.home": "/usr/local/sdkman/candidates/java/current",
"java.configuration.runtimes": [{
"default": true,
"name": "JavaSE-1.8",
"path": "/usr/local/sdkman/candidates/java/current"
}]
},
// Add the IDs of extensions you want installed when the container is created.
"extensions": [
"vscjava.vscode-java-pack"
]
}
},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
// Use 'postCreateCommand' to run commands after the container is created.
// "postCreateCommand": "java -version",
// Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
"remoteUser": "vscode",
"features": {
"git": "latest",
"github-cli": "latest",
"ghcr.io/devcontainers/features/python:1": {}
}
}

10
Resent-main/.gitattributes vendored Normal file
View File

@ -0,0 +1,10 @@
#
# https://help.github.com/articles/dealing-with-line-endings/
#
*.bat text eol=crlf
*.sh text eol=lf
gradlew text eol=lf
*.html linguist-vendored
*.htm linguist-vendored

35
Resent-main/.gitignore vendored Normal file
View File

@ -0,0 +1,35 @@
.gradle
.settings
.idea
build
bin
eaglercraftbungee/.idea
eaglercraftbungee/bin
eaglercraftbungee/rundir
eaglercraftbungee/test
eaglercraftbungee/src/main/java/META-INF
eaglercraftbungee/out
epkcompiler/bin
spigot-server/world*
eaglercraftbungee/rundir
stable-download/java/spigot_command/world/*
stable-download/java/spigot_command/world_nether/*
stable-download/java/spigot_command/world_the_end/*
stable-download/java/spigot_command/server.log
stable-download/java/bungee_command/proxy*
lwjgl-rundir/_eagstorage*
sp-server/.gradle
sp-server/.settings
sp-server/build
sp-server/bin
stable-download/_repl*
lwjgl-rundir/_eagstorage*
*.bak
sp-relay/out
sp-relay/test
sp-relay/.idea
sp-relay/src/main/java/META-INF
zip-generator/out
zip-generator/src/main/java/META-INF
*.iml
crash_report_override.txt

8
Resent-main/.gitpod.yml Normal file
View File

@ -0,0 +1,8 @@
# This configuration file was automatically generated by Gitpod.
# Please adjust to your needs (see https://www.gitpod.io/docs/config-gitpod-file)
# and commit this file to your remote git repository to share the goodness with others.
tasks:
- init: ./gradlew build

32
Resent-main/.project Normal file
View File

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>eaglercraft</name>
<comment></comment>
<projects/>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.buildship.core.gradleprojectnature</nature>
</natures>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments/>
</buildCommand>
<buildCommand>
<name>org.eclipse.buildship.core.gradleprojectbuilder</name>
<arguments/>
</buildCommand>
</buildSpec>
<linkedResources/>
<filteredResources>
<filter>
<id>1</id>
<type>30</type>
<name/>
<matcher>
<id>org.eclipse.core.resources.regexFilterMatcher</id>
<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
</matcher>
</filter>
</filteredResources>
</projectDescription>

4
Resent-main/.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,4 @@
{
"java.dependency.packagePresentation": "hierarchical",
"java.configuration.updateBuildConfiguration": "automatic"
}

Binary file not shown.

3
Resent-main/LICENSE Normal file
View File

@ -0,0 +1,3 @@
This work is licensed under a Creative Commons
Attribution-NonCommercial 4.0 International License
http://creativecommons.org/licenses/by-nc/4.0/

6
Resent-main/README.md Normal file
View File

@ -0,0 +1,6 @@
# TODO
* Add more settings
* Add QOL features
* NumberSetting ui
* Main Menu

84
Resent-main/build.gradle Normal file
View File

@ -0,0 +1,84 @@
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'io.github.zebalu:teavm-gradle-plugin:1.0.0'
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'io.github.zebalu.teavm-gradle-plugin'
sourceCompatibility = 1.8
targetCompatibility = 1.8
sourceSets {
main {
java {
srcDir 'src/main/java'
srcDir 'src/teavm/java'
srcDir 'sp-server/src/ipc/java'
}
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.teavm:teavm-platform:0.6.1'
implementation 'org.teavm:teavm-classlib:0.6.1'
}
teavm {
compileScopes = null;
minifying = false;
maxTopLevelNames = 10000;
properties = null;
debugInformationGenerated = false;
sourceMapsGenerated = true;
sourceFilesCopied = false;
incremental = false;
transformers = null;
/** Where to save the result */
targetDirectory = file("javascript");
/** The directory to monitor to decide if compile is up-to-date or not */
sourceDirectory = file("src");
/** How to name the result file. */
targetFileName = "classes.js";
/** Which class holds your public static void main(Strin[] args) method */
mainClass = 'net.lax1dude.eaglercraft.Client';
/** This will be the name of your main method after compilation. */
entryPointName = 'main';
classesToPreserve = null;
stopOnErrors = false;
optimizationLevel = "ADVANCED"; //org.teavm.vm.TeaVMOptimizationLevel.SIMPLE;
fastGlobalAnalysis = false;
targetType = "JAVASCRIPT"; //org.teavm.tooling.TeaVMTargetType.JAVASCRIPT;
cacheDirectory = null;
wasmVersion = "V_0x1"; //org.teavm.backend.wasm.render.WasmBinaryVersion.V_0x1;
minHeapSize = 4;
maxHeapSize = 128;
outOfProcess = false;
processMemory = 512;
longjmpSupported = true;
heapDump = false;
/** Add name of configurations here where to look for jarfiles. */
includeJarsFrom = [];
/** By default teavmc taskd epends on javaCompile task, unless this varaibale is true. */
skipJavaCompile = false;
}

Binary file not shown.

View File

@ -0,0 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

234
Resent-main/gradlew vendored Executable file
View File

@ -0,0 +1,234 @@
#!/bin/sh
#
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
#
# Gradle start up script for POSIX generated by Gradle.
#
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
app_path=$0
# Need this for daisy-chained symlinks.
while
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
[ -h "$app_path" ]
do
ls=$( ls -ld "$app_path" )
link=${ls#*' -> '}
case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
APP_NAME="Gradle"
APP_BASE_NAME=${0##*/}
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
warn () {
echo "$*"
} >&2
die () {
echo
echo "$*"
echo
exit 1
} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in #(
CYGWIN* ) cygwin=true ;; #(
Darwin* ) darwin=true ;; #(
MSYS* | MINGW* ) msys=true ;; #(
NONSTOP* ) nonstop=true ;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD=$JAVA_HOME/jre/sh/java
else
JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
fi
# Collect all arguments for the java command, stacking in reverse order:
# * args from the command line
# * the main class name
# * -classpath
# * -D...appname settings
# * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@"

View File

@ -29,6 +29,9 @@ if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0 set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME% set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@ -37,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1 %JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init if "%ERRORLEVEL%" == "0" goto execute
echo. echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@ -51,7 +54,7 @@ goto fail
set JAVA_HOME=%JAVA_HOME:"=% set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init if exist "%JAVA_EXE%" goto execute
echo. echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
@ -61,28 +64,14 @@ echo location of your Java installation.
goto fail goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute :execute
@rem Setup the command line @rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle @rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end :end
@rem End local scope for the variables with windows NT shell @rem End local scope for the variables with windows NT shell

Binary file not shown.

View File

@ -0,0 +1 @@
!function (t) { var e = {}; function n(r) { if (e[r]) return e[r].exports; var o = e[r] = { i: r, l: !1, exports: {} }; return t[r].call(o.exports, o, o.exports, n), o.l = !0, o.exports } n.m = t, n.c = e, n.d = function (t, e, r) { n.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: r }) }, n.r = function (t) { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(t, "__esModule", { value: !0 }) }, n.t = function (t, e) { if (1 & e && (t = n(t)), 8 & e) return t; if (4 & e && "object" == typeof t && t && t.__esModule) return t; var r = Object.create(null); if (n.r(r), Object.defineProperty(r, "default", { enumerable: !0, value: t }), 2 & e && "string" != typeof t) for (var o in t) n.d(r, o, function (e) { return t[e] }.bind(null, o)); return r }, n.n = function (t) { var e = t && t.__esModule ? function () { return t.default } : function () { return t }; return n.d(e, "a", e), e }, n.o = function (t, e) { return Object.prototype.hasOwnProperty.call(t, e) }, n.p = "", n(n.s = 93) }({ 3: function (t, e, n) { "use strict"; n.d(e, "a", (function () { return r })), n.d(e, "c", (function () { return o })), n.d(e, "g", (function () { return i })), n.d(e, "j", (function () { return a })), n.d(e, "i", (function () { return d })), n.d(e, "b", (function () { return f })), n.d(e, "k", (function () { return u })), n.d(e, "d", (function () { return p })), n.d(e, "e", (function () { return l })), n.d(e, "f", (function () { return m })), n.d(e, "h", (function () { return v })); var r = { images: ["bmp", "jpeg", "jpg", "ttf", "pict", "svg", "webp", "eps", "svgz", "gif", "png", "ico", "tif", "tiff", "bpg", "avif", "jxl"], video: ["mp4", "3gp", "webm", "mkv", "flv", "f4v", "f4p", "f4bogv", "drc", "avi", "mov", "qt", "wmv", "amv", "mpg", "mp2", "mpeg", "mpe", "m2v", "m4v", "3g2", "gifv", "mpv", "av1", "ts", "tsv", "tsa", "m2t", "m3u8"], audio: ["mid", "midi", "aac", "aiff", "flac", "m4a", "m4p", "mp3", "ogg", "oga", "mogg", "opus", "ra", "rm", "wav", "webm", "f4a", "pat"], interchange: ["json", "yaml", "xml", "csv", "toml", "ini", "bson", "asn1", "ubj"], archives: ["jar", "iso", "tar", "tgz", "tbz2", "tlz", "gz", "bz2", "xz", "lz", "z", "7z", "apk", "dmg", "rar", "lzma", "txz", "zip", "zipx"], documents: ["pdf", "ps", "doc", "docx", "ppt", "pptx", "xls", "otf", "xlsx"], other: ["srt", "swf"] }, o = ["js", "cjs", "mjs", "css"], c = "arc:", i = { COMLINK_INIT: "".concat(c, "comlink:init"), NODE_ID: "".concat(c, ":nodeId"), CLIENT_TEARDOWN: "".concat(c, "client:teardown"), CLIENT_TAB_ID: "".concat(c, "client:tabId"), CDN_CONFIG: "".concat(c, "cdn:config"), P2P_CLIENT_READY: "".concat(c, "cdn:ready"), STORED_FIDS: "".concat(c, "cdn:storedFids"), SW_HEALTH_CHECK: "".concat(c, "cdn:healthCheck"), WIDGET_CONFIG: "".concat(c, "widget:config"), WIDGET_INIT: "".concat(c, "widget:init"), WIDGET_UI_LOAD: "".concat(c, "widget:load"), BROKER_LOAD: "".concat(c, "broker:load"), RENDER_FILE: "".concat(c, "inlay:renderFile"), FILE_RENDERED: "".concat(c, "inlay:fileRendered") }, a = "serviceWorker", d = "/".concat("shared-worker", ".js"), f = "/".concat("dedicated-worker", ".js"), u = "/".concat("arc-sw-core", ".js"), s = "".concat("arc-sw", ".js"), p = ("/".concat(s), "/".concat("arc-sw"), "arc-db"), l = "key-val-store", m = 2 ** 17, v = "".concat("https://warden.arc.io", "/mailbox/propertySession"); "".concat("https://warden.arc.io", "/mailbox/transfers") }, 93: function (t, e, n) { "use strict"; n.r(e); var r = n(3); if ("undefined" != typeof ServiceWorkerGlobalScope) { var o = "https://arc.io" + r.k; importScripts(o) } else if ("undefined" != typeof SharedWorkerGlobalScope) { var c = "https://arc.io" + r.i; importScripts(c) } else if ("undefined" != typeof DedicatedWorkerGlobalScope) { var i = "https://arc.io" + r.b; importScripts(i) } } });

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,779 @@
"use strict";
/*
This is the backend for voice channels and LAN servers in eaglercraft
it links with TeaVM EaglerAdapter at runtime
Copyright 2022 ayunami2000 & lax1dude. All rights reserved.
*/
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%% VOICE CODE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
window.initializeVoiceClient = (() => {
const READYSTATE_NONE = 0;
const READYSTATE_ABORTED = -1;
const READYSTATE_DEVICE_INITIALIZED = 1;
const PEERSTATE_FAILED = 0;
const PEERSTATE_SUCCESS = 1;
const PEERSTATE_LOADING = 2;
class EaglercraftVoicePeer {
constructor(client, peerId, peerConnection, offer) {
this.client = client;
this.peerId = peerId;
this.peerConnection = peerConnection;
this.stream = null;
const self = this;
this.peerConnection.addEventListener("icecandidate", (evt) => {
if(evt.candidate) {
self.client.iceCandidateHandler(self.peerId, JSON.stringify({ sdpMLineIndex: evt.candidate.sdpMLineIndex, candidate: evt.candidate.candidate }));
}
});
this.peerConnection.addEventListener("track", (evt) => {
self.rawStream = evt.streams[0];
const aud = new Audio();
aud.autoplay = true;
aud.muted = true;
aud.onended = function() {
aud.remove();
};
aud.srcObject = self.rawStream;
self.client.peerTrackHandler(self.peerId, self.rawStream);
});
this.peerConnection.addStream(this.client.localMediaStream.stream);
if (offer) {
this.peerConnection.createOffer((desc) => {
const selfDesc = desc;
self.peerConnection.setLocalDescription(selfDesc, () => {
self.client.descriptionHandler(self.peerId, JSON.stringify(selfDesc));
if (self.client.peerStateInitial != PEERSTATE_SUCCESS) self.client.peerStateInitial = PEERSTATE_SUCCESS;
}, (err) => {
console.error("Failed to set local description for \"" + self.peerId + "\"! " + err);
if (self.client.peerStateInitial == PEERSTATE_LOADING) self.client.peerStateInitial = PEERSTATE_FAILED;
self.client.signalDisconnect(self.peerId);
});
}, (err) => {
console.error("Failed to set create offer for \"" + self.peerId + "\"! " + err);
if (self.client.peerStateInitial == PEERSTATE_LOADING) self.client.peerStateInitial = PEERSTATE_FAILED;
self.client.signalDisconnect(self.peerId);
});
}
this.peerConnection.addEventListener("connectionstatechange", (evt) => {
if(self.peerConnection.connectionState === 'disconnected') {
self.client.signalDisconnect(self.peerId);
} else if (self.peerConnection.connectionState === 'connected') {
if (self.client.peerState != PEERSTATE_SUCCESS) self.client.peerState = PEERSTATE_SUCCESS;
} else if (self.peerConnection.connectionState === 'failed') {
if (self.client.peerState == PEERSTATE_LOADING) self.client.peerState = PEERSTATE_FAILED;
self.client.signalDisconnect(self.peerId);
}
});
}
disconnect() {
this.peerConnection.close();
}
mute(muted) {
this.rawStream.getAudioTracks()[0].enabled = !muted;
}
setRemoteDescription(descJSON) {
const self = this;
try {
const remoteDesc = JSON.parse(descJSON);
this.peerConnection.setRemoteDescription(remoteDesc, () => {
if(remoteDesc.type == 'offer') {
self.peerConnection.createAnswer((desc) => {
const selfDesc = desc;
self.peerConnection.setLocalDescription(selfDesc, () => {
self.client.descriptionHandler(self.peerId, JSON.stringify(selfDesc));
if (self.client.peerStateDesc != PEERSTATE_SUCCESS) self.client.peerStateDesc = PEERSTATE_SUCCESS;
}, (err) => {
console.error("Failed to set local description for \"" + self.peerId + "\"! " + err);
if (self.client.peerStateDesc == PEERSTATE_LOADING) self.client.peerStateDesc = PEERSTATE_FAILED;
self.client.signalDisconnect(self.peerId);
});
}, (err) => {
console.error("Failed to create answer for \"" + self.peerId + "\"! " + err);
if (self.client.peerStateDesc == PEERSTATE_LOADING) self.client.peerStateDesc = PEERSTATE_FAILED;
self.client.signalDisconnect(self.peerId);
});
}
}, (err) => {
console.error("Failed to set remote description for \"" + self.peerId + "\"! " + err);
if (self.client.peerStateDesc == PEERSTATE_LOADING) self.client.peerStateDesc = PEERSTATE_FAILED;
self.client.signalDisconnect(self.peerId);
});
} catch (err) {
console.error("Failed to parse remote description for \"" + self.peerId + "\"! " + err);
if (self.client.peerStateDesc == PEERSTATE_LOADING) self.client.peerStateDesc = PEERSTATE_FAILED;
self.client.signalDisconnect(self.peerId);
}
}
addICECandidate(candidate) {
try {
this.peerConnection.addIceCandidate(new RTCIceCandidate(JSON.parse(candidate)));
if (this.client.peerStateIce != PEERSTATE_SUCCESS) this.client.peerStateIce = PEERSTATE_SUCCESS;
} catch (err) {
console.error("Failed to parse ice candidate for \"" + this.peerId + "\"! " + err);
if (this.client.peerStateIce == PEERSTATE_LOADING) this.client.peerStateIce = PEERSTATE_FAILED;
this.client.signalDisconnect(this.peerId);
}
}
}
class EaglercraftVoiceClient {
constructor() {
this.ICEServers = [];
this.hasInit = false;
this.peerList = new Map();
this.readyState = READYSTATE_NONE;
this.peerState = PEERSTATE_LOADING;
this.peerStateConnect = PEERSTATE_LOADING;
this.peerStateInitial = PEERSTATE_LOADING;
this.peerStateDesc = PEERSTATE_LOADING;
this.peerStateIce = PEERSTATE_LOADING;
this.iceCandidateHandler = null;
this.descriptionHandler = null;
this.peerTrackHandler = null;
this.peerDisconnectHandler = null;
this.microphoneVolumeAudioContext = null;
}
voiceClientSupported() {
return typeof window.RTCPeerConnection !== "undefined" && typeof navigator.mediaDevices !== "undefined" &&
typeof navigator.mediaDevices.getUserMedia !== "undefined";
}
setICEServers(urls) {
this.ICEServers.length = 0;
for(var i = 0; i < urls.length; ++i) {
var etr = urls[i].split(";");
if(etr.length == 1) {
this.ICEServers.push({ urls: etr[0] });
}else if(etr.length == 3) {
this.ICEServers.push({ urls: etr[0], username: etr[1], credential: etr[2] });
}
}
}
setICECandidateHandler(cb) {
this.iceCandidateHandler = cb;
}
setDescriptionHandler(cb) {
this.descriptionHandler = cb;
}
setPeerTrackHandler(cb) {
this.peerTrackHandler = cb;
}
setPeerDisconnectHandler(cb) {
this.peerDisconnectHandler = cb;
}
activateVoice(tk) {
if(this.hasInit) this.localRawMediaStream.getAudioTracks()[0].enabled = tk;
}
initializeDevices() {
if(!this.hasInit) {
const self = this;
navigator.mediaDevices.getUserMedia({ audio: true, video: false }).then((stream) => {
self.microphoneVolumeAudioContext = new AudioContext();
self.localRawMediaStream = stream;
self.localRawMediaStream.getAudioTracks()[0].enabled = false;
self.localMediaStream = self.microphoneVolumeAudioContext.createMediaStreamDestination();
self.localMediaStreamGain = self.microphoneVolumeAudioContext.createGain();
var localStreamIn = self.microphoneVolumeAudioContext.createMediaStreamSource(stream);
localStreamIn.connect(self.localMediaStreamGain);
self.localMediaStreamGain.connect(self.localMediaStream);
self.localMediaStreamGain.gain.value = 1.0;
self.readyState = READYSTATE_DEVICE_INITIALIZED;
this.hasInit = true;
}).catch((err) => {
self.readyState = READYSTATE_ABORTED;
});
}else {
this.readyState = READYSTATE_DEVICE_INITIALIZED;
}
}
setMicVolume(val) {
if(this.hasInit) {
if(val > 0.5) val = 0.5 + (val - 0.5) * 2.0;
if(val > 1.5) val = 1.5;
if(val < 0.0) val = 0.0;
this.localMediaStreamGain.gain.value = val * 2.0;
}
}
resetPeerStates() {
this.peerState = this.peerStateConnect = this.peerStateInitial = this.peerStateDesc = this.peerStateIce = PEERSTATE_LOADING;
}
getPeerState() {
return this.peerState;
}
getPeerStateConnect() {
return this.peerStateConnect;
}
getPeerStateInitial() {
return this.peerStateInitial;
}
getPeerStateDesc() {
return this.peerStateDesc;
}
getPeerStateIce() {
return this.peerStateIce;
}
getReadyState() {
return this.readyState;
}
signalConnect(peerId, offer) {
if (!this.hasInit) this.initializeDevices();
try {
const peerConnection = new RTCPeerConnection({ iceServers: this.ICEServers, optional: [ { DtlsSrtpKeyAgreement: true } ] });
const peerInstance = new EaglercraftVoicePeer(this, peerId, peerConnection, offer);
this.peerList.set(peerId, peerInstance);
if (this.peerStateConnect != PEERSTATE_SUCCESS) this.peerStateConnect = PEERSTATE_SUCCESS;
} catch (e) {
if (this.peerStateConnect == PEERSTATE_LOADING) this.peerStateConnect = PEERSTATE_FAILED;
}
}
signalDescription(peerId, descJSON) {
var thePeer = this.peerList.get(peerId);
if((typeof thePeer !== "undefined") && thePeer !== null) {
thePeer.setRemoteDescription(descJSON);
}
}
signalDisconnect(peerId, quiet) {
var thePeer = this.peerList.get(peerId);
if((typeof thePeer !== "undefined") && thePeer !== null) {
this.peerList.delete(thePeer);
try {
thePeer.disconnect();
}catch(e) {}
this.peerDisconnectHandler(peerId, quiet);
}
}
mutePeer(peerId, muted) {
var thePeer = this.peerList.get(peerId);
if((typeof thePeer !== "undefined") && thePeer !== null) {
thePeer.mute(muted);
}
}
signalICECandidate(peerId, candidate) {
var thePeer = this.peerList.get(peerId);
if((typeof thePeer !== "undefined") && thePeer !== null) {
thePeer.addICECandidate(candidate);
}
}
}
window.constructVoiceClient = () => new EaglercraftVoiceClient();
});
window.startVoiceClient = () => {
if(typeof window.constructVoiceClient !== "function") {
window.initializeVoiceClient();
}
return window.constructVoiceClient();
};
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%% LAN CLIENT CODE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
window.initializeLANClient = (() => {
const READYSTATE_INIT_FAILED = -2;
const READYSTATE_FAILED = -1;
const READYSTATE_DISCONNECTED = 0;
const READYSTATE_CONNECTING = 1;
const READYSTATE_CONNECTED = 2;
class EaglercraftLANClient {
constructor() {
this.ICEServers = [];
this.peerConnection = null;
this.dataChannel = null;
this.readyState = READYSTATE_CONNECTING;
this.iceCandidateHandler = null;
this.descriptionHandler = null;
this.remoteDataChannelHandler = null;
this.remoteDisconnectHandler = null;
this.remotePacketHandler = null;
}
LANClientSupported() {
return typeof window.RTCPeerConnection !== "undefined";
}
initializeClient() {
try {
if(this.dataChannel != null) {
this.dataChannel.close();
this.dataChannel = null;
}
if(this.peerConnection != null) {
this.peerConnection.close();
}
this.peerConnection = new RTCPeerConnection({ iceServers: this.ICEServers, optional: [ { DtlsSrtpKeyAgreement: true } ] });
this.readyState = READYSTATE_CONNECTING;
} catch (e) {
this.readyState = READYSTATE_INIT_FAILED;
}
}
setICEServers(urls) {
this.ICEServers.length = 0;
for(var i = 0; i < urls.length; ++i) {
var etr = urls[i].split(";");
if(etr.length == 1) {
this.ICEServers.push({ urls: etr[0] });
}else if(etr.length == 3) {
this.ICEServers.push({ urls: etr[0], username: etr[1], credential: etr[2] });
}
}
}
setICECandidateHandler(cb) {
this.iceCandidateHandler = cb;
}
setDescriptionHandler(cb) {
this.descriptionHandler = cb;
}
setRemoteDataChannelHandler(cb) {
this.remoteDataChannelHandler = cb;
}
setRemoteDisconnectHandler(cb) {
this.remoteDisconnectHandler = cb;
}
setRemotePacketHandler(cb) {
this.remotePacketHandler = cb;
}
getReadyState() {
return this.readyState;
}
sendPacketToServer(buffer) {
if(this.dataChannel != null && this.dataChannel.readyState == "open") {
this.dataChannel.send(buffer);
}else {
this.signalRemoteDisconnect(false);
}
}
signalRemoteConnect() {
const self = this;
const iceCandidates = [];
this.peerConnection.addEventListener("icecandidate", (evt) => {
if(evt.candidate) {
if(iceCandidates.length == 0) setTimeout(() => {
if(self.peerConnection != null && self.peerConnection.connectionState != "disconnected") {
self.iceCandidateHandler(JSON.stringify(iceCandidates));
iceCandidates.length = 0;
}
}, 3000);
iceCandidates.push({ sdpMLineIndex: evt.candidate.sdpMLineIndex, candidate: evt.candidate.candidate });
}
});
this.dataChannel = this.peerConnection.createDataChannel("lan");
this.dataChannel.binaryType = "arraybuffer";
this.dataChannel.addEventListener("open", async (evt) => {
while(iceCandidates.length > 0) {
await new Promise(resolve => setTimeout(resolve, 0));
}
self.remoteDataChannelHandler(self.dataChannel);
});
this.dataChannel.addEventListener("message", (evt) => {
self.remotePacketHandler(evt.data);
}, false);
this.peerConnection.createOffer((desc) => {
const selfDesc = desc;
self.peerConnection.setLocalDescription(selfDesc, () => {
self.descriptionHandler(JSON.stringify(selfDesc));
}, (err) => {
console.error("Failed to set local description! " + err);
self.readyState = READYSTATE_FAILED;
self.signalRemoteDisconnect(false);
});
}, (err) => {
console.error("Failed to set create offer! " + err);
self.readyState = READYSTATE_FAILED;
self.signalRemoteDisconnect(false);
});
this.peerConnection.addEventListener("connectionstatechange", (evt) => {
if(self.peerConnection.connectionState === 'disconnected') {
self.signalRemoteDisconnect(false);
} else if (self.peerConnection.connectionState === 'connected') {
self.readyState = READYSTATE_CONNECTED;
} else if (self.peerConnection.connectionState === 'failed') {
self.readyState = READYSTATE_FAILED;
self.signalRemoteDisconnect(false);
}
});
}
signalRemoteDescription(descJSON) {
try {
this.peerConnection.setRemoteDescription(JSON.parse(descJSON));
} catch (e) {
console.error(e);
this.readyState = READYSTATE_FAILED;
this.signalRemoteDisconnect(false);
}
}
signalRemoteICECandidate(candidates) {
try {
const candidateList = JSON.parse(candidates);
for (let candidate of candidateList) {
this.peerConnection.addIceCandidate(candidate);
}
} catch (e) {
console.error(e);
this.readyState = READYSTATE_FAILED;
this.signalRemoteDisconnect(false);
}
}
signalRemoteDisconnect(quiet) {
if(this.dataChannel != null) {
this.dataChannel.close();
this.dataChannel = null;
}
if(this.peerConnection != null) {
this.peerConnection.close();
}
if(!quiet) this.remoteDisconnectHandler();
this.readyState = READYSTATE_DISCONNECTED;
}
};
window.constructLANClient = () => new EaglercraftLANClient();
});
window.startLANClient = () => {
if(typeof window.constructLANClient !== "function") {
window.initializeLANClient();
}
return window.constructLANClient();
};
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%% LAN SERVER CODE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
window.initializeLANServer = (() => {
const PEERSTATE_FAILED = 0;
const PEERSTATE_SUCCESS = 1;
const PEERSTATE_LOADING = 2;
class EaglercraftLANPeer {
constructor(client, peerId, peerConnection) {
this.client = client;
this.peerId = peerId;
this.peerConnection = peerConnection;
this.dataChannel = null;
const self = this;
const iceCandidates = [];
this.peerConnection.addEventListener("icecandidate", (evt) => {
if(evt.candidate) {
if(iceCandidates.length == 0) setTimeout(() => {
if(self.peerConnection != null && self.peerConnection.connectionState != "disconnected") {
self.client.iceCandidateHandler(self.peerId, JSON.stringify(iceCandidates));
iceCandidates.length = 0;
}
}, 3000);
iceCandidates.push({ sdpMLineIndex: evt.candidate.sdpMLineIndex, candidate: evt.candidate.candidate });
}
});
this.peerConnection.addEventListener("datachannel", async (evt) => {
while(iceCandidates.length > 0) {
await new Promise(resolve => setTimeout(resolve, 0));
}
self.dataChannel = evt.channel;
self.client.remoteClientDataChannelHandler(self.peerId, self.dataChannel);
self.dataChannel.addEventListener("message", (evt) => {
self.client.remoteClientPacketHandler(self.peerId, evt.data);
}, false);
}, false);
this.peerConnection.addEventListener("connectionstatechange", (evt) => {
if(self.peerConnection.connectionState === 'disconnected') {
self.client.signalRemoteDisconnect(self.peerId);
} else if (self.peerConnection.connectionState === 'connected') {
if (self.client.peerState != PEERSTATE_SUCCESS) self.client.peerState = PEERSTATE_SUCCESS;
} else if (self.peerConnection.connectionState === 'failed') {
if (self.client.peerState == PEERSTATE_LOADING) self.client.peerState = PEERSTATE_FAILED;
self.client.signalRemoteDisconnect(self.peerId);
}
});
}
disconnect() {
if(this.dataChannel != null) {
this.dataChannel.close();
this.dataChannel = null;
}
this.peerConnection.close();
}
setRemoteDescription(descJSON) {
const self = this;
try {
const remoteDesc = JSON.parse(descJSON);
this.peerConnection.setRemoteDescription(remoteDesc, () => {
if(remoteDesc.type == 'offer') {
self.peerConnection.createAnswer((desc) => {
const selfDesc = desc;
self.peerConnection.setLocalDescription(selfDesc, () => {
self.client.descriptionHandler(self.peerId, JSON.stringify(selfDesc));
if (self.client.peerStateDesc != PEERSTATE_SUCCESS) self.client.peerStateDesc = PEERSTATE_SUCCESS;
}, (err) => {
console.error("Failed to set local description for \"" + self.peerId + "\"! " + err);
if (self.client.peerStateDesc == PEERSTATE_LOADING) self.client.peerStateDesc = PEERSTATE_FAILED;
self.client.signalRemoteDisconnect(self.peerId);
});
}, (err) => {
console.error("Failed to create answer for \"" + self.peerId + "\"! " + err);
if (self.client.peerStateDesc == PEERSTATE_LOADING) self.client.peerStateDesc = PEERSTATE_FAILED;
self.client.signalRemoteDisconnect(self.peerId);
});
}
}, (err) => {
console.error("Failed to set remote description for \"" + self.peerId + "\"! " + err);
if (self.client.peerStateDesc == PEERSTATE_LOADING) self.client.peerStateDesc = PEERSTATE_FAILED;
self.client.signalRemoteDisconnect(self.peerId);
});
} catch (err) {
console.error("Failed to parse remote description for \"" + self.peerId + "\"! " + err);
if (self.client.peerStateDesc == PEERSTATE_LOADING) self.client.peerStateDesc = PEERSTATE_FAILED;
self.client.signalRemoteDisconnect(self.peerId);
}
}
addICECandidate(candidates) {
try {
const candidateList = JSON.parse(candidates);
for (let candidate of candidateList) {
this.peerConnection.addIceCandidate(new RTCIceCandidate(candidate));
}
if (this.client.peerStateIce != PEERSTATE_SUCCESS) this.client.peerStateIce = PEERSTATE_SUCCESS;
} catch (err) {
console.error("Failed to parse ice candidate for \"" + this.peerId + "\"! " + err);
if (this.client.peerStateIce == PEERSTATE_LOADING) this.client.peerStateIce = PEERSTATE_FAILED;
this.client.signalRemoteDisconnect(this.peerId);
}
}
}
class EaglercraftLANServer {
constructor() {
this.ICEServers = [];
this.hasInit = false;
this.peerList = new Map();
this.peerState = PEERSTATE_LOADING;
this.peerStateConnect = PEERSTATE_LOADING;
this.peerStateInitial = PEERSTATE_LOADING;
this.peerStateDesc = PEERSTATE_LOADING;
this.peerStateIce = PEERSTATE_LOADING;
this.iceCandidateHandler = null;
this.descriptionHandler = null;
this.remoteClientDataChannelHandler = null;
this.remoteClientDisconnectHandler = null;
this.remoteClientPacketHandler = null;
}
LANServerSupported() {
return typeof window.RTCPeerConnection !== "undefined";
}
initializeServer() {
// nothing to do!
}
setICEServers(urls) {
this.ICEServers.length = 0;
for(var i = 0; i < urls.length; ++i) {
var etr = urls[i].split(";");
if(etr.length == 1) {
this.ICEServers.push({ urls: etr[0] });
}else if(etr.length == 3) {
this.ICEServers.push({ urls: etr[0], username: etr[1], credential: etr[2] });
}
}
}
setICECandidateHandler(cb) {
this.iceCandidateHandler = cb;
}
setDescriptionHandler(cb) {
this.descriptionHandler = cb;
}
setRemoteClientDataChannelHandler(cb) {
this.remoteClientDataChannelHandler = cb;
}
setRemoteClientDisconnectHandler(cb) {
this.remoteClientDisconnectHandler = cb;
}
setRemoteClientPacketHandler(cb) {
this.remoteClientPacketHandler = cb;
}
sendPacketToRemoteClient(peerId, buffer) {
var thePeer = this.peerList.get(peerId);
if((typeof thePeer !== "undefined") && thePeer !== null) {
if(thePeer.dataChannel != null && thePeer.dataChannel.readyState == "open") {
thePeer.dataChannel.send(buffer);
}else {
this.signalRemoteDisconnect(peerId);
}
}
}
resetPeerStates() {
this.peerState = this.peerStateConnect = this.peerStateInitial = this.peerStateDesc = this.peerStateIce = PEERSTATE_LOADING;
}
getPeerState() {
return this.peerState;
}
getPeerStateConnect() {
return this.peerStateConnect;
}
getPeerStateInitial() {
return this.peerStateInitial;
}
getPeerStateDesc() {
return this.peerStateDesc;
}
getPeerStateIce() {
return this.peerStateIce;
}
signalRemoteConnect(peerId) {
try {
const peerConnection = new RTCPeerConnection({ iceServers: this.ICEServers, optional: [ { DtlsSrtpKeyAgreement: true } ] });
const peerInstance = new EaglercraftLANPeer(this, peerId, peerConnection);
this.peerList.set(peerId, peerInstance);
if (this.peerStateConnect != PEERSTATE_SUCCESS) this.peerStateConnect = PEERSTATE_SUCCESS;
} catch (e) {
if (this.peerStateConnect == PEERSTATE_LOADING) this.peerStateConnect = PEERSTATE_FAILED;
}
}
signalRemoteDescription(peerId, descJSON) {
var thePeer = this.peerList.get(peerId);
if((typeof thePeer !== "undefined") && thePeer !== null) {
thePeer.setRemoteDescription(descJSON);
}
}
signalRemoteICECandidate(peerId, candidate) {
var thePeer = this.peerList.get(peerId);
if((typeof thePeer !== "undefined") && thePeer !== null) {
thePeer.addICECandidate(candidate);
}
}
signalRemoteDisconnect(peerId) {
if(peerId.length == 0) {
for(const thePeer of this.peerList.values()) {
if((typeof thePeer !== "undefined") && thePeer !== null) {
this.peerList.delete(peerId);
try {
thePeer.disconnect();
}catch(e) {}
this.remoteClientDisconnectHandler(peerId);
}
}
this.peerList.clear();
return;
}
var thePeer = this.peerList.get(peerId);
if((typeof thePeer !== "undefined") && thePeer !== null) {
this.peerList.delete(peerId);
try {
thePeer.disconnect();
}catch(e) {}
this.remoteClientDisconnectHandler(peerId);
}
}
countPeers() {
return this.peerList.size;
}
};
window.constructLANServer = () => new EaglercraftLANServer();
});
window.startLANServer = () => {
if(typeof window.constructLANServer !== "function") {
window.initializeLANServer();
}
return window.constructLANServer();
};

113
Resent-main/javascript/index.html vendored Normal file
View File

@ -0,0 +1,113 @@
<!DOCTYPE html>
<html>
<head>
<script async src="https://arc.io/widget.min.js#kRWdPhwX"></script>
<title>Resent Client</title>
<meta charset="UTF-8" />
<meta content="en-US" property="og:locale" />
<meta content="website" property="og:type" />
<!--meta content="IMAGE" property="og:image"/>-->
<script type="text/javascript" src="eagswebrtc.js"></script>
<script type="text/javascript" src="classes.js"></script>
<style>
@font-face {
font-family: "Product Sans";
src: url(ProductSans.ttf);
}
</style>
</head>
<body style="margin: 0; width: 100vw; height: 100vh;
background-image: url(bg1.png); font-family:
'Product Sans'" id="game_frame" >
<div id="Selection"
style="display: inline-block; position: absolute; top:50%; left: 50%; transform: translate(-50%, -50%); background-color: rgb(49, 51, 54); padding: 20px; border-radius: 10px; color : white; max-width: 300px; text-align: center;">
<div background-color: light-grey;>
<h1>Resent Client</h1>
</div>
<h3 >Select a texture pack:</h3>
<select id="Packs">
<option>-- Choose one --</option>
<option value="resent">Resent</option>
<option value="dino">Dino 16x</option>
<option value="eternity">Eternity(Unfinished)</option>
<option value="bda">BDA</option>
<option value="swiss">Swiss 16x</option>
<option value="skyline">Skyline 16x</option>
<option value="aquari">Aquari (Unfinished)</option>
<option value="venom">Venom 16x</option>
<option value="lunar">Lunar Client 16x</option>
<option value="tightfault">Tightfault revamped</option>
<option value="nicofruit">NicoFruit 16x</option>
<option value="1.17 PvP">1.17 PvP</option>
<option value="FruitFul32x">Fruitful 16x</option>
<option value="faithful">Faithful 32x</option>
<option value="Lemon">Lemon 16x</option>
<option value="defaultold">Default 1.5</option>
<option value="defaultnew">Default 1.17+</option>
<option value="bombies">Bombies 180k</option>
<option value="bones">Bare Bones</option>
<option value="modifiednew">Modified 1.17+</option>
<option value="miamiprivate">Miami Private</option>
<option value="nebula">Nebula</option>
<option value="ricefault">Ricefault</option>
<option value="walifault">Walifault</option>
</select>
<br /><br />
<input type="button" value="Launch" onclick="Start();" />
<h2>Made by hooman#1196/Nitwit. Packs created by Vortexian, Woody, BDA, Nin. Some are taken from Precision Client, precision was used as a base for the selection screen.</h2>
</div>
<script type="text/javascript">
if (document.location.href.startsWith("file:")) {
alert("You cannot 'open' this file in your browser, the code doesn't work. Upload this folder to your HTTP(s) server and access it via the internet to launch the stable-download game. This is not a bug, please read the documentation.");
} else {
var PackSelect = document.getElementById("Packs");
function Start() {
if (PackSelect.selectedIndex !== 0) {
var Selected = PackSelect.options[PackSelect.selectedIndex].value;
document.getElementById("Selection").style.display = "none";
localStorage.LastPack = Selected;
const relayId = Math.floor(Math.random() * 3);
window.eaglercraftOpts = {
container: "game_frame",
assetsURI: `packs/${Selected}.epk`,
serverWorkerURI: "worker_bootstrap.js",
worldsFolder: "MAIN",
servers: [ {serverName: "Blobcraft", serverAddress: "wss://blobcraft.minecraft.pe", hideAddress: false}, {serverName: "LegendSMP", serverAddress: "wss://legendsmp.minecraft.pe", hideAddress: false} ],
relays: [
{ addr: "wss://relay.deev.is/", name: "lax1dude relay #1", primary: relayId == 0 },
{ addr: "wss://relay.lax1dude.net/", name: "lax1dude relay #2", primary: relayId == 1 },
{ addr: "wss://relay.shhnowisnottheti.me/", name: "ayunami relay #1", primary: relayId == 2 }
],
mainMenu: {
splashes: ["Now with hotkeys!", "Created by Nitwit.", "More coming soon!"], eaglerLogo: false
}
};
(function () {
var q = window.location.search;
if (typeof q === 'string' && q.startsWith("?")) {
q = new URLSearchParams(q);
var s = q.get("server");
if (s) window.minecraftOpts.push(s);
}
})();
main();
} else
alert("You need to select a pack");
}
}
if (localStorage.LastPack)
for (Pack of PackSelect.children)
if (Pack.value === localStorage.LastPack) {
Pack.selected = "selected";
break;
}
</script>
</body>
</html>

View File

@ -0,0 +1,122 @@
window.music = (function () {
let audio = new Audio();
let songs = [ "CW6CMFPAsF4", "gz1xq2qJnHs", "RUEWIG8zoa0", "n02zTn2d3rY", "FoFqBB0r9OI", "Ugb7GUtiyZ0", "3UFyc7zN9KY", "V6N_rL4fh6I", "iBZS6ad3Tlk", "Mnb2RhXL-nM", "lidx_2d4YOA", "ETQJZHYlc3g", "kRpRoTaNni0", "ACy5tHoNUoA", "OKoA2ppQMkw", "-jcOtAuGZC4", "-cJFVNZC4h8", "yLFX_7SH2tY", "oP6wOte3wZU", "MT7ssDlcN_c", "dOu3APclRkU", "CElWZz_oCsA", "8wr8eqro_OI", "OlLUtndzw7A", "HBYS5mBHie4", "5HxGK3DTUBQ", "_9qUu8IeabE", "QaRbalghKl4", "PtjgNhXWr2U", "OqJi_n3AcV4", "WFFF-jMyFaQ", "FD56t_0B9ig", "x6EATApss4k", "vLv3r1jtnmc", "VLbMXG8lvjI", "-5h9Q5PMHkw", "M0opHPn2bSQ", "XbuqB3uB6DI", "ZCJo8CDyqlQ", "A1-fM0s1Yt0", "zfKvnd-f4fA", "zsLT3JqfTn0", "YZlclPLX1Hw", "AYdyRPIo4ZA", "loeGmoYr3s4", "0qhoqXTUQlY", "7KtwWWJqDrM", "uIk_jGypR24", "G9z_DmhSKjM", "IFWYSOsAuL8", "DhUieLpc16A", "b9W22zhQdkA", "lpm7-aEXD7I", "YIp1S0VfJVI", "BSC6d81pvwE", "aZlOBCXgIVg", "sG2yDNSSwaY", "RiVZCDq--m4", "-NXEcmszXzQ", "N2SW_MWBa6w", "2k5dqgNT37g", "T0cGZD15UaA", "6qTBIAkd8ns", "2_GUQC4nCl8", "9LlH78J_3bc", "9Ty-qFZZPZk", "6EDS01Ipaow", "R3rzdj_aP3U", "3Ax6jTZlu_g", "8GW6sLrK40k", "mfegGiVUk58", "mLmFpLivDRE", "GOQEOkPsdcM", "a4LZg9vIGT0", "720HcvEvEC8", "2GBsmmzm2j0", "YbdcrJZBtu8", "x0qKH1hJePs", "Ub7y69hg4do", "hFal0LKZwnM", "PzJtShkAkwA", "rYHNB_lPSNc", "Mr-wV17WFZU", "sVnRScxzPlA", "MATIBHTbLkw", "8DrtpB5Me6s", "EdFyQOngYJs", "3RyqONKuRzk", "jBPqr_IsWvY", "f6dnBVhH8AY", "dAalyaoVGfE", "DYRvdzUJMr0", "qFjaDnnPbA4", "RM9O1HO4FLE", "NrlhbIzjO04", "F6NNMAoBMS4", "UqVW7-q7fTA", "eDBAdAzCqr4", "EPT3dIWBbDA", "FuMtDXkuxVw", "PkmKM_OXNZM", "KbC46oJmLh4", "8HW9fyQdib4", "mRJSIYmHuNI", "GmLsIivtcIM", "rDBbaGCCIhk", "EyicJOlYOm4", "BDIG46sPKCs", "Ig5v4jhLLWI", "XZcG2esvW7I", "TTJBevUIp0s", "agIayif-oi0", "plm3DVsX7Jg", "yP7dvyK5OiY", "HA0Mk5BXX44", "HbtwR1REaFk", "-tUJJXWXdXk", "h-b8Xs7sNI0", "eyp-YuzhTN4", "xrawoRF4lN0", "6xVHpgJbuc8", "IdeMjEYeH_M", "mLFfI13jfeE", "fYSUV33ZPfw", "qnSHJlRJ2cM", "Ytt1_ErIV34", "_DBfb0-A6T0", "05TnpE0x4wI", "px-UnYP1smo", "dRAKbbYlTcI", "MYC5k-EvYyI", "GCkyGVsIcF0", "Qg83cniiYEY", "F7gwcgmoREg", "3I-WJ6UgmOA", "RakcYpzOI8A", "Tx0dUDrh_hE", "uRdnCC5kACY", "phrpiLpaiLs", "sLwHrqW-x4w", "wf93JAZR3gU", "7tBQFpFyZiI", "zz3F5j8qWNw", "Q7miO-Q-4bU", "j5FcOo48HpE", "CQLvggJFxuM", "_Ci0Kgdpgsw", "XYXUi4bn1pQ", "iBjZshhpipg", "-yXzE7undI4", "zEf46ulVSL0", "UBIsi3xWa64", "GWYkh1IX4PE", "n1hChZS9Hew", "YYjDFXJ6Wdo", "qOVxQ_yEYks", "9zibDnOOj3w", "rQMd3b1BF50", "xeM40-FkRLI", "wVOFnTrSOOA", "msUarvc4Sx8", "GB9kBLre96M", "p_wcC1l1cLk", "zKavYMyPveI", "YZ3no2EK58Y", "SLFMiEAjSoA", "K5F-RLzLH6Q", "A09BhpgfGKQ", "ziAK1OLeeEE", "7Vj-xVb0DWI", "33zGN7vENog", "zD8TxUBkjGA", "m0zPkt5BZ9I", "xktxgo7b8HQ", "jMSiM6iZpwk", "zeTIG5lwDyM", "CUHYQ-FN3P8", "GLGjqtgCKY8", "bLagC2wX3Ak", "fW128GHFJIE", "B5L0AMO2HA8", "oFFFzMkGNrk", "1RQQLwnaw80", "byUipqLQ_Hc", "_Rjh6zVEPH4", "R9z5CoO7Qxo", "neEq14x7mTU", "pkkIqT9LpDY", "BLRk8D7ovDY", "gMGEyl5TRa4" ];
let insturl = "https://invidious.zapashcanon.fr";
let loading = false;
let usealt = 0;
function shuffle (array) {
for (let i = 0; i < array.length; i++) {
let j = Math.floor(Math.random() * (array.length-i)) + i;
[array[i], array[j]] = [array[j], array[i]];
}
return array;
}
function fixfard (url) {
if (!url) return insturl;
return url.endsWith("/") ? url.slice(0, url.length - 1) : url;
}
const updinsturl = async () => {
try {
const json = await (await fetch("https://api.invidious.io/instances.json?sort_by=health")).json();
const out = shuffle(json).map(entry => {
const healthKnown = !!entry[1].monitor
return {
name: entry[0],
details: entry[1],
health: +(healthKnown ? entry[1].monitor.dailyRatios[0].ratio : 95),
healthKnown
}
}).filter(entry => {
return entry.details.type === "https" && entry.health > 0
}).sort((a, b) => {
return b.health - a.health
});
insturl = fixfard(out.find(e => e.details.cors).details.uri);
} catch (e) { aud.onerror(); }
};
const updint = setInterval(updinsturl, 3600000);
updinsturl();
audio.onended = function (e) {
loading = true;
start();
};
audio.oncanplay = function (e) {
if (loading) audio.play();
};
audio.onplay = function (e) {
loading = false;
if (usealt == 1) usealt = 0;
};
audio.onerror = function (e) {
if (usealt == 3) {
audio = null;
return;
}
if (usealt == 0 || usealt == 1) {
usealt++;
} else if (usealt == 2) {
loading = true;
usealt = 3;
}
stop();
if (usealt == 1) {
updinsturl();
} else {
clearInterval(updint);
}
if (usealt == 1 || usealt == 2) start();
};
const playing = function () {
return usealt == 3 || (!audio.paused) || loading;
};
const start = function() {
loading = true;
let url = "";
if (usealt == 0 || usealt == 1) {
songs = shuffle(songs);
url = insturl + "/latest_version?id=" + songs[0] + "&itag=251";
} else if (usealt == 2) {
url = "https://nightride.fm/stream/chillsynth.m4a";
} else if (usealt == 3) {
return;
}
audio.src = url;
audio.currentTime = 0;
};
const stop = function() {
if (usealt == 3) return;
audio.pause();
loading = false;
};
const volume = function(vol) {
audio.volume = vol;
};
return {
start: start,
stop: stop,
playing: playing,
volume: volume
};
})();
window.addEventListener("eagTitleMusic", function(e) {
if (e.detail.playing) {
if (!window.music.playing()) window.music.start();
} else {
if (window.music.playing()) window.music.stop();
}
window.music.volume(e.detail.volume);
});

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,5 @@
onmessage = function(o) {
importScripts("classes_server.js");
eaglercraftServerOpts = o.data;
main();
};

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 805 B

View File

@ -0,0 +1,446 @@
1000,43ddd8b48469d9a8c011718aa846facb
1001,aaed8c669f583cf35300f7c5d5396fce
1002,d517ae73160fd8576d7687ead1c1a973
1003,ac37df168bae3c69a24d7fd5bae913c7
1004,6d2591e94464b8327afadbdba44978d
1100,8b1df73e012e2ae34cd2d84a72a7898b
2000,c9ee0d494e0524c86a577cf684f5816d
2001,cd7a2836ea0b77b23a6131222f5be354
2002,381aeedb2c5c5a7a9a01333e0eebc839
2003,229048d1bb9e928831734cb2e5000286
2004,b2c088c3c6928bfe29684a75ae1b127c
2005,1ce3491a1021a5aed07c687e3f6133e6
2006,6c3d114caffd8160f7d56fc8757419a
2007,bcb501cfac8f7e73b455563bddbcb417
2008,e1aa93d7bba48898a32810c43c6ff5c3
2010,d0818779df1b967cc2f8ffc3ada631ec
2011,ecf0dbe93240e84edf6bd263645e634f
2020,b4a67353e11c3039ad755a3e96b4a046
2021,1bb21f7731a5b3ffc6a1e2b586dae3f5
2022,e58162e284df8fe339f05626eb46d835
2023,739948643f5f6f685aea81c42883a480
2024,799b0d35362a9574d3226c2d762b53c6
2025,5ec18fbb462516a1e1a3427e0595a7d6
16908544,12512904b67d2091dd516dc8eeb0cfa0
16908545,a5c35cc01a263f91419d3e8e981708f1
16908546,f6bdebf227e42c204066cede8cb5928c
16908547,9c44e6d3ab80afa2bb52fe3499559d5e
16908548,2e1799ddfdab14417c2a8e24d8c0c731
16908549,3f4169a181feb5d2532efc6aa91f2ee5
16908550,895725d3432cbf374b1cce4f7db28e9
16908551,12892864f18d30521b6f4a6c45b65ece
16908552,146f6c3458adde8e0bca04d976275f85
16908553,7c40dbd9451129b4762f3ab04ce7ffb9
16908554,56d763eeb6a0107c2146d7dccd686d2a
16908555,9a4fff004ae419711c2a876b57cba69f
16908556,170ff67dd90d8d3d8dae393037da5e9b
16908557,3e65d657af8611cb3578cd8713419d4c
16908558,f3cb95383f698c4e9721b5aaa5fac3a7
16908559,65bd006dc163a186f2dbb127f8ec0b27
16908560,8c6479d786f9117e04910153a4f47d86
16908561,75a25bd69f36250789d914ac01da34c1
16908562,87a28b2bf2fad838af72ce00e2fb1937
16908563,249ff32d605c5ba0a07694ff4fbbf15a
16908564,ba3b355eb9134bcd7522a1fc203c4c58
16908565,321e1cb3657d2aca73fb9a8083d9c3bf
16908566,adb182051fab2c2269df89b4f75e505e
16908567,3d9ae8982f01fb6a6c56cffbe2fa074e
16908568,1efffb054b2c864f5ebe180ae46891c3
16908569,25c73629d0b6b46690d222cecf331ba2
16908570,6a46694c996e5721b14c9da1f00fe62c
16908571,5efc1c291eef23fe33f5209388b8cc33
16908572,f71fc7deef6835c8efc305a00f1e8b8f
16908573,15484a373254c6024d90edf3b7a82947
16908574,8253f1aaa2205dcaf828903cfce46e4
16908575,ab778410d1fb2c0e55fec0c7d764b17c
16908576,19ad61c04ff3ae082955f72fc8771866
16908577,b5d3eeff40086643a03f034b5345504d
16908578,3d647bf5562e743263cbd90be36b6a1c
16908579,5a9d2fb7050009785421257d5ef24416
16908580,909b03e2d2eeee2e868b5aaf446e81ea
16908581,e603a4cbfdfcbf4d0bfe25efb753b424
16908582,e355f481f99220e50e4b2b2eb45dcc56
16908583,73a25e59c2d18ae77db02928b0a70e3
16908584,8f81a2fb647f817422a299829994de7b
16908585,128e9978380ee9ef981d2e12d008255e
16908586,fd1453f3e2a3125e7d16cfe6fd2d4722
16908587,8e27b6f750bec22333a5d4108ce1e094
16908588,b2169f6190bdf95236037bed2301712b
16908589,536e6340e5328075ede672428d94d921
16908590,cb9eede8b783b4a5d7ff7529e3fb1f44
16908591,267d51d891c3c32b3a02577d38f4e242
16908592,3f31e8ab260f02acca218c720fafc7b8
16908593,552869a63aa3151e79e875596f31e505
16908594,c5b0399e7fc64f0561a82063773e1282
16908595,cfd61cdbf22133caeca528da9b53474e
16908596,8d3802169313f270d5adcda790170ca2
16908597,a82c4f31d6d3f5bef9aa3062945c02d6
16908598,85eca649072752e9ffafdefa1287470f
16908599,98ffd259abbe2e4794c00716a9d2da7
16908600,263f8fab89ae0f9d695a74512443070b
16908601,b4ae28e8babe7bd09b2a392780565dbe
16908602,dfd84b5b35231267a47891cc8c8f48ba
16908603,f6990bbd57862a238aaf68b0c2f4c998
16908604,9dca837e109ae977a89ed64dd17fab10
16908605,ebdb407fd6e4d5c450f73173487c3162
16908606,fdf869946d814f4f2aeebe269db06e31
16908607,f9ea1fa393862a86e79ffade6a2662e7
16908608,60491b4f5956534afd5959e7c2411cda
16908609,b78fc6d8b8b8ecb1266eb9c04c5129b
16908610,add241f6dcfe6af3f096a45b96fb04e1
16908611,38760b28c0d26204b1e0383ca318947a
16908612,d3d8076b8b7a911b7cbbf5099f8ffd48
16908613,fc78be6fb5735b715325ac499990550e
16908614,a7504fcd85d6696a8880f32b97b34a60
16908615,f0821b6fdc8ebbf8a6fcb37c75086b1d
16908616,88b0e1b842fc88f0cbc5f38e95d68417
16908617,d977f8453c349a44baa7e05c3dd81cb8
16908618,26184c3c1edfa7623d5620433c0ff36
16908619,8edbf7f3996852add4fcb18008cb722f
16908620,39e5881696ed1141fb934593dd6bab70
16908621,1e0d787240ea16af6edbbdb1ab372fe7
16908622,af6ec83a0b072b4abd4194d8d43f7f02
16908623,658b5f77ff892a455a7fce5dc93268ac
16908624,6474336f089d541c9cec4a1df0c3b6cf
16908625,72cfc6fe503df207d53119aa7d5b84b4
16908626,3070c2283ca5fd0fe00f7880a4bcdf18
16908627,340cef5b043dceb7073ede0be69d700d
16908628,24dda1839a72d6707ed1932f6f32bd8e
16908629,1c50c7d94cec18710417d513708094d1
16908630,2b1f11fed636bf7892650b9adc9b8e94
16908631,afd9ba61c39fa742a840fe6ab2cfb490
16908632,b709157ffabe225e820218b020508173
16908633,3e9f7b867952f7b2df48e156402d558
16908634,ab9f22a1fbc265d19a4dd7f84f3a4585
16908635,c89cf9510108d63d7d181b3f7c546094
16908636,c7af3251ce44f2dafb2c192d817e9c52
16908637,796f607d214012447b7c552673f95b4a
16908638,ea796bd83dd7689d322085c74d0957a7
16908639,ce2f6f842d68418baad5fc2ecefcb879
16908640,6b3016429a5f814f3cccaff484a46831
16908641,7dea9bdb69c9c5965609eab99af9f9d9
16908642,3add5c50b3427182fcb7dd04fe953945
16908643,4175965cd5cee134d43038ac54858b0f
16908644,feae27a32b6cc95860ec46da6d37c4b0
16908645,5898813ee0b2785afc9dad2524f56162
16910544,adb04e128238341b88a18532f3448d13
16910545,8e274d3a14b5cb87cbce019d0a3b9a23
16974080,cfed396d9f54d3c04bc390a004916c52
16974081,64f1b3409c0937114f77f9933a4e2b82
16974082,5a6e9dc254405a6cb066472172fa09b1
16974083,b23adf8b24d9a42637977c3322f02b75
16974091,df1b76bca1e6a035d3e22e7c01f67bc6
16974092,4bb3d702d36739ba62041c0c936cbfb6
16974093,d02062bdb07f81100381ef87e6fc2922
16974094,1a0d208f9f489b37b800c6eeaaa752c9
16974095,34ee6807c2040168606740d0e3f46e30
16974096,9b8bb8517841df03f1a894b238251068
16974097,bb0b43349ffa6aa13b5d84ca70d25eb3
16974098,b3b647da85fe51c6da997e28b66cb4c3
16974099,d33c3d7d3fbc6880e0e03ce573644b1e
16974100,17d45fba9866349c133608e9d42e4ac9
16974101,74205e9529729bd0ef51c3d544c1e372
16974102,edf620106dc10c10a3357436a306400d
16974103,74b3a17953dca5a0cb9bb8c47b241eca
16974107,1938aff98985ef5e79c7003868c1e91
16974108,14b782f5d9afda571ce6c8bad868e2bd
16974109,cb124718b4ecfb29a900e1e617c79544
16974110,ae3c73a1546a058da74d4b8a588b59f2
16974114,cbdefe9bd14088ad45141843474d2bb0
16974115,641938697f84f6e7b59ebc08edc4648b
16974116,74ccb1de521aa54c65ffcb906ffd1d3b
16974117,fffed44e7bb844ad6c69f7eb4540cff3
16974118,536b2d3a4009eed61300bf5f0af7419e
16974122,8a8ea889723fc0f8de50c53339819871
16974123,768b65f8e24b1e042b75cf6f576cfcd1
16974124,a4b5522486920acfc2ed97e105c7831
16974125,6e9b513f3c219f4276556070b36a0339
16974126,942450301cd8068c9a14352c1cecc2d0
16974127,c98e2b8eb252d75a2a1f90144596ada4
16974128,7b13a95332dac62ad73cddf33d3bba0f
16974129,1951adc5a346867490626a854788b9ad
16974130,b75636944eeba77a4ce3f254460e0d49
16974131,bb5bc2285c0a2e24548533f59af76788
16974132,929561410b14786db52aa89b675a9759
16974133,6b07bd2605f311d8134a8170ba49fd73
16974134,2f97923d891e3e8c1967d53f7734ff55
16974135,dea0b11c8760d28eafbe76e25df7d301
16974136,586e309c00ba6f3c2ada595b742bef23
16974137,29e48d74dc5062eb900d376196fd4f23
16974138,fa79e8b641b225166b17ea86a9ecb174
16974139,7a66328b6b976337ff5bde5c7edccaa5
16974140,95559b402657cf222a87248d1e6ce0f5
16974141,52843420526ced65d57513afad342515
16974170,56690bacbebf8107b83e80528f40740
16908289,83cfae9a11032a88e08c95b7fcef84cc
16908291,39a4ea3b5ddf7f89b41faf675f7bfc0f
16908292,64ec21dc8495fb180cc94f59f873efb8
16908293,fda16e9858404b9545649ba21a828a6a
16908294,a57157213ffc25d269ea46e45984eae0
16908295,90f2ac6ac3005ad4cabcd248831f2205
16908296,4adafcbbef5ace168ca03e173af10452
16908298,bb2e0425d8b489fc856cab2c0828f2ff
16908300,76b80613789c553593097956002a392b
16908301,23bd5cc4fb97d25e432604be0958320d
16908302,7b129f5775b2d4997681338012130cad
16908303,4935425ac3ef59e71bca7c4c8bf7e2ea
16908304,564d5c2df622b99692929bedbcd7f4b1
16908305,e06bb538b6b224ce1376b47804ee2bbb
16908306,f13b4a0fa66e65ed33dcbd7ead08ac46
16908307,29710a54739e35ae0d34919fca091640
16908308,8693b46ac89dd595f8e3efd4437e6e90
16908309,3ebf10825c7d8f2e17deae70b37d1fbd
16908310,354d414b2a1f29494a80b3acedb72ae2
16908311,de662954670ec00899809b916abe6c60
16908312,831dd7a79cd7e5f3cad86690c6724902
16908313,265f19645487a858e4f53b9706cdff03
16908314,2ad06f9f7e24f920fb067e2f2cc7869c
16908315,99f3286cc36b9a4393b3e967878b01d4
16908316,4fbc91a39f7f4814f8f79ba425e4f30a
16908318,ccb82be2278587dd637ac763a1087c7
16908323,8e8a2f6a87c3701e76650680e7b2f6e6
16908325,fcd992a9a44518d5de6bd09c409ea7de
16908326,e41e706456c10963824e032484992946
16908327,662301d3344073cc69887a27a8c42f24
16908329,313738e052612f868d55f47940080288
16908330,79474b10f860f09be4e9183ad5f1c7b4
16908332,60a3062d151151a2ff229a02d3221337
16908333,833c8c420ce04aa18b9912ff05e5ced2
16908334,6e0f4183ad7abbb63c5b6a1ead24214a
16908335,477292deea02d72acc1087b2425c570a
16908336,82cf44076f1a94ed31f3172433a80ef6
16908337,84f64a9f8523d35a1cf8319f580dd578
16908338,b6365376050089a025a1ed1d85a85dba
16908339,4e989db8b445f22b61bd4d30daee1a05
16908340,50ec890e85029d44ea96bfa31d8ed16a
16908341,b4f23438454d39a742546dafd5d3cfc6
16908342,5414035b686e0fb0a1ce0d535d0a0f82
16908343,72d6218e86d3787422fa6b03f30ccaf3
16908344,ddfe42c53aae03dd94c2d3163869ddc0
16908345,b8b09ac7af1bb81e28715a3e0f0eeb17
16908346,c53d28ac584d8053ec438f692a58cd1a
16908347,243cf7fb2bf36e60e3a25cde83b33a5e
16908349,2837ae3dabc00c4c5515bafa34a302dc
16908351,4973e12438ce4c870f6ba1c158873c43
16908352,37678301896aa95cc358bcd73308232c
16908353,31c5e38768bda9a8a7cd1bbca7c9226d
16908354,5ff1e27f9ef25fcf0a3c51b0551f7fd2
16908355,60a060ee3e51167f4d87cf6d923f9ca7
16908356,b24aa4a609b3483b795c4f3bf89116b7
16908357,7a17a96ff758cd4ff8c0ffd070230cc7
16908358,c14586711c04239a174c192d24b8ce20
16908359,1f0abe2925128be5191932a1cc4a3019
16908360,a9c8343cf444aa7686d9dd2b40e90a47
16908361,94a02b3ef18bb35970105bf276001fe0
16908363,bfa45b4169d1944debabc84b04880837
16908365,a3d0bb31ba7c30209129e4366e072b05
16908366,de6d35451526c85c7c5907a0adcbeff7
16908367,4a0d45a9aedaa06eb574f88f580c265b
16908368,56ab2510d3cb4787bdcfa9680aa7e757
16908369,feef935305ae32e1972d3b017a4eb
16908370,41b270e7ecb39d0b81d1b60f32c3943
16908371,b159339fc55e60000efee4c55d0e1d1c
16908372,74ca5387c7d373fc88e65e0623d5991f
16908373,8b8ae20ea681d47cd899f74f75bde08d
16908374,5cb926f4743f6ccdb4988c8b35dc97dd
16908375,947a02e037fe9d31c8eb4c4a22dba58c
16908376,2c2a7e8a269a770cc4afbe695e662601
16908377,9a992e19651652de8b4f5ce07d1d2af0
16908378,3e37efadc720d972ddc30ccae606ab00
16908380,77b1802a2504a685bf8ff34a1f9de6c3
16908381,45c0dbda39dca97dc634a6e89f037716
16908383,ca404ded18b83fd872a5810c8a44517d
16843027,ecc0eb0ba51e2c14aaa006e168eacc8c
16842753,f6282e18f6f87e4cf68970579aac7219
16843026,6f3d105b3e6d1624af4ce68b2a55362d
16843025,aa1c8e137823bf5245f0d27c980796e7
16843024,ed65803a11251872c6cf659381d0aaaa
16843031,fa2f9de197813d8e32d78bd184603161
16842757,1a13db89ae6fdbb152856edbe3688d95
16843030,46bd8fadf2f12988d808e69dcfc138cb
16843029,bf398d8ec9fef1d04c67fbf474fda790
16843028,69ee29bc3bd715b3203d888ca2a88cc0
16843035,2f79ed9030fe0339dec2eb43f56fa369
16843034,e2f097a36cdf87a1b211d27eb31dea32
16843033,c02e9379a6624b40fef669494a7e7183
16843032,af44f7fe9a4366c67479a44b24ae80b
16843038,501ead1cb03222808aa09b376c9d5cac
16843037,a2d01853631a9b52006ad32497ddc865
16843036,6e381ac09bfc75ef7f71e02f3b99f279
16843010,bcfe734d49949142a5073766188213dc
16843011,88ea7e11c57b09139afe92169c443e20
16843008,91f14375672f1b2003202ec7682771cb
16843009,f5007e4886946d1eb603979a35726d69
16843014,b0bde3daab8a1cc6354cd86c65db90e2
16842772,b59c880de07e668eaba0888fc4de229a
16843015,7184233667abf34d2ee3eea20fb9f82b
16842775,bcc06ff4c56de9b4a1557d3c47ec1783
16842774,6f2eab110a33c15cb17238708244db4d
16843013,3fe45d065187550d481cc745780c29c2
16843018,7bddb0161d99059f0a6c1c09d0b35b34
16842777,fdc779803765398f0c782a1fd55a9d86
16842776,6b6c09ee89a933288c37f55d2187eddd
16843019,87545673867c5cf2f97ea6cc3e0d3595
16843016,e2288c9f60d09d5f2882175abf161bd
16842779,9667a31366f5dcf740d64b775402c64
16843017,e3108d8ee8530e50d7b425de217a4585
16843022,847f1b6f38ebf442a1d34cac0fd6080e
16843023,5d01d19f8441e4d5dd5c41266f480ffc
16842780,b02509b360e6f14eac4fb03f55c11fed
16843020,90e2ab194dab9f482eca64c651ea41e9
16843021,58d3e73bd29c14b6ec97d4187cee5500
16843057,bf533b7d78ccc350cfd2f41a8e1f0822
16842787,e49146643faf3308ca7246d82fc5b2bb
16843056,d8e023c15aa80df2445c782c6b2179da
16843059,c649596d99d96be696332cb08b4a33f2
16843058,d129fce211dfb56e80195a11f39ab1e9
16843061,441d86175b74884ef3f672066ae52c90
16843060,cf6d7dfef99b200a4551cd65467fb9fc
16843063,f50f8b7fafde6d640ced3ec4d797f807
16843062,d22de0ebc290280b2699b5cb77568fcb
16842794,d347d92a886b9d445d7d60b090a5bcda
16843065,a393477443f20a1a8a511c390024f963
16843064,e6f28eea0ebbad0d18d23ea3c15f2102
16843067,d6efe6a63f529d675417c2092546e144
16842793,d5ac3bcc56cbc370ae3b172dd6ed5df4
16843066,935aa84de286e8bced6a127b69347997
16842798,377a21bcb39dcfcb4a0902a7555a984f
16843069,63cc6da6165cc068740827890b4460ed
16843068,6dda3129884399b67b935bb4e51ad34f
16842799,d4831a785c1c65ad2054bb1232babf0c
16842796,48be99a37d3a885d38657a50d6f77365
16842797,8da03c2f611c7f0654aa71096832b5c
16842802,9b2a96570a99f6677e299d8215b1eecd
16843042,322d7c02f205806126f1529564ab3cd0
16843043,660acf0ca76261ec49deb7a7bd072f8c
16843044,d8dd28acc9e4431ff8eb481c1d8d9832
16842806,919bc6715eddf74c0517372ead95cdcb
16843045,72ae59db2ef5c472f671b31f1c6f07ce
16842805,9e359ce06b5603c820bd749592beb4a7
16843046,cee09c2303e44dfbbaadbf167cdc503c
16842810,8ecd9ec7607c958cdf2e252f516fe3d8
16843049,47171b2af8bb14c3816f52f79579b46d
16842809,fef5bbbc588422579bf3de8a49c73e18
16843050,6b29998dbe690122afdf6da71e905009
16843051,5f9f017aa89719c7a282aa222c65baf
16843052,216a61701714cb3f04e23a74a1336864
16843053,e146704e3fe30e6821352ceb3b090184
16842813,899942760d5a83d94cf58a536be6171e
16843054,5aa0a467c7451f88f9c6056e8c7427cc
16843055,6881fc74a0574433e9e0f05f7cae53f7
16843095,50f6c2ffdc69bea12cd7b58c69824be1
16842821,42b4814e4e61191b61a8d3f7c6041938
16843094,356c3f0d5b88d0e2077d85168eac6306
16842822,d69011621d777519c5ab6a68da8959
16843092,d84a39f3d30a72b13640e3afb7ea2018
16843091,37603e187bd7ad9dceccb8ef2b6b5335
16842817,bad6f1072232c28353aabf42142cbd26
16842818,bd0c4079c99e529e55abef5ac44dcdf8
16843088,5e5d08b1780bfd69747216c24b7aee92
16842819,ae608e1ca5ca083163d92974d7c66b06
16843103,d4d1b946336039e515c3e4a392694223
16842828,6a15bcf38bcf78021f9416ac395cac85
16843102,603020acbbdc6e8765c2e2cd589f7933
16842829,41cce73f9ce59993afa3517becd4bd3c
16842824,2368ffe803beb1d06772e96eeffd9cc9
16843099,c373e78822d440c926edf7f1b700d4c5
16843098,503a4fb49cbfebe1fb71ef185c8ced56
16843097,4e72dc4d35b34147ce69d691aa2937e3
16842837,4c903ddf3b9cd49a952a3889fc2c5573
16842836,a304f875b846d65498366479fbf34568
16843076,1b11a34d5c6cee280c727938ee96054b
16843077,ff170af78a0a674445f16e24394546c0
16843074,ba8bd10757ab9a4446f024952bf3f1e3
16843075,b34ec8f0f5f92acf230925c89eacec65
16842832,3b10180dc99ab99568b51010d89c655c
16843072,d752bd5dd907feec915d036d76707ee5
16843073,168e43895b105169862fa2e3c205529b
16842834,58efc828918aa006d5af09e32fe7799b
16843085,b30c099494e63d26f755d58ba109136a
16842841,2c471142bddf9a982a48e0ecb52cbb8
16843082,5574b9699d71e02f3efb48f3712da8bf
16843080,4945e39d1260ff273c49d39dfc58c2a8
16842843,bfc9dce4c1ccef959c57360fb9f70205
16843108,4e225dd49c0231b617a15ded1ba6cb0a
16843109,35715377a038019c56925b2e661cfdab
16843105,3b91182484dc677a0bf27263e612d818
16843106,affab7221afa03df4b7306b9ce50be7f
16843107,e3710bc197d17e0dc78ae3f607c46048
16777217,9012132a1d0f770eca67e62a68247137
16777219,58fc65723143afeb33f742c17e028c94
16777220,1d5e2088f7137e304366873dd829ca98
16777221,66a18fa3f554756edc12bf1a08586bc8
16777222,4007295f7bdae0b78a6e47a9d64521
16777228,c154160ce7b52d4bdc220fc954edf796
16777229,2400808c6f442f2663b6869e4930c879
16777230,7ae3b31e8e0f2f22f50fbf224e1fe4f7
16777231,fe5698e183b10037e38f979a411489b8
16777232,aeae00c7b4a95ff05423c1629bf3ad7e
16777233,72153ea3d60930cebf4c0d37fac89102
16777235,f517ab768fbb35e275440b74b6631bfc
16777236,623df9298630687873579ea16bb97e7b
16777237,6984cb9e6a322728be736860b97b971a
16777238,6947378f4e2abb24b47e2b943945b16f
16777239,55a585682bf0569a60a71a66f031ca2
16777240,f653295b0c48244dc2aa68fc5b94fa29
16777241,c213fb7ee968403b24ff6ede98686add
16777243,afd641da6f3834b319b761ba6d72ff74
16777244,8d822c710a221b8a407b2def97885470
16777246,9c99187cc6fd9c958417b4736772e4d3
16777251,6418210d69669c4a602148ed42ab2ecd
16777253,afe51ea56dc8c831f9b0b5ae02bac702
16777254,95812c1d4021558b6a7f62521228c52a
16777255,3a1252acb6fe968751d2b61d57557e09
16777257,fd7caeeb5d16756028f19ba016ed1970
16777258,6339b8043c05d19c6b15135eade95f94
16777260,aa1ed939a8b275df9dc5474bc0477a33
16777261,b631dcf219d3add3560f243ff6cceb75
16777262,91eca0c33ac53fb155feb15db48c43de
16777263,b681c19d7812c281b4b2feabb88697f4
16777264,a2b07ae4f37a65fe1f5992826b578b02
16777265,af5255a4dcb486e2ab11669fd3de8441
16777266,8a4b2b706f219e52a261e342b47a3964
16777269,921cb54cfb47ca9eca0edcf8e660e3cd
16777270,b79b3a522d1e2f865eb1e9aeb63dc66a
16777272,36e1c1dd8cbb267488e1669811319e7e
16777273,c84a7d710228024c2e100a79a2c30e55
16777274,a1674e3020689bae5680f29f937e5424
16777277,46b34dd723f7efeb38f670925ee3824f
16777281,da71e3e4f9a25c6621d2f0b40ffd1c72
16777282,388109bb9b9b49c1f5bb604abee91671
16777283,eb6912fd84b2d57ed3433acb3f85d3e6
16777285,619967351702f1d570d4d0195bbbcc1e
16777286,ebff74d54387fb154d5b467e01d92b64
16777288,f8154dd7c9c1d397dd64eeb6569d7d34
16777289,971cc6f827398c6c4755b310c6795672
16777291,bb952ff9523f248ddaae56317e91a509
16777293,e5c24577cf35a31bd217d206b88a7499
16777294,f4c170867c75982e604358da611b26e3
16777295,922200512d058ecc0ef19a0efcdb51bf
16777296,39283c3dbafb10b2a732f9d6ef3e08b6
16777297,3603ae881c41c957a89aaa30990c0040
16777298,fbf9e47600457d091060b0f877458a83
16777300,2b0d53bafa91c68bf59b5863354bd7ae
16777301,50b99fabae858e971eb02ed5146fd63a
16777302,7a32eac396b4cf3930ba9ca7b5d8dbae
16777303,115f1e956219026bb9cca0bcafb2b11b
16777304,afb2f032a96d859ca5f24d8ff129bd64
16777305,372b3a0fd7c09f64f3cfcab89f03a9a0
16777306,e4b6233ac91337dcc3940e309d21c3c
16777311,d290638555ce76ce3053c70fdacf7d55
5242880,8099ff561e194072c9086dea38757a89
5242881,90b3d9a90a8cf3e21527fc8fe3b43c49
5242882,c9806dd45be8ebed3e4ab94f66e65212
5242883,f382ded5f9a4299e3879dea4f7fe1c50
5242884,27af08a994f76a2a08ec8671d14fdcc2
5242885,9969ce4355ae7338470461f48f4e5ef5
5242886,39208e0b0f070629cad494da5fb95f0d
5242887,678e63329d3d813f22e0f15006a93768
5242888,694ffe9efa49193780d4b757115c9064
5242889,9080a51ccefd23f9924bae9a854e7b49
5242890,5f1d51ccd1b4adf141707907233f8379
5242891,73df45f45e0b7484ef51441ad0e50604
5242892,c9e52234c475354483dc3e9e6386af61
5242893,3c3ee1df989ecf5de70a5673acfa33b8
5242894,468cc8b546e1586406b78ad733976f5f
5242895,e546a7afaaa6c6729e3b062fc4ace4ae

Binary file not shown.

After

Width:  |  Height:  |  Size: 835 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 850 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 386 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 912 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 809 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 772 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 815 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

View File

@ -0,0 +1,60 @@
eaglercraft is an AOT compiled port of mojang's minecraft 1.5.2 designed to run in an html5/javascript environment, using TeaVM and my opengl 1.3 emulator to simulate a desktop java enviroment fully compatible with minecraft java edition
§1this §1was §1created §1by §1calder §1young §1(lax1dude)§r
§4project §4currently §4maintained §4by §4ayunami2000§r
compiling the javascript and emulating the JRE is largely made possible by the TeaVM project, created by Alexey Andreev and is available for free at §nhttp://teavm.org/§r under Apache License 2.0
eaglercraft also makes use of jCraft's jzlib port, available at §nhttp://www.jcraft.com/jzlib/§r under BSD-style licensing.
all graphical assets in this project were ripped from mojang's official minecraft.jar for minecraft version 1.5.2 and they are mojang's intellectual property. assets ommitted include the minecraft soundtrack and music disks and all software references to the mojang/minecraft api.
eaglercraft servers are powered by md_5's BungeeCord and the CraftBukkit project available at §nhttps://bukkit.org/§r. BungeeCord has been modified to accept eaglercraft's strange login packets and to host a websocket server to translate browser connections to raw TCP that vanilla minecraft servers can understand. All java plugins designed for CraftBukkit 1.5.2 are compatible with this configuration.
scroll down for the detailed license statements
========================================
Copyright (c) 2022 Calder Young.
This work is licensed under a Creative Commons
Attribution-NonCommercial 4.0 International License
§nhttp://creativecommons.org/licenses/by-nc/4.0/§r
========================================
TeaVM Copyright 2016 Alexey Andreev.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
§nhttp://www.apache.org/licenses/LICENSE-2.0§r
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
========================================
NVIDIA FXAA 3.11 by TIMOTHY LOTTES
Copyright (c) 2010, 2011 NVIDIA CORPORATION. ALL RIGHTS RESERVED.
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
========================================
JZlib Copyright (c) 2000-2011 ymnk, JCraft,Inc. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. 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.
3. The names of the authors may not be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED 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 JCRAFT, INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE 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.
========================================
|>

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 976 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 775 B

View File

@ -0,0 +1,10 @@
# This file NEEDS to be in UTF-8 format!
!"#$%&'()*+,-./
0123456789:;<=>?
@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_
'abcdefghijklmno
pqrstuvwxyz{|}~⌂
ÇüéâäàåçêëèïîìÄÅ
ÉæÆôöòûùÿÖÜø£Ø׃
áíóúñѪº¿®¬½¼¡«»

Binary file not shown.

After

Width:  |  Height:  |  Size: 563 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Some files were not shown because too many files have changed in this diff Show More