Starlike v0.2.0
10
.gitignore
vendored
@ -1,5 +1,7 @@
|
||||
.gradle
|
||||
.settings
|
||||
.classpath
|
||||
.project
|
||||
build
|
||||
bin
|
||||
proxyServer/bin
|
||||
@ -13,8 +15,14 @@ desktopRuntime/_eagstorage*
|
||||
desktopRuntime/filesystem/*
|
||||
desktopRuntime/downloads/*
|
||||
desktopRuntime/screenshots/*
|
||||
|
||||
javascript/assets.epk
|
||||
javascript/classes.js
|
||||
javascript/classes.js.map
|
||||
javascript/Starlike_Client_Offline.html
|
||||
/.metadata/
|
||||
javascript/Starlike_Client_Offline_Signed.html
|
||||
javascript/Starlike_Client_Offline_Signed.html.cert
|
||||
javascript/Starlike_Client_Offline_Signed.html.dat
|
||||
|
||||
.metadata
|
||||
|
||||
|
@ -1,306 +0,0 @@
|
||||
# Eaglercraft Code Standards
|
||||
|
||||
**These are some basic rules to follow if you would like to write code that is consistent with the Eaglercraft 1.8 codebase. If you are already familiar with Eaglercraft 1.5 or b1.3, please abandon whatever you think is the best practice as a result of reading that code, those clients should be considered as obsolete prototypes.**
|
||||
|
||||
## Part A. Coding Style
|
||||
|
||||
### 1. Tabs, not spaces
|
||||
|
||||
Tabs not spaces, it makes indentation easier to manage and reduces file size. Other popular projects that are also known to use tabs instead of spaces include the linux kernel. We prefer to set tab width to 4 spaces on our editors.
|
||||
|
||||
Format code like the eclipse formatter on factory settings
|
||||
|
||||
### 2. Avoid redundant hash map lookups
|
||||
|
||||
Don't retrieve the same value from a hash map more than once, that includes checking if an entry exists first before retrieving its value. If you do this, you are a horrible person!
|
||||
|
||||
**Incorrect:**
|
||||
|
||||
```java
|
||||
if(hashMap.containsKey("eagler")) {
|
||||
Object val = hashMap.get("eagler");
|
||||
// do something with val
|
||||
}
|
||||
```
|
||||
|
||||
**Correct:**
|
||||
|
||||
```java
|
||||
Object val = hashMap.get("eagler");
|
||||
if(val != null) {
|
||||
// do something with val
|
||||
}
|
||||
```
|
||||
|
||||
### 3. Cache the return value of a function if you plan to use it multiple times
|
||||
|
||||
This is somewhat an extension of rule #2, don't repeatedly call the same function multiple times if there's no reason to, even if its a relatively fast function. Everything is slower and less efficient in a browser.
|
||||
|
||||
**Incorrect:**
|
||||
|
||||
```java
|
||||
while(itr.hasNext()) {
|
||||
if(!Minecraft.getMinecraft().getRenderManager().getEntityClassRenderObject(SomeEntity.class).shouldRender(itr.next())) {
|
||||
itr.remove();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Correct:**
|
||||
|
||||
```java
|
||||
Render<SomeEntity> render = Minecraft.getMinecraft().getRenderManager().getEntityClassRenderObject(SomeEntity.class);
|
||||
while(itr.hasNext()) {
|
||||
if(!render.shouldRender(itr.next())) {
|
||||
itr.remove();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 4. Iterators aren't that great
|
||||
|
||||
Avoid using iterators when possible, this includes a `for(Item item : list)` type loop, since this may compile into bytecode that uses an iterator. If the list is a linked list or some other type of data structure that can’t perform random access efficiently, then it is recommended to use an iterator, but if the collection is guaranteed to be something similar to an ArrayList then implement it via a traditional for loop instead.
|
||||
|
||||
**Recommended way to iterate an ArrayList:**
|
||||
|
||||
```java
|
||||
for(int i = 0, l = list.size(); i < l; ++i) {
|
||||
Item item = list.get(i);
|
||||
// do something
|
||||
}
|
||||
```
|
||||
|
||||
### 5. Don't shit on the heap
|
||||
|
||||
Avoid creating temporary single-use objects in performance critical code, since the overhead of doing so is larger in a browser where there’s no type safety to predefine object structures. This includes using lambdas or using most of the stuff in the google guava package. Also this is partially why I prefer not using iterators whenever possible.
|
||||
|
||||
**Incorrect, creates 5 temporary objects:**
|
||||
|
||||
```java
|
||||
List<String> list1 = Arrays.asList("eagler", "eagler", "deevis");
|
||||
List<String> list2 = Lists.newArrayList(
|
||||
Collections2.transform(
|
||||
Collections2.filter(
|
||||
list1,
|
||||
(e) -> !e.equals("deevis")
|
||||
),
|
||||
(e) -> (e + "!")
|
||||
)
|
||||
);
|
||||
```
|
||||
|
||||
**Correct, creates no temporary objects:**
|
||||
|
||||
```java
|
||||
List<String> list1 = Arrays.asList("eagler", "eagler", "deevis");
|
||||
List<String> list2 = Lists.newArrayList();
|
||||
for(int i = 0, l = list1.size(); i < l; ++i) {
|
||||
String s = list1.get(i);
|
||||
if(!s.equals("deevis")) {
|
||||
list2.add(s + "!");
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
(note: we are ignoring the StringBuilder instances that the compiler generates from ` + "!"`)
|
||||
|
||||
### 6. Don't base game/render logic off of the system time
|
||||
|
||||
Use `EagRuntime.steadyTimeMillis()` instead to access a monotonic clock, as in a clock that is guaranteed to only run forwards, and is not affected by changes in the system time. `System.currentTimeMillis()` should only be used in situations where you want to know the actual wall time or are measuring elapsed time across multiple page refreshes.
|
||||
|
||||
### 7. Prefer multiplication over division
|
||||
|
||||
If you're always gonna divide a number by some constant, it is better to multiply it by one-over-the-constant instead.
|
||||
|
||||
**Incorrect**
|
||||
|
||||
```java
|
||||
float b = a / 50.0f;
|
||||
```
|
||||
|
||||
**Correct**
|
||||
|
||||
```java
|
||||
float b = a * 0.02f;
|
||||
```
|
||||
|
||||
### 8. Shaders should take advantage of compiler intrinsics
|
||||
|
||||
Although you may think these two pieces of code are identical, its more than likely that the "Correct" example will compile to a more efficient shader on almost any hardware. The functions in GLSL are not a library, they are compiler intrinsics that usually compile to inline assembly that can take advantage of different acceleration instructions in the GPU's instruction set. Vector math should be done in ways that promotes the use of SIMD instructions when the code is compiled to a shader.
|
||||
|
||||
**Incorrect:**
|
||||
|
||||
```glsl
|
||||
float dx = pos1.x - pos2.x;
|
||||
float dy = pos1.y - pos2.y;
|
||||
float dz = pos1.z - pos2.z;
|
||||
float distance = sqrt(dx * dx + dy * dy + dz * dz);
|
||||
float fogDensity = pow(2.718, -density * distance);
|
||||
```
|
||||
|
||||
**Correct:**
|
||||
|
||||
```glsl
|
||||
float fogDensity = exp(-density * length(pos1.xyz - pos2.xyz));
|
||||
```
|
||||
|
||||
### 9. Flatten the control flow of shaders
|
||||
|
||||
Modern GPUs are able to execute multiple instances of a shader on a single core, but if one of those shaders encounters a branch (if statement, or related) that causes it to begin executing different code from the other instances of the shader running on that core, that instance of the shader can no longer be executed at the same time as the other instances, and suddenly you've significantly increased the amount of time this core will now be busy executing shader instructions to account for all of the branches the different shader instances have taken.
|
||||
|
||||
**Incorrect:**
|
||||
|
||||
```glsl
|
||||
float lightValue = dot(lightDirection, normal);
|
||||
if(lightValue > 0.0) {
|
||||
color += lightValue * lightColor * diffuseColor;
|
||||
}
|
||||
```
|
||||
|
||||
**Correct:**
|
||||
```glsl
|
||||
float lightValue = max(dot(lightDirection, normal), 0.0);
|
||||
color += lightValue * lightColor * diffuseColor;
|
||||
```
|
||||
|
||||
### 10. Use textureLod unless mipmapping is necessary
|
||||
|
||||
This will prevent the shader from wasting time trying to determine what mipmap levels to read from when the texture is sampled.
|
||||
|
||||
**Incorrect:**
|
||||
|
||||
```glsl
|
||||
float depthValue = texture(depthBuffer, pos).r;
|
||||
```
|
||||
|
||||
**Correct:**
|
||||
|
||||
```glsl
|
||||
float depthValue = textureLod(depthBuffer, pos, 0.0).r;
|
||||
```
|
||||
|
||||
### 11. Divide complex and branch-intensive shaders into multiple draw calls
|
||||
|
||||
You can use a variety of different blending modes to mathematically combine the results of shaders. This is done for the same reason as flattening the control flow, to try and keep instruction pointers in sync by periodically resetting their positions, and also to allow for the driver to multitask better on GPUs with insane numbers of cores. It also allows the shader’s execution to be distributed across multiple frames in the case of something that doesn’t need to update often (like clouds).
|
||||
|
||||
|
||||
### 12. Don't abuse `@JSBody` in TeaVM code
|
||||
|
||||
TeaVM provides lots of ways of interacting with JavaScript, using `@JSBody` is not the only way, consider using an overlay type.
|
||||
|
||||
**Incorrect**
|
||||
|
||||
```java
|
||||
@JSObject(params = { "obj" }, script = "return obj.valueA;")
|
||||
public static native JSObject getValueA(JSObject obj);
|
||||
|
||||
@JSObject(params = { "obj" }, script = "return obj.valueB;")
|
||||
public static native JSObject getValueB(JSObject obj);
|
||||
|
||||
@JSObject(params = { "obj" }, script = "return obj.valueC;")
|
||||
public static native JSObject getValueC(JSObject obj);
|
||||
|
||||
@JSObject(params = { "obj" }, script = "obj.dumbFunction();")
|
||||
public static native void callDumbFunction(JSObject obj);
|
||||
```
|
||||
|
||||
**Correct**
|
||||
|
||||
```java
|
||||
public interface MyObject extends JSObject {
|
||||
|
||||
@JSProperty
|
||||
JSObject getValueA();
|
||||
|
||||
@JSProperty
|
||||
JSObject getValueB();
|
||||
|
||||
@JSProperty
|
||||
JSObject getValueC();
|
||||
|
||||
void dumbFunction();
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
### 13. Don't fall for TeaVM's threads
|
||||
|
||||
It is impossible to have multithreading in JavaScript, only worker objects can be used to execute code concurrently, which can't share javascript variables. Therefore, when you create a thread in TeaVM, you're creating a virtual thread that isn't capable of running at the same time as any other virtual thread in the TeaVM context. This means it's impossible to speed a TeaVM program up through the use of multiple Java threads, instead it is more than likely that it will just slow the program down more to implement multithreading through TeaVM's threads due to the additional time required for synchronization and context switches. Its more efficient to just program the entire application to be single threaded to begin with, just put everything in the main loop and realize that if it was in a different thread it would just periodically interrupt the main loop.
|
||||
|
||||
### 14. Always use try-with-resources
|
||||
|
||||
For any code that deals with streams to be considered safe, it should either use a try-with-resources or try/finally in order to release resources when complete, since otherwise the stream might not close if an IO error causes the function to return early. This is especially important for plugin code since its supposed to be able to run on a large server for weeks at a time without the underlying JVM being restarted. If hackers discover a bug in the code to cause a function to return early like this without closing a stream, they might exploit it to fatally crash the server by spamming whatever corrupt packet causes the function to leak the stream, so all code must be written so it can fail at any time without leaking resources.
|
||||
|
||||
**Incorrect**
|
||||
|
||||
```java
|
||||
InputStream is = new FileInputStream(new File("phile.txt"));
|
||||
is.write(someArray);
|
||||
is.close();
|
||||
```
|
||||
|
||||
**Correct**
|
||||
|
||||
```java
|
||||
try(InputStream is = new FileInputStream(new File("phile.txt"))) {
|
||||
is.write(someArray);
|
||||
}
|
||||
```
|
||||
|
||||
Notice that the `.close()` can be omitted completely when using a try-with-resources
|
||||
|
||||
### 15. Always close compression/decompression streams
|
||||
|
||||
In the desktop runtime, the default oracle JDK uses native code to implement the compression/decompression streams (InflaterInputStream, GZIPInputStream, etc) and therefore if you forget to close the compression/decompression stream it will cause a memory leak when the code isn't running in a browser. This is a common issue when using byte array input/output streams since you might believe when decompressing data from a byte array that there's no reason to close the stream when you're done since its not a file, but that will still cause a memory leak due to the decompression stream not being cleaned up.
|
||||
|
||||
## Part B. Project Structure
|
||||
|
||||
### 1. Code decompiled from Minecraft goes in `src/game/java`
|
||||
|
||||
Don't add any new classes to `src/game/java`, and ideally any significant additions to the game's source (functions, etc) should be done through creating new classes in `src/main/java` instead of adding it directly to the decompiled classes.
|
||||
|
||||
### 2. Do not put platform-dependent code in `src/main/java` or `src/game/java`
|
||||
|
||||
One of the objectives of Eaglercraft is to make Minecraft Java edition truly cross platform, why stop at just a desktop and JavaScript runtime? There are plans to create an Android runtime and several WebAssembly runtimes, all of which will be compatible with any pre-existing eaglercraft clients that only depend on the EaglercraftX runtime library and don't directly depend on components of TeaVM or LWJGL. Ideally, all core features of the client should be implemented in the `src/main/java` and `src/game/java` and any platform-dependent features should be stubbed out in some abstract platform-independent way in classes in the `src/teavm/java` and `src/lwjgl/java` and any other future runtime you want your client to support. Ideally, every source folder of platform-dependent code should expose an identical API for access to the platform-independent code as all the other platform-dependant code folders currently expose.
|
||||
|
||||
### 3. Don't mix JavaScript with Java
|
||||
|
||||
Don’t implement features in the JavaScript runtime by requiring additional JavaScript files be included on index.html, if you must access browser APIs then use the TeaVM JSO to write your code in Java instead so it’s baked directly into classes.js. Certain browser APIs may be missing from the default TeaVM JSO-APIs library but it is not difficult to create the overlay types for them manually. Clients that violate this rule may also not possible to automatically import into the EaglercraftX boot menu depending on how fucked up they are. There aren't any limitations to the TeaVM JSO that give you a good enough excuse not to follow this rule.
|
||||
|
||||
### 4. Don't access the classes named "Platform\*" directly from your platform-independent code
|
||||
|
||||
Much like the Java runtime environment itself, Eaglercraft's runtime library consists of two layers, the internal classes full of platform-dependent code that expose an intermediate API not meant to be used by programmers directly, and the platform-independent API classes that provide a platform-independent wrapper for the platform dependent classes and also provide all the miscellaneous utility functions that don't require platform dependent code to be implemented. Chances are if you are directly using a function on a class that has a name that starts with "Platform\*", that there is a different class in `src/main/java` that you are meant to use in order to access that feature, that may perform additional checks or adjust the values you are passing to the function before calling the function in the Platform class.
|
||||
|
||||
## Part C. Compatibility Standards
|
||||
|
||||
### 1. Target minimum JDK version is Java 8
|
||||
|
||||
Its difficult to find a platform where its not possible to run Java 8 in some capacity, therefore the desktop runtime of EaglercraftX and the BungeeCord plugin should target Java 8. The Velocity plugin is an exception since Velocity itself doesn't support Java 8 either.
|
||||
|
||||
### 2. Target minimum supported browser is Google Chrome 38
|
||||
|
||||
Released on October 7, 2014, we think its a good target for the JavaScript versions of EaglercraftX. This is the last version of Chrome that supports hardware accelerated WebGL 1.0 on Windows XP. All base features of the underlying Minecraft 1.8 client must be functional, however things such as EaglercraftX's shaders or dynamic lighting are not required to work. The client cannot crash as a result of any missing features on an old browser, you must either implement fallbacks or safely disable the unsupported features.
|
||||
|
||||
### 3. Target minimum supported graphics API is OpenGL ES 2.0 (WebGL 1.0)
|
||||
|
||||
The most widely supported graphics API in the world is currently OpenGL ES 2.0, so ideally that should be the target for EaglercraftX 1.8. We can guarantee the client will be on an OpenGL ES 3.0 context 99% of the time, however its not that hard to also maintain support for GLES 2.0 (WebGL 1.0) as well with slightly reduced functionality so we might as well make it a feature in case of the 1% of the time that functionality is not available. The client cannot depend on any GL extensions in order to run in GLES 2.0 mode, however its reasonable to assume there will be VAO support via extensions in most GLES 2.0 contexts so the client includes an abstraction layer (via EaglercraftGPU.java) to seamlessly emulate VAO functionality even when the client is running in GLES 2.0 mode with no VAO extensions. The only core feature of Minecraft 1.8 that is completely unavailable in GLES 2.0 mode is mip-mapping for the blocks/items texture atlas due to being unable to limit the max mipmap level.
|
||||
|
||||
### 4. Use preprocessor directives to make portable shaders that can be compiled for both OpenGL ES 2.0 and 3.0 contexts
|
||||
|
||||
Most of the shaders in the base "glsl" directory of the resources EPK file use a file called "gles2_compat.glsl" to polyfill certain GLSL features (such as input/output declarations) via preprocessor directives to allow them to be compiled on both OpenGL ES 3.0 and 2.0 contexts. This is the preferred way to implement backwards compatibility over creating seprate versions of the same shaders, since future developers don't need to waste time maintaining multiple versions of the same code if they don't really care about backwards compatibility in the first place.
|
||||
|
||||
### 5. Target minimum version of the JavaScript syntax is ES5 strict mode
|
||||
|
||||
A shim is included to provide certain ES6 functions, however you should always program with syntax compatible with ES5, so the script doesn't crash immediately due to syntax errors even if the functions that use unsupported syntax aren't actually being called. `build.gradle` currently patches out all the ES5 strict mode incompatible syntax in the output of TeaVM 0.9.2, but this will probably break if you try to update TeaVM. Don't worry though because future WASM versions of EaglercraftX will use the latest versions of TeaVM. **Some common incompatible syntax to avoid includes `const`, `let`, `async`, `( ) => `, and using named functions! You can't do any of these things in your JSBody annotations.**
|
||||
|
||||
### 6. You cannot depend on any deprecated browser features
|
||||
|
||||
The same way we want EaglercraftX to work on browsers from over 10 years ago, we want it to still work in browsers 10 years from today, therefore the client cannot depend on any deprecated browser features in order for all the base Minecraft 1.8 game's features to work properly. However it is okay to use deprecated features as fallback if any modern non-deprecated feature (such as keyboard event handling) that the game needs if the game is running in an old browser.
|
||||
|
||||
### 7. Always use addEventListener to register event handlers
|
||||
|
||||
Always use addEventListener to register event handlers for browser APIs, never through the use of assigning the legacy "on\*" (onclick, onkeydown, onmessage, etc) variables, the TeaVMUtils class has a universal helper function for accessing addEventListener on any JSO objects that don’t already implement the function.
|
||||
|
||||
### 8. JavaScript should be executed in strict mode
|
||||
|
||||
Always make sure your JavaScript files start with `"use strict";`, be careful when adding this to your code retroactively because it will probably break hastily written code unless you haven’t made a single typo that’s not forbidden in strict mode. Be aware that in Chrome 38 this means you can't use stuff such as `const` and `let` or named functions in any of your JSBody annotations!
|
@ -1,2 +1,2 @@
|
||||
#!/bin/sh
|
||||
java -jar "desktopRuntime/CompileEPK.jar" "desktopRuntime/resources" "javascript/assets.epk"
|
||||
java -jar "desktopRuntime/CompileEPK.jar" "desktopRuntime/resources" "javascript/assets.epk"
|
||||
|
@ -1,4 +1,4 @@
|
||||
@echo off
|
||||
title gradlew generateJavascript
|
||||
gradlew generateJavascript
|
||||
call gradlew generateJavascript
|
||||
pause
|
||||
|
@ -196,6 +196,7 @@ The default eaglercraftXOpts values is this:
|
||||
- `eaglerNoDelay:` can be used to disable "Vigg's Algorithm", an algorithm that delays and combines multiple EaglercraftX packets together if they are sent in the same tick (does not affect regular Minecraft 1.8 packets)
|
||||
- `ramdiskMode:` if worlds and resource packs should be stored in RAM instead of IndexedDB
|
||||
- `singleThreadMode:` if the game should run the client and integrated server in the same context instead of creating a worker object
|
||||
- `enableEPKVersionCheck:` if the game should attempt to bypass the browser's cache and retry downloading assets.epk when its outdated
|
||||
- `hooks:` can be used to define JavaScript callbacks for certain events
|
||||
* `localStorageSaved:` JavaScript callback to save local storage keys (key, data)
|
||||
* `localStorageLoaded:` JavaScript callback to load local storage keys (key) returns data
|
||||
@ -244,3 +245,340 @@ The `crashReportShow` hook can be used to capture crash reports and append addit
|
||||
There is currently no system in place to make forks of 1.8 and merge commits made to the patch files in this repository with the patch files or workspace of the fork, you're on your own if you try to keep a fork of this repo for reasons other than to contribute to it
|
||||
|
||||
A javascript-based modding API resembling Minecraft Forge may be implemented someday though for adding custom content to the game.
|
||||
|
||||
# EaglercraftX 1.8 Workspace
|
||||
|
||||
### Java 17 is recommended for compiling to TeaVM
|
||||
|
||||
### Java 8 or greater is required for the desktop runtime
|
||||
|
||||
**Most Java IDEs will allow you to import this repository as a gradle project for compiling it to JavaScript.**
|
||||
|
||||
Java must be added to your PATH!
|
||||
|
||||
**To compile the web client:**
|
||||
1. Run `CompileEPK`
|
||||
2. Run `CompileJS` (or the `generateJavaScript` gradle task in your IDE)
|
||||
3. Check the "javascript" folder
|
||||
|
||||
**To compile an offline download:**
|
||||
1. Run `CompileEPK`
|
||||
2. Run `CompileJS` (or the `generateJavaScript` gradle task in your IDE)
|
||||
3. Run `MakeOfflineDownload`
|
||||
4. Check the "javascript" folder
|
||||
|
||||
**To use the desktop runtime:**
|
||||
1. Import the Eclipse project in "desktopRuntime/eclipseProject" into your IDE
|
||||
2. Open one of the .java files from the source folders (workaround for a bug)
|
||||
3. Run/Debug the client with the included "eaglercraftDebugRuntime" configuration
|
||||
|
||||
**See the main 1.8 repository's README for more info**
|
||||
|
||||
The source codes of EaglercraftXBungee and EaglercraftXVelocity are not included here.
|
||||
|
||||
# Eaglercraft Code Standards
|
||||
|
||||
**These are some basic rules to follow if you would like to write code that is consistent with the Eaglercraft 1.8 codebase. If you are already familiar with Eaglercraft 1.5 or b1.3, please abandon whatever you think is the best practice as a result of reading that code, those clients should be considered as obsolete prototypes.**
|
||||
|
||||
## Part A. Coding Style
|
||||
|
||||
### 1. Tabs, not spaces
|
||||
|
||||
Tabs not spaces, it makes indentation easier to manage and reduces file size. Other popular projects that are also known to use tabs instead of spaces include the linux kernel. We prefer to set tab width to 4 spaces on our editors.
|
||||
|
||||
Format code like the eclipse formatter on factory settings
|
||||
|
||||
### 2. Avoid redundant hash map lookups
|
||||
|
||||
Don't retrieve the same value from a hash map more than once, that includes checking if an entry exists first before retrieving its value. If you do this, you are a horrible person!
|
||||
|
||||
**Incorrect:**
|
||||
|
||||
```java
|
||||
if(hashMap.containsKey("eagler")) {
|
||||
Object val = hashMap.get("eagler");
|
||||
// do something with val
|
||||
}
|
||||
```
|
||||
|
||||
**Correct:**
|
||||
|
||||
```java
|
||||
Object val = hashMap.get("eagler");
|
||||
if(val != null) {
|
||||
// do something with val
|
||||
}
|
||||
```
|
||||
|
||||
### 3. Cache the return value of a function if you plan to use it multiple times
|
||||
|
||||
This is somewhat an extension of rule #2, don't repeatedly call the same function multiple times if there's no reason to, even if its a relatively fast function. Everything is slower and less efficient in a browser.
|
||||
|
||||
**Incorrect:**
|
||||
|
||||
```java
|
||||
while(itr.hasNext()) {
|
||||
if(!Minecraft.getMinecraft().getRenderManager().getEntityClassRenderObject(SomeEntity.class).shouldRender(itr.next())) {
|
||||
itr.remove();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Correct:**
|
||||
|
||||
```java
|
||||
Render<SomeEntity> render = Minecraft.getMinecraft().getRenderManager().getEntityClassRenderObject(SomeEntity.class);
|
||||
while(itr.hasNext()) {
|
||||
if(!render.shouldRender(itr.next())) {
|
||||
itr.remove();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 4. Iterators aren't that great
|
||||
|
||||
Avoid using iterators when possible, this includes a `for(Item item : list)` type loop, since this may compile into bytecode that uses an iterator. If the list is a linked list or some other type of data structure that can’t perform random access efficiently, then it is recommended to use an iterator, but if the collection is guaranteed to be something similar to an ArrayList then implement it via a traditional for loop instead.
|
||||
|
||||
**Recommended way to iterate an ArrayList:**
|
||||
|
||||
```java
|
||||
for(int i = 0, l = list.size(); i < l; ++i) {
|
||||
Item item = list.get(i);
|
||||
// do something
|
||||
}
|
||||
```
|
||||
|
||||
### 5. Don't shit on the heap
|
||||
|
||||
Avoid creating temporary single-use objects in performance critical code, since the overhead of doing so is larger in a browser where there’s no type safety to predefine object structures. This includes using lambdas or using most of the stuff in the google guava package. Also this is partially why I prefer not using iterators whenever possible.
|
||||
|
||||
**Incorrect, creates 5 temporary objects:**
|
||||
|
||||
```java
|
||||
List<String> list1 = Arrays.asList("eagler", "eagler", "deevis");
|
||||
List<String> list2 = Lists.newArrayList(
|
||||
Collections2.transform(
|
||||
Collections2.filter(
|
||||
list1,
|
||||
(e) -> !e.equals("deevis")
|
||||
),
|
||||
(e) -> (e + "!")
|
||||
)
|
||||
);
|
||||
```
|
||||
|
||||
**Correct, creates no temporary objects:**
|
||||
|
||||
```java
|
||||
List<String> list1 = Arrays.asList("eagler", "eagler", "deevis");
|
||||
List<String> list2 = Lists.newArrayList();
|
||||
for(int i = 0, l = list1.size(); i < l; ++i) {
|
||||
String s = list1.get(i);
|
||||
if(!s.equals("deevis")) {
|
||||
list2.add(s + "!");
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
(note: we are ignoring the StringBuilder instances that the compiler generates from ` + "!"`)
|
||||
|
||||
### 6. Don't base game/render logic off of the system time
|
||||
|
||||
Use `EagRuntime.steadyTimeMillis()` instead to access a monotonic clock, as in a clock that is guaranteed to only run forwards, and is not affected by changes in the system time. `System.currentTimeMillis()` should only be used in situations where you want to know the actual wall time or are measuring elapsed time across multiple page refreshes.
|
||||
|
||||
### 7. Prefer multiplication over division
|
||||
|
||||
If you're always gonna divide a number by some constant, it is better to multiply it by one-over-the-constant instead.
|
||||
|
||||
**Incorrect**
|
||||
|
||||
```java
|
||||
float b = a / 50.0f;
|
||||
```
|
||||
|
||||
**Correct**
|
||||
|
||||
```java
|
||||
float b = a * 0.02f;
|
||||
```
|
||||
|
||||
### 8. Shaders should take advantage of compiler intrinsics
|
||||
|
||||
Although you may think these two pieces of code are identical, its more than likely that the "Correct" example will compile to a more efficient shader on almost any hardware. The functions in GLSL are not a library, they are compiler intrinsics that usually compile to inline assembly that can take advantage of different acceleration instructions in the GPU's instruction set. Vector math should be done in ways that promotes the use of SIMD instructions when the code is compiled to a shader.
|
||||
|
||||
**Incorrect:**
|
||||
|
||||
```glsl
|
||||
float dx = pos1.x - pos2.x;
|
||||
float dy = pos1.y - pos2.y;
|
||||
float dz = pos1.z - pos2.z;
|
||||
float distance = sqrt(dx * dx + dy * dy + dz * dz);
|
||||
float fogDensity = pow(2.718, -density * distance);
|
||||
```
|
||||
|
||||
**Correct:**
|
||||
|
||||
```glsl
|
||||
float fogDensity = exp(-density * length(pos1.xyz - pos2.xyz));
|
||||
```
|
||||
|
||||
### 9. Flatten the control flow of shaders
|
||||
|
||||
Modern GPUs are able to execute multiple instances of a shader on a single core, but if one of those shaders encounters a branch (if statement, or related) that causes it to begin executing different code from the other instances of the shader running on that core, that instance of the shader can no longer be executed at the same time as the other instances, and suddenly you've significantly increased the amount of time this core will now be busy executing shader instructions to account for all of the branches the different shader instances have taken.
|
||||
|
||||
**Incorrect:**
|
||||
|
||||
```glsl
|
||||
float lightValue = dot(lightDirection, normal);
|
||||
if(lightValue > 0.0) {
|
||||
color += lightValue * lightColor * diffuseColor;
|
||||
}
|
||||
```
|
||||
|
||||
**Correct:**
|
||||
```glsl
|
||||
float lightValue = max(dot(lightDirection, normal), 0.0);
|
||||
color += lightValue * lightColor * diffuseColor;
|
||||
```
|
||||
|
||||
### 10. Use textureLod unless mipmapping is necessary
|
||||
|
||||
This will prevent the shader from wasting time trying to determine what mipmap levels to read from when the texture is sampled.
|
||||
|
||||
**Incorrect:**
|
||||
|
||||
```glsl
|
||||
float depthValue = texture(depthBuffer, pos).r;
|
||||
```
|
||||
|
||||
**Correct:**
|
||||
|
||||
```glsl
|
||||
float depthValue = textureLod(depthBuffer, pos, 0.0).r;
|
||||
```
|
||||
|
||||
### 11. Divide complex and branch-intensive shaders into multiple draw calls
|
||||
|
||||
You can use a variety of different blending modes to mathematically combine the results of shaders. This is done for the same reason as flattening the control flow, to try and keep instruction pointers in sync by periodically resetting their positions, and also to allow for the driver to multitask better on GPUs with insane numbers of cores. It also allows the shader’s execution to be distributed across multiple frames in the case of something that doesn’t need to update often (like clouds).
|
||||
|
||||
|
||||
### 12. Don't abuse `@JSBody` in TeaVM code
|
||||
|
||||
TeaVM provides lots of ways of interacting with JavaScript, using `@JSBody` is not the only way, consider using an overlay type.
|
||||
|
||||
**Incorrect**
|
||||
|
||||
```java
|
||||
@JSObject(params = { "obj" }, script = "return obj.valueA;")
|
||||
public static native JSObject getValueA(JSObject obj);
|
||||
|
||||
@JSObject(params = { "obj" }, script = "return obj.valueB;")
|
||||
public static native JSObject getValueB(JSObject obj);
|
||||
|
||||
@JSObject(params = { "obj" }, script = "return obj.valueC;")
|
||||
public static native JSObject getValueC(JSObject obj);
|
||||
|
||||
@JSObject(params = { "obj" }, script = "obj.dumbFunction();")
|
||||
public static native void callDumbFunction(JSObject obj);
|
||||
```
|
||||
|
||||
**Correct**
|
||||
|
||||
```java
|
||||
public interface MyObject extends JSObject {
|
||||
|
||||
@JSProperty
|
||||
JSObject getValueA();
|
||||
|
||||
@JSProperty
|
||||
JSObject getValueB();
|
||||
|
||||
@JSProperty
|
||||
JSObject getValueC();
|
||||
|
||||
void dumbFunction();
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
### 13. Don't fall for TeaVM's threads
|
||||
|
||||
It is impossible to have multithreading in JavaScript, only worker objects can be used to execute code concurrently, which can't share javascript variables. Therefore, when you create a thread in TeaVM, you're creating a virtual thread that isn't capable of running at the same time as any other virtual thread in the TeaVM context. This means it's impossible to speed a TeaVM program up through the use of multiple Java threads, instead it is more than likely that it will just slow the program down more to implement multithreading through TeaVM's threads due to the additional time required for synchronization and context switches. Its more efficient to just program the entire application to be single threaded to begin with, just put everything in the main loop and realize that if it was in a different thread it would just periodically interrupt the main loop.
|
||||
|
||||
### 14. Always use try-with-resources
|
||||
|
||||
For any code that deals with streams to be considered safe, it should either use a try-with-resources or try/finally in order to release resources when complete, since otherwise the stream might not close if an IO error causes the function to return early. This is especially important for plugin code since its supposed to be able to run on a large server for weeks at a time without the underlying JVM being restarted. If hackers discover a bug in the code to cause a function to return early like this without closing a stream, they might exploit it to fatally crash the server by spamming whatever corrupt packet causes the function to leak the stream, so all code must be written so it can fail at any time without leaking resources.
|
||||
|
||||
**Incorrect**
|
||||
|
||||
```java
|
||||
InputStream is = new FileInputStream(new File("phile.txt"));
|
||||
is.write(someArray);
|
||||
is.close();
|
||||
```
|
||||
|
||||
**Correct**
|
||||
|
||||
```java
|
||||
try(InputStream is = new FileInputStream(new File("phile.txt"))) {
|
||||
is.write(someArray);
|
||||
}
|
||||
```
|
||||
|
||||
Notice that the `.close()` can be omitted completely when using a try-with-resources
|
||||
|
||||
### 15. Always close compression/decompression streams
|
||||
|
||||
In the desktop runtime, the default oracle JDK uses native code to implement the compression/decompression streams (InflaterInputStream, GZIPInputStream, etc) and therefore if you forget to close the compression/decompression stream it will cause a memory leak when the code isn't running in a browser. This is a common issue when using byte array input/output streams since you might believe when decompressing data from a byte array that there's no reason to close the stream when you're done since its not a file, but that will still cause a memory leak due to the decompression stream not being cleaned up.
|
||||
|
||||
## Part B. Project Structure
|
||||
|
||||
### 1. Code decompiled from Minecraft goes in `src/game/java`
|
||||
|
||||
Don't add any new classes to `src/game/java`, and ideally any significant additions to the game's source (functions, etc) should be done through creating new classes in `src/main/java` instead of adding it directly to the decompiled classes.
|
||||
|
||||
### 2. Do not put platform-dependent code in `src/main/java` or `src/game/java`
|
||||
|
||||
One of the objectives of Eaglercraft is to make Minecraft Java edition truly cross platform, why stop at just a desktop and JavaScript runtime? There are plans to create an Android runtime and several WebAssembly runtimes, all of which will be compatible with any pre-existing eaglercraft clients that only depend on the EaglercraftX runtime library and don't directly depend on components of TeaVM or LWJGL. Ideally, all core features of the client should be implemented in the `src/main/java` and `src/game/java` and any platform-dependent features should be stubbed out in some abstract platform-independent way in classes in the `src/teavm/java` and `src/lwjgl/java` and any other future runtime you want your client to support. Ideally, every source folder of platform-dependent code should expose an identical API for access to the platform-independent code as all the other platform-dependant code folders currently expose.
|
||||
|
||||
### 3. Don't mix JavaScript with Java
|
||||
|
||||
Don’t implement features in the JavaScript runtime by requiring additional JavaScript files be included on index.html, if you must access browser APIs then use the TeaVM JSO to write your code in Java instead so it’s baked directly into classes.js. Certain browser APIs may be missing from the default TeaVM JSO-APIs library but it is not difficult to create the overlay types for them manually. Clients that violate this rule may also not possible to automatically import into the EaglercraftX boot menu depending on how fucked up they are. There aren't any limitations to the TeaVM JSO that give you a good enough excuse not to follow this rule.
|
||||
|
||||
### 4. Don't access the classes named "Platform\*" directly from your platform-independent code
|
||||
|
||||
Much like the Java runtime environment itself, Eaglercraft's runtime library consists of two layers, the internal classes full of platform-dependent code that expose an intermediate API not meant to be used by programmers directly, and the platform-independent API classes that provide a platform-independent wrapper for the platform dependent classes and also provide all the miscellaneous utility functions that don't require platform dependent code to be implemented. Chances are if you are directly using a function on a class that has a name that starts with "Platform\*", that there is a different class in `src/main/java` that you are meant to use in order to access that feature, that may perform additional checks or adjust the values you are passing to the function before calling the function in the Platform class.
|
||||
|
||||
## Part C. Compatibility Standards
|
||||
|
||||
### 1. Target minimum JDK version is Java 8
|
||||
|
||||
Its difficult to find a platform where its not possible to run Java 8 in some capacity, therefore the desktop runtime of EaglercraftX and the BungeeCord plugin should target Java 8. The Velocity plugin is an exception since Velocity itself doesn't support Java 8 either.
|
||||
|
||||
### 2. Target minimum supported browser is Google Chrome 38
|
||||
|
||||
Released on October 7, 2014, we think its a good target for the JavaScript versions of EaglercraftX. This is the last version of Chrome that supports hardware accelerated WebGL 1.0 on Windows XP. All base features of the underlying Minecraft 1.8 client must be functional, however things such as EaglercraftX's shaders or dynamic lighting are not required to work. The client cannot crash as a result of any missing features on an old browser, you must either implement fallbacks or safely disable the unsupported features.
|
||||
|
||||
### 3. Target minimum supported graphics API is OpenGL ES 2.0 (WebGL 1.0)
|
||||
|
||||
The most widely supported graphics API in the world is currently OpenGL ES 2.0, so ideally that should be the target for EaglercraftX 1.8. We can guarantee the client will be on an OpenGL ES 3.0 context 99% of the time, however its not that hard to also maintain support for GLES 2.0 (WebGL 1.0) as well with slightly reduced functionality so we might as well make it a feature in case of the 1% of the time that functionality is not available. The client cannot depend on any GL extensions in order to run in GLES 2.0 mode, however its reasonable to assume there will be VAO support via extensions in most GLES 2.0 contexts so the client includes an abstraction layer (via EaglercraftGPU.java) to seamlessly emulate VAO functionality even when the client is running in GLES 2.0 mode with no VAO extensions. The only core feature of Minecraft 1.8 that is completely unavailable in GLES 2.0 mode is mip-mapping for the blocks/items texture atlas due to being unable to limit the max mipmap level.
|
||||
|
||||
### 4. Use preprocessor directives to make portable shaders that can be compiled for both OpenGL ES 2.0 and 3.0 contexts
|
||||
|
||||
Most of the shaders in the base "glsl" directory of the resources EPK file use a file called "gles2_compat.glsl" to polyfill certain GLSL features (such as input/output declarations) via preprocessor directives to allow them to be compiled on both OpenGL ES 3.0 and 2.0 contexts. This is the preferred way to implement backwards compatibility over creating seprate versions of the same shaders, since future developers don't need to waste time maintaining multiple versions of the same code if they don't really care about backwards compatibility in the first place.
|
||||
|
||||
### 5. Target minimum version of the JavaScript syntax is ES5 strict mode
|
||||
|
||||
A shim is included to provide certain ES6 functions, however you should always program with syntax compatible with ES5, so the script doesn't crash immediately due to syntax errors even if the functions that use unsupported syntax aren't actually being called. `build.gradle` currently patches out all the ES5 strict mode incompatible syntax in the output of TeaVM 0.9.2, but this will probably break if you try to update TeaVM. Don't worry though because future WASM versions of EaglercraftX will use the latest versions of TeaVM. **Some common incompatible syntax to avoid includes `const`, `let`, `async`, `( ) => `, and using named functions! You can't do any of these things in your JSBody annotations.**
|
||||
|
||||
### 6. You cannot depend on any deprecated browser features
|
||||
|
||||
The same way we want EaglercraftX to work on browsers from over 10 years ago, we want it to still work in browsers 10 years from today, therefore the client cannot depend on any deprecated browser features in order for all the base Minecraft 1.8 game's features to work properly. However it is okay to use deprecated features as fallback if any modern non-deprecated feature (such as keyboard event handling) that the game needs if the game is running in an old browser.
|
||||
|
||||
### 7. Always use addEventListener to register event handlers
|
||||
|
||||
Always use addEventListener to register event handlers for browser APIs, never through the use of assigning the legacy "on\*" (onclick, onkeydown, onmessage, etc) variables, the TeaVMUtils class has a universal helper function for accessing addEventListener on any JSO objects that don’t already implement the function.
|
||||
|
||||
### 8. JavaScript should be executed in strict mode
|
||||
|
||||
Always make sure your JavaScript files start with `"use strict";`, be careful when adding this to your code retroactively because it will probably break hastily written code unless you haven’t made a single typo that’s not forbidden in strict mode. Be aware that in Chrome 38 this means you can't use stuff such as `const` and `let` or named functions in any of your JSBody annotations!
|
||||
|
@ -1,4 +1,4 @@
|
||||
@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/assets.epk" "javascript/Starlike_Client_Offline.html"
|
||||
java -cp "desktopRuntime/MakeOfflineDownload.jar;desktopRuntime/CompileEPK.jar" net.lax1dude.eaglercraft.v1_8.buildtools.workspace.MakeOfflineDownload "desktopRuntime/resources/OfflineDownloadTemplate.txt" "javascript/classes.js" "javascript/assets.epk" "javascript/Starlike_Client_Offline.html"
|
||||
pause
|
||||
|
@ -1,2 +1,2 @@
|
||||
#!/bin/sh
|
||||
java -cp "desktopRuntime/MakeOfflineDownload.jar:desktopRuntime/CompileEPK.jar" net.lax1dude.eaglercraft.v1_8.buildtools.workspace.MakeOfflineDownload "javascript/OfflineDownloadTemplate.txt" "javascript/classes.js" "javascript/assets.epk" "javascript/Starlike_Client_Offline.html"
|
||||
java -cp "desktopRuntime/MakeOfflineDownload.jar:desktopRuntime/CompileEPK.jar" net.lax1dude.eaglercraft.v1_8.buildtools.workspace.MakeOfflineDownload "desktopRuntime/resources/OfflineDownloadTemplate.txt" "javascript/classes.js" "javascript/assets.epk" "javascript/Starlike_Client_Offline.html"
|
||||
|
@ -1,4 +1,4 @@
|
||||
@echo off
|
||||
title MakeSignedClient
|
||||
java -cp "desktopRuntime/MakeOfflineDownload.jar;desktopRuntime/CompileEPK.jar" net.lax1dude.eaglercraft.v1_8.buildtools.workspace.MakeSignedClient "javascript/SignedBundleTemplate.txt" "javascript/classes.js" "javascript/assets.epk" "javascript/lang" "javascript/SignedClientTemplate.txt" "javascript/UpdateDownloadSources.txt" "javascript/EaglercraftX_1.8_Offline_Signed_Client.html"
|
||||
java -cp "desktopRuntime/MakeOfflineDownload.jar;desktopRuntime/CompileEPK.jar" net.lax1dude.eaglercraft.v1_8.buildtools.workspace.MakeSignedClient "desktopRuntime/resources/SignedBundleTemplate.txt" "javascript/classes.js" "javascript/assets.epk" "desktopRuntime/resources/SignedClientTemplate.txt" "desktopRuntime/resources/UpdateDownloadSources.txt" "javascript/Starlike_Client_Offline_Signed.html"
|
||||
pause
|
@ -1,2 +1,2 @@
|
||||
#!/bin/sh
|
||||
java -cp "desktopRuntime/MakeOfflineDownload.jar:desktopRuntime/CompileEPK.jar" net.lax1dude.eaglercraft.v1_8.buildtools.workspace.MakeSignedClient "javascript/SignedBundleTemplate.txt" "javascript/classes.js" "javascript/assets.epk" "javascript/lang" "javascript/SignedClientTemplate.txt" "javascript/UpdateDownloadSources.txt" "javascript/EaglercraftX_1.8_Offline_Signed_Client.html"
|
||||
java -cp "desktopRuntime/MakeOfflineDownload.jar:desktopRuntime/CompileEPK.jar" net.lax1dude.eaglercraft.v1_8.buildtools.workspace.MakeSignedClient "desktopRuntime/resources/SignedBundleTemplate.txt" "javascript/classes.js" "javascript/assets.epk" "desktopRuntime/resources/SignedClientTemplate.txt" "desktopRuntime/resources/UpdateDownloadSources.txt" "javascript/Starlike_Client_Offline_Signed.html"
|
||||
|
28
README.md
@ -1,27 +1 @@
|
||||
### Java 17 is recommended for compiling to TeaVM
|
||||
|
||||
### Java 8 or greater is required for the desktop runtime
|
||||
|
||||
**Most Java IDEs will allow you to import this repository as a gradle project for compiling it to JavaScript.**
|
||||
|
||||
Java must be added to your PATH!
|
||||
|
||||
**To compile the web client:**
|
||||
1. Run `CompileEPK`
|
||||
2. Run `CompileJS` (or the `generateJavaScript` gradle task in your IDE)
|
||||
3. Check the "javascript" folder
|
||||
|
||||
**To compile an offline download:**
|
||||
1. Run `CompileEPK`
|
||||
2. Run `CompileJS` (or the `generateJavaScript` gradle task in your IDE)
|
||||
3. Run `MakeOfflineDownload`
|
||||
4. Check the "javascript" folder
|
||||
|
||||
**To use the desktop runtime:**
|
||||
1. Import the Eclipse project in "desktopRuntime/eclipseProject" into your IDE
|
||||
2. Open one of the .java files from the source folders (workaround for a bug)
|
||||
3. Run/Debug the client with the included "eaglercraftDebugRuntime" configuration
|
||||
|
||||
**See the main 1.8 repository's README for more info**
|
||||
|
||||
The source codes of EaglercraftXBungee and EaglercraftXVelocity are not included here.
|
||||
# Starlike Client
|
||||
|
@ -0,0 +1,15 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
|
||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||
org.eclipse.jdt.core.compiler.compliance=1.8
|
||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
|
||||
org.eclipse.jdt.core.compiler.release=disabled
|
||||
org.eclipse.jdt.core.compiler.source=1.8
|
1
desktopRuntime/resources/EPKVersionIdentifier.txt
Normal file
@ -0,0 +1 @@
|
||||
0.2.0
|
101
desktopRuntime/resources/OfflineDownloadTemplate.txt
Normal file
@ -0,0 +1,101 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
|
||||
|
||||
<!--
|
||||
|
||||
This file is from ${date}, there is no official eagler download link anymore, check the websites and discords of your favorite eagler servers for new versions
|
||||
|
||||
Be aware that some server owners are lazy and do not update their client regularly
|
||||
|
||||
Compile it yourself here: https://gitlab.com/lax1dude/eaglercraftx-1.8/
|
||||
|
||||
-->
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<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 Offline" />
|
||||
<meta name="keywords" content="eaglercraft, eaglercraftx, minecraft, 1.8, 1.8.8" />
|
||||
<title>Starlike Client</title>
|
||||
<meta property="og:locale" content="en-US" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:title" content="EaglercraftX 1.8 Offline" />
|
||||
<meta property="og:description" content="this file is not a website, whoever uploaded it to this URL is a dumbass" />
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
|
||||
// %%%%%%%%% launch options %%%%%%%%%%%%
|
||||
|
||||
window.eaglercraftXOpts = {
|
||||
container: "game_frame"
|
||||
};
|
||||
|
||||
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
</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.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,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQfoCRoTLiOzd4OyAAAH2UlEQVRYw8WWS4jlRxXGf6eq/s97b/9v3+6ZSc9IHpMYkqjRWUQwIUTciEoURATBjSBuFBFcibhxbdy5MkQQQTGRKD5WKojii/hEM5o4SXomPenp6dft+/i/quq4mE6EJCYmgn6b2pyq8/HVOd858H+GXOdO/4ehCgIqAVHLvt+j0+6/JuCOz5Ne/aSObS1IK0gnSC8ivYAHwsCUGjQgeu3KxK6/5LFtf/n1KaDo50d28JlJsrLs1Tdd9LVXv+zVL72GRdAwDxrnUeM8EOdR40yQeWqSLeAXwMHrJeEQ8DGcuXt8bv2u6m3stDuoxmPRlYgSNOA14NXTR08g8lx7lceO/top+hvgQeB7wPS1f0HEGGQ8cEP+NL/A+dnjxOix4nDG4sTh5NqZiKOwOTeUN3JLeZbfzx5Pg+q9wN3AJ4CHXjsBITGYKpGUvX6fhZ8Toie1GRkF0Rg6DURtiCjOO9KkQomEY6UACwSA+6oKp8pPjo7+MwKKZlZs5UxGE1p8DCgwSdd5x+rbETEoio+BXnsisJ6tc7XZImrEiAHoFXYmSQ+AF+G+qnr17Ko4Vc2dsSMjCW3siChWHNflp9nr9/nt4e8obUFucnKbUZicw36PC4unASE3kZXESy7x42ns7umaOI0xTqPGqUY9UtUZ6BxYAEuQxjrT5kXeikjvFB04cQMRR6ceBYxYSjficrvNU/UmFouiAFuKXgBWDGYoYspEfPXm6/PB+z/67g8GkzOfLpnPahazOi7ntV/O675eNm2zbNu2aZdd0y3btpnXi+VlVR5wig6dpKWKpYueCKgYjDjmYYmqoqIIgqI/7WP3BScOMdZ4FVZM/8nrx3z2Ax8akN94A0SBaInBmOAl9b2kXauDrlGaOtAuAr965Md8/Wu/pFfe4lR1JTFJ7hF69USFoBGvyq2jO0hMThsbmlDTxvb+PvbnmljPZv7oEOITAbljZWgQ1xH7fVC9ZjBGsKniUiEfCiCIMdAH/vzNZ4gxAuY6p+g4tXmW2BwjDhGL18jfZue5YXCW68ubSU1KYhKs2HFq0nEqKQ9vfYOddvs9EaGqEkwi4DtUIfYBv0hIygLjwFjAKCho03CwtySogLDtUJ3kSZmcHJzmbHkba8kprnRbLMKS87O/vlCtIDjjmGQnODd+OyCAkogyHicYG1Hfggjt1UO+/aU/8NR0RDUuGK3krIwLVsYFw4Hl4m6GKoiw7YyYE23fJ7v1jFPDG7m9vJPt+Q5tqGlDw0G3x6XlBeb9FAGsJCxDSxsbDEJqlWqcAAH1LWIM3dGMv/xhk18/EbGCB54WEWeMDK2zOWgmRlLgsnPGPbndXHz40UsPruW2XB1kZeU0H2amLDObl7esvNXUocaHiCBUyTppmtHFDgPkTlmpHGiPeg/G0BzOWdSKcwYjXAE+AmwDlfe+AhmLsAZsOpTvH/idH+72l1OLLXRuBhYztNj1zBZfHiYn7nImJTElbVyQ2gI14LVHRCkSGFUJGns0gljD8nDOotHjb+IQ2AR2gS0RebEVy6cqNzmnqhqJAqqqOhNk34lbnQwmdL4BdujVMw9zriwOCTGQCJSpMhhZ9LgAFcPiYEndHaeHfaAG+Nn0pbPKqcYP37p6z72nB7cy7w9p/IwmzKn9jKAdVgYswoJWWxJTkNiCJnZEAlaUQS5kWYdf7oMKagyz3RlN/7wA7ALNKwwjqU6Vb6QwKa1YymwDZ1KcyTBieW5xlYvLfzDzM1Kb4kxOE2tUFYsyKiBNldjUqIIBjvZr+iDPK3BFRILG+PIEjNixkYTt5TNsLTcpTcUyHiIIiNCFljZ2iJjjEV2wCDMUxYoyHhvSoUGDR4MSQmR60OP/le+KqhJCeHkCglmL4pgMbscka5Qu4bnFFl1Y0scGp4KKwUpPYXNyN2Svu3LcksraCUO2lmFGBbHt6Z6bcjT1xGtGA3AZwDr3shPSRfWP/f7KIycGydpq4YbDqhgVqS3dIJmQmBxrEgRD1IgTw2pxExdmfwI4NiFBaNEIxIif1RwceHqvWCuqynWq8Q5jzExEZiJSAx2gxloc8L7DZnOwXz89BlkT7Clr7IaV5LQ1yWlnso3EFCcTW04yO6yenf+x3Fk+mRoxc2vIkiZk7eUpbqNEu4ivA6dvexPnkoTZ4UwWs8Xn6mXz6bZpj3zfH6jGXblWmI/GEB5xwCK1wwWw82J5tj52kclXqxQoQUfARDAnnCnGheWwSsIDg0zvRDpM4ej2O6yD995f8p50jTacpW7TfMEonx6EtZ3N3Zt+8PDPeebSISKyCTziXrzFrphVSpMDysZDZ8jssDuW7BC4BFDawJlkeaJITL5apbg8wYhHmwbtPGH3MRAhs4bqppJkUkKfMK0Cv/juDFVBhK1rbfgiHMUDjl6+Y17AfYMKH2QSxYzPz86iT9/Majuk7K+QD+ZktsFqjXUNNof671PEemaXO2bLACLxecUdrxPOym7dxi9+6ztP3Jx+f/NMXhYbg6E7ORplq9W4GK6uDvLJ+imzvjFhnM5YrYSj3R2mi/MI6oGr/xUBYA/4inPCpZ1tk0FhcCNBVsWYk9aaDevsG1zi3pBlyZmizDaSxJw4rKUU0R8Bf4EX7Pq1410rKwSR463g38M6y+7e1FpMYZ0dlWVaiMizx3X1+gm8Gt5ZVa9IDED11SL+B/gnJ54BAo7R35cAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjQtMDktMjZUMTk6NDY6MjErMDA6MDBK3HWeAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDI0LTA5LTI2VDE5OjQ2OjIxKzAwOjAwO4HNIgAAACh0RVh0ZGF0ZTp0aW1lc3RhbXAAMjAyNC0wOS0yNlQxOTo0NjozNSswMDowMFRxyHAAAAAASUVORK5CYII=" />
|
||||
</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>This file is from <span style="color:#AA0000;">${date}</span></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> <button id="bootMenu">Enter Boot Menu</button></p></div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
23
desktopRuntime/resources/SignedBundleTemplate.txt
Normal file
@ -0,0 +1,23 @@
|
||||
"use strict";
|
||||
${classes_js}
|
||||
|
||||
// %%%%%%%%% launch options %%%%%%%%%%%%
|
||||
|
||||
if(typeof window !== "undefined") {
|
||||
window.eaglercraftXClientScriptElement = document.currentScript;
|
||||
if(window.eaglercraftXOptsHints && window.eaglercraftXOptsHints.hintsVersion === 1) {
|
||||
window.eaglercraftXOpts = window.eaglercraftXOptsHints;
|
||||
}else {
|
||||
var relayzId = Math.floor(Math.random() * 3);
|
||||
window.eaglercraftXOpts = {
|
||||
container: "game_frame"
|
||||
};
|
||||
}
|
||||
window.addEventListener("load", function() {
|
||||
main();
|
||||
});
|
||||
}
|
||||
|
||||
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
if(typeof window !== "undefined") { window.eaglercraftXOpts.enableSignatureBadge = true; window.eaglercraftXOpts.assetsURI = ${assets_epk}; main(); }
|
@ -5,27 +5,19 @@
|
||||
<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 Offline" />
|
||||
<meta name="keywords" content="eaglercraft, eaglercraftx, minecraft, 1.8, 1.8.8" />
|
||||
<title>EaglercraftX 1.8</title>
|
||||
<title>Starlike Client</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="Play minecraft 1.8 in your browser" />
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
var relayId = Math.floor(Math.random() * 3);
|
||||
|
||||
// %%%%%%%%% launch options %%%%%%%%%%%%
|
||||
|
||||
window.eaglercraftXOptsHints = {
|
||||
hintsVersion: 1,
|
||||
container: "game_frame",
|
||||
worldsDB: "worlds",
|
||||
relays: [
|
||||
{ addr: "wss://relay.deev.is/", comment: "lax1dude relay #1", primary: relayId === 0 },
|
||||
{ addr: "wss://relay.lax1dude.net/", comment: "lax1dude relay #2", primary: relayId === 1 },
|
||||
{ addr: "wss://relay.shhnowisnottheti.me/", comment: "ayunami relay #1", primary: relayId === 2 }
|
||||
],
|
||||
checkRelaysForUpdates: true
|
||||
container: "game_frame"
|
||||
};
|
||||
|
||||
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
@ -249,7 +241,7 @@ window.eaglercraftXOptsHints = {
|
||||
});
|
||||
})();
|
||||
</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==" />
|
||||
<link type="image/png" rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQfoCRoTLiOzd4OyAAAH2UlEQVRYw8WWS4jlRxXGf6eq/s97b/9v3+6ZSc9IHpMYkqjRWUQwIUTciEoURATBjSBuFBFcibhxbdy5MkQQQTGRKD5WKojii/hEM5o4SXomPenp6dft+/i/quq4mE6EJCYmgn6b2pyq8/HVOd858H+GXOdO/4ehCgIqAVHLvt+j0+6/JuCOz5Ne/aSObS1IK0gnSC8ivYAHwsCUGjQgeu3KxK6/5LFtf/n1KaDo50d28JlJsrLs1Tdd9LVXv+zVL72GRdAwDxrnUeM8EOdR40yQeWqSLeAXwMHrJeEQ8DGcuXt8bv2u6m3stDuoxmPRlYgSNOA14NXTR08g8lx7lceO/top+hvgQeB7wPS1f0HEGGQ8cEP+NL/A+dnjxOix4nDG4sTh5NqZiKOwOTeUN3JLeZbfzx5Pg+q9wN3AJ4CHXjsBITGYKpGUvX6fhZ8Toie1GRkF0Rg6DURtiCjOO9KkQomEY6UACwSA+6oKp8pPjo7+MwKKZlZs5UxGE1p8DCgwSdd5x+rbETEoio+BXnsisJ6tc7XZImrEiAHoFXYmSQ+AF+G+qnr17Ko4Vc2dsSMjCW3siChWHNflp9nr9/nt4e8obUFucnKbUZicw36PC4unASE3kZXESy7x42ns7umaOI0xTqPGqUY9UtUZ6BxYAEuQxjrT5kXeikjvFB04cQMRR6ceBYxYSjficrvNU/UmFouiAFuKXgBWDGYoYspEfPXm6/PB+z/67g8GkzOfLpnPahazOi7ntV/O675eNm2zbNu2aZdd0y3btpnXi+VlVR5wig6dpKWKpYueCKgYjDjmYYmqoqIIgqI/7WP3BScOMdZ4FVZM/8nrx3z2Ax8akN94A0SBaInBmOAl9b2kXauDrlGaOtAuAr965Md8/Wu/pFfe4lR1JTFJ7hF69USFoBGvyq2jO0hMThsbmlDTxvb+PvbnmljPZv7oEOITAbljZWgQ1xH7fVC9ZjBGsKniUiEfCiCIMdAH/vzNZ4gxAuY6p+g4tXmW2BwjDhGL18jfZue5YXCW68ubSU1KYhKs2HFq0nEqKQ9vfYOddvs9EaGqEkwi4DtUIfYBv0hIygLjwFjAKCho03CwtySogLDtUJ3kSZmcHJzmbHkba8kprnRbLMKS87O/vlCtIDjjmGQnODd+OyCAkogyHicYG1Hfggjt1UO+/aU/8NR0RDUuGK3krIwLVsYFw4Hl4m6GKoiw7YyYE23fJ7v1jFPDG7m9vJPt+Q5tqGlDw0G3x6XlBeb9FAGsJCxDSxsbDEJqlWqcAAH1LWIM3dGMv/xhk18/EbGCB54WEWeMDK2zOWgmRlLgsnPGPbndXHz40UsPruW2XB1kZeU0H2amLDObl7esvNXUocaHiCBUyTppmtHFDgPkTlmpHGiPeg/G0BzOWdSKcwYjXAE+AmwDlfe+AhmLsAZsOpTvH/idH+72l1OLLXRuBhYztNj1zBZfHiYn7nImJTElbVyQ2gI14LVHRCkSGFUJGns0gljD8nDOotHjb+IQ2AR2gS0RebEVy6cqNzmnqhqJAqqqOhNk34lbnQwmdL4BdujVMw9zriwOCTGQCJSpMhhZ9LgAFcPiYEndHaeHfaAG+Nn0pbPKqcYP37p6z72nB7cy7w9p/IwmzKn9jKAdVgYswoJWWxJTkNiCJnZEAlaUQS5kWYdf7oMKagyz3RlN/7wA7ALNKwwjqU6Vb6QwKa1YymwDZ1KcyTBieW5xlYvLfzDzM1Kb4kxOE2tUFYsyKiBNldjUqIIBjvZr+iDPK3BFRILG+PIEjNixkYTt5TNsLTcpTcUyHiIIiNCFljZ2iJjjEV2wCDMUxYoyHhvSoUGDR4MSQmR60OP/le+KqhJCeHkCglmL4pgMbscka5Qu4bnFFl1Y0scGp4KKwUpPYXNyN2Svu3LcksraCUO2lmFGBbHt6Z6bcjT1xGtGA3AZwDr3shPSRfWP/f7KIycGydpq4YbDqhgVqS3dIJmQmBxrEgRD1IgTw2pxExdmfwI4NiFBaNEIxIif1RwceHqvWCuqynWq8Q5jzExEZiJSAx2gxloc8L7DZnOwXz89BlkT7Clr7IaV5LQ1yWlnso3EFCcTW04yO6yenf+x3Fk+mRoxc2vIkiZk7eUpbqNEu4ivA6dvexPnkoTZ4UwWs8Xn6mXz6bZpj3zfH6jGXblWmI/GEB5xwCK1wwWw82J5tj52kclXqxQoQUfARDAnnCnGheWwSsIDg0zvRDpM4ej2O6yD995f8p50jTacpW7TfMEonx6EtZ3N3Zt+8PDPeebSISKyCTziXrzFrphVSpMDysZDZ8jssDuW7BC4BFDawJlkeaJITL5apbg8wYhHmwbtPGH3MRAhs4bqppJkUkKfMK0Cv/juDFVBhK1rbfgiHMUDjl6+Y17AfYMKH2QSxYzPz86iT9/Majuk7K+QD+ZktsFqjXUNNof671PEemaXO2bLACLxecUdrxPOym7dxi9+6ztP3Jx+f/NMXhYbg6E7ORplq9W4GK6uDvLJ+imzvjFhnM5YrYSj3R2mi/MI6oGr/xUBYA/4inPCpZ1tk0FhcCNBVsWYk9aaDevsG1zi3pBlyZmizDaSxJw4rKUU0R8Bf4EX7Pq1410rKwSR463g38M6y+7e1FpMYZ0dlWVaiMizx3X1+gm8Gt5ZVa9IDED11SL+B/gnJ54BAo7R35cAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjQtMDktMjZUMTk6NDY6MjErMDA6MDBK3HWeAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDI0LTA5LTI2VDE5OjQ2OjIxKzAwOjAwO4HNIgAAACh0RVh0ZGF0ZTp0aW1lc3RhbXAAMjAyNC0wOS0yNlQxOTo0NjozNSswMDowMFRxyHAAAAAASUVORK5CYII=" />
|
||||
</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">
|
||||
|
2
desktopRuntime/resources/UpdateDownloadSources.txt
Normal file
@ -0,0 +1,2 @@
|
||||
url: https://starlike.zumbiepig.dev/latest_update.dat
|
||||
url: https://starlike.orionzleon.me/latest_update.dat
|
@ -45,28 +45,6 @@
|
||||
"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",
|
||||
@ -78,28 +56,6 @@
|
||||
"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",
|
||||
|
@ -31,23 +31,24 @@
|
||||
"forceWebViewSupport": false,
|
||||
"enableServerCookies": true,
|
||||
"enableDownloadOfflineButton": true,
|
||||
"resourcePacksDB": "resourcePacks",
|
||||
"downloadOfflineButtonLink": "https://starlike.orionzleon.me/offline.html",
|
||||
"resourcePacksDB": "resourcePacks_starlike",
|
||||
"enableWebViewCSP": true,
|
||||
"checkRelaysForUpdates": true,
|
||||
"allowServerRedirects": true,
|
||||
"allowUpdateSvc": true,
|
||||
"html5CursorSupport": false,
|
||||
"html5CursorSupport": true,
|
||||
"allowFNAWSkins": true,
|
||||
"allowVoiceClient": true,
|
||||
"worldsDB": "worlds",
|
||||
"worldsDB": "worlds_starlike",
|
||||
"demoMode": false,
|
||||
"localStorageNamespace": "_eaglercraftX",
|
||||
"enableSignatureBadge": false,
|
||||
"localStorageNamespace": "_eaglercraftX_starlike",
|
||||
"enableSignatureBadge": true,
|
||||
"lang": "en_US",
|
||||
"enableMinceraft": true,
|
||||
"autoFixLegacyStyleAttr": true,
|
||||
"allowUpdateDL": true,
|
||||
"logInvalidCerts": false,
|
||||
"logInvalidCerts": true,
|
||||
"checkShaderGLErrors": false,
|
||||
"crashOnUncaughtExceptions": false,
|
||||
"forceWebGL1": false,
|
||||
@ -62,5 +63,6 @@
|
||||
"disableBlobURLs": false,
|
||||
"eaglerNoDelay": false,
|
||||
"ramdiskMode": false,
|
||||
"singleThreadMode": false
|
||||
"singleThreadMode": false,
|
||||
"enableEPKVersionCheck": true
|
||||
}
|
@ -1,66 +0,0 @@
|
||||
{
|
||||
"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
|
||||
}
|
@ -1,66 +0,0 @@
|
||||
{
|
||||
"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
|
||||
}
|
641
desktopRuntime/resources/assets/eagler/lang/en_US.lang
Normal file
@ -0,0 +1,641 @@
|
||||
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
|
||||
eaglercraft.resourcePack.prompt.add=Select this resource pack
|
||||
eaglercraft.resourcePack.load.refreshing=Refreshing Resources...
|
||||
eaglercraft.resourcePack.load.pleaseWait=Please Wait.
|
||||
eaglercraft.resourcePack.load.loading=Loading resource pack...
|
||||
eaglercraft.resourcePack.load.deleting=Deleting resource pack...
|
||||
|
||||
eaglercraft.gui.exitKey=Use '%s' to close this screen!
|
||||
eaglercraft.gui.exitKeyRetarded=Use Backtick (`) to close this screen!
|
||||
eaglercraft.gui.continue=Continue
|
||||
|
||||
eaglercraft.menu.forkOnGitlab=Fork on GitLab
|
||||
eaglercraft.menu.editProfile=Edit Profile
|
||||
eaglercraft.menu.openToLan=Invite
|
||||
eaglercraft.menu.closeLan=Stop Sharing
|
||||
|
||||
eaglercraft.editProfile.title=Edit Profile
|
||||
eaglercraft.editProfile.username=Username
|
||||
eaglercraft.editProfile.playerSkin=Player Skin
|
||||
eaglercraft.editProfile.addSkin=Add Skin
|
||||
eaglercraft.editProfile.clearSkin=Clear List
|
||||
eaglercraft.editProfile.capes=Capes
|
||||
eaglercraft.editProfile.disableFNAW=(Note: go to 'Options...' > 'Skin Customization' to disable FNAW skins)
|
||||
eaglercraft.editProfile.enableFNAW=(Note: go to 'Options...' > 'Skin Customization' to enable FNAW skins)
|
||||
|
||||
eaglercraft.editCape.title=Edit Cape
|
||||
eaglercraft.editCape.playerCape=Player Cape
|
||||
eaglercraft.editCape.addCape=Add Cape
|
||||
eaglercraft.editCape.clearCape=Clear List
|
||||
|
||||
eaglercraft.editProfile.importExport=Import/Export
|
||||
|
||||
eaglercraft.defaultUsernameDetected.title=Default Username Detected
|
||||
eaglercraft.defaultUsernameDetected.text0=The username "%s" was auto-generated by Eaglercraft
|
||||
eaglercraft.defaultUsernameDetected.text1=It may already be taken on the largest servers
|
||||
eaglercraft.defaultUsernameDetected.text2=Would you like to pick a different username instead?
|
||||
eaglercraft.defaultUsernameDetected.changeUsername=Change Username
|
||||
eaglercraft.defaultUsernameDetected.continueAnyway=Continue Anyway
|
||||
eaglercraft.defaultUsernameDetected.doNotShow=Do not show again
|
||||
|
||||
eaglercraft.settingsBackup.importExport.title=What do you wanna do?
|
||||
eaglercraft.settingsBackup.importExport.import=Import Profile and Settings...
|
||||
eaglercraft.settingsBackup.importExport.export=Export Profile and Settings...
|
||||
|
||||
eaglercraft.settingsBackup.import.title=Import Profile and Settings
|
||||
eaglercraft.settingsBackup.import.option.profile=Import Profile:
|
||||
eaglercraft.settingsBackup.import.option.settings=Import Settings:
|
||||
eaglercraft.settingsBackup.import.option.servers=Import Servers:
|
||||
eaglercraft.settingsBackup.import.option.resourcePacks=Resource Packs:
|
||||
eaglercraft.settingsBackup.import.option.import=Import
|
||||
|
||||
eaglercraft.settingsBackup.export.title=Export Profile and Settings
|
||||
eaglercraft.settingsBackup.export.option.profile=Export Profile:
|
||||
eaglercraft.settingsBackup.export.option.settings=Export Settings:
|
||||
eaglercraft.settingsBackup.export.option.servers=Export Servers:
|
||||
eaglercraft.settingsBackup.export.option.resourcePacks=Resource Packs:
|
||||
eaglercraft.settingsBackup.export.option.export=Export
|
||||
|
||||
eaglercraft.settingsBackup.exporting.1=Exporting Profile...
|
||||
eaglercraft.settingsBackup.exporting.2=Please Wait.
|
||||
|
||||
eaglercraft.settingsBackup.exporting.failed.1=Export Failed!
|
||||
eaglercraft.settingsBackup.exporting.failed.2=Could not compile EPK
|
||||
|
||||
eaglercraft.settingsBackup.importing.1=Importing Profile...
|
||||
eaglercraft.settingsBackup.importing.2=Please Wait.
|
||||
|
||||
eaglercraft.settingsBackup.importing.failed.1=Import Failed!
|
||||
eaglercraft.settingsBackup.importing.failed.2=Could not load EPK
|
||||
|
||||
eaglercraft.resourcePack.importFailed.1=Import Failed!
|
||||
eaglercraft.resourcePack.importFailed.2=Could not import ZIP file
|
||||
|
||||
eaglercraft.singleplayer.integratedStartup=Starting integrated server
|
||||
|
||||
eaglercraft.addServer.SSLWarn1=you are on an https: page!
|
||||
eaglercraft.addServer.SSLWarn2=html5 will only allow wss://
|
||||
|
||||
eaglercraft.chat.exit=Exit Chat
|
||||
|
||||
eaglercraft.handshakeApprove.plaintext.title=Protocol Warning
|
||||
|
||||
eaglercraft.handshakeApprove.plaintext.body.0=§eThis server's 3rd party login system is
|
||||
eaglercraft.handshakeApprove.plaintext.body.1=§eusing insecure plain-text password login
|
||||
|
||||
eaglercraft.handshakeApprove.plaintext.body.3=This means your password can be stolen
|
||||
eaglercraft.handshakeApprove.plaintext.body.4=by who is running this server, and also
|
||||
eaglercraft.handshakeApprove.plaintext.body.5=any proxy you use to connect to it with
|
||||
|
||||
eaglercraft.handshakeApprove.plaintext.body.7=§7Would you like to continue?
|
||||
|
||||
eaglercraft.handshakeApprove.unsupportedAuth.title=Protocol Unsupported
|
||||
|
||||
eaglercraft.handshakeApprove.unsupportedAuth.body.0=§cThis server's login system is using a
|
||||
eaglercraft.handshakeApprove.unsupportedAuth.body.1=§cprotocol not supported by this client
|
||||
|
||||
eaglercraft.handshakeApprove.unsupportedAuth.body.3=Please make sure you are using the
|
||||
eaglercraft.handshakeApprove.unsupportedAuth.body.4=latest version of EaglercraftX or
|
||||
eaglercraft.handshakeApprove.unsupportedAuth.body.5=another fork made for this server
|
||||
|
||||
eaglercraft.options.hud.fps=Show FPS
|
||||
eaglercraft.options.hud.coords=Show XYZ
|
||||
eaglercraft.options.hud.stats=Show Stats HUD
|
||||
eaglercraft.options.hud.world=Show World HUD
|
||||
eaglercraft.options.hud.player=Show Player
|
||||
eaglercraft.options.hud.note=Check 'Video Settings' for the option to hide XYZ
|
||||
eaglercraft.options.hud.24h=24h Day
|
||||
eaglercraft.options.chunkFix=Chunk Lag Fix
|
||||
eaglercraft.options.fog=Fog
|
||||
eaglercraft.options.fxaa=FXAA Antialiasing
|
||||
eaglercraft.options.fxaa.auto=Auto
|
||||
eaglercraft.options.fastMath=Fast Math
|
||||
eaglercraft.options.fastMath.0=OFF
|
||||
eaglercraft.options.fastMath.1=Low
|
||||
eaglercraft.options.fastMath.2=High
|
||||
eaglercraft.options.dynamicLights=Dynamic Lights
|
||||
|
||||
eaglercraft.key.function=Function
|
||||
eaglercraft.key.zoomCamera=Zoom Camera
|
||||
eaglercraft.key.close=Close Screen
|
||||
|
||||
eaglercraft.disconnect.tooManyRequests=Too Many Requests!
|
||||
|
||||
eaglercraft.auth.required=Authentication Required
|
||||
eaglercraft.auth.continue=Join Server
|
||||
|
||||
eaglercraft.shaders.gui.optionsButton=Shaders...
|
||||
eaglercraft.shaders.gui.title=Shaders
|
||||
eaglercraft.shaders.gui.enable=Enable Shaders
|
||||
eaglercraft.shaders.gui.headerTier1=Simple Effects (fast)
|
||||
eaglercraft.shaders.gui.headerTier2=Intermediate Effects (not as fast)
|
||||
|
||||
|
||||
eaglercraft.shaders.gui.option.WAVING_BLOCKS.label=Waving Grass
|
||||
|
||||
eaglercraft.shaders.gui.option.WAVING_BLOCKS.desc.0=The classic vanilla shader that make grass and leaf blocks move with the wind
|
||||
eaglercraft.shaders.gui.option.WAVING_BLOCKS.desc.2=ON: slower, complex control flow
|
||||
eaglercraft.shaders.gui.option.WAVING_BLOCKS.desc.3=OFF: faster, simple control flow
|
||||
|
||||
eaglercraft.shaders.gui.option.DYNAMIC_LIGHTS.label=Dynamic Lights
|
||||
|
||||
eaglercraft.shaders.gui.option.DYNAMIC_LIGHTS.desc.0=Items like torches, glowstone, jack o'lanterns, etc. light up the area around them when they are held or dropped
|
||||
eaglercraft.shaders.gui.option.DYNAMIC_LIGHTS.desc.2=This feature usually does not affect FPS unless there is a large number of dynamic light sources close to the player
|
||||
eaglercraft.shaders.gui.option.DYNAMIC_LIGHTS.desc.4=ON: enable dynamic lights
|
||||
eaglercraft.shaders.gui.option.DYNAMIC_LIGHTS.desc.5=OFF: disable dynamic lights
|
||||
|
||||
eaglercraft.shaders.gui.option.GLOBAL_AMBIENT_OCCLUSION.label=Global SSAO
|
||||
|
||||
eaglercraft.shaders.gui.option.GLOBAL_AMBIENT_OCCLUSION.desc.0=Applies realistic screenspace ambient occlusion (SSAO) to areas of the screen that vanilla Minecraft's default "Smooth Lighting" feature cannot
|
||||
eaglercraft.shaders.gui.option.GLOBAL_AMBIENT_OCCLUSION.desc.2=This effect can greatly reduce lag spikes caused by chunk updates in exchange for a decreased maximum FPS when standing still
|
||||
eaglercraft.shaders.gui.option.GLOBAL_AMBIENT_OCCLUSION.desc.4=ON: use SSAO
|
||||
eaglercraft.shaders.gui.option.GLOBAL_AMBIENT_OCCLUSION.desc.5=OFF: use vanilla
|
||||
|
||||
eaglercraft.shaders.gui.option.SHADOWS_SUN.label=Sun Shadow Dist
|
||||
|
||||
eaglercraft.shaders.gui.option.SHADOWS_SUN.desc.0=Makes the sun and moon cast shadows on the world, you almost definitely want to enable this
|
||||
eaglercraft.shaders.gui.option.SHADOWS_SUN.desc.2=0: off
|
||||
eaglercraft.shaders.gui.option.SHADOWS_SUN.desc.3=1: 16 blocks
|
||||
eaglercraft.shaders.gui.option.SHADOWS_SUN.desc.4=2: 32 blocks
|
||||
eaglercraft.shaders.gui.option.SHADOWS_SUN.desc.5=3: 64 blocks
|
||||
eaglercraft.shaders.gui.option.SHADOWS_SUN.desc.6=4: 128 blocks
|
||||
|
||||
eaglercraft.shaders.gui.option.SHADOWS_COLORED.label=Color Shadow
|
||||
|
||||
eaglercraft.shaders.gui.option.SHADOWS_COLORED.desc.0=Makes blocks like stained glass cast colored shadows
|
||||
eaglercraft.shaders.gui.option.SHADOWS_COLORED.desc.2=ON: colored shadows (slower)
|
||||
eaglercraft.shaders.gui.option.SHADOWS_COLORED.desc.3=OFF: grayscale shadows (faster)
|
||||
|
||||
eaglercraft.shaders.gui.option.SHADOWS_SMOOTHED.label=Smooth Shadow
|
||||
|
||||
eaglercraft.shaders.gui.option.SHADOWS_SMOOTHED.desc.0=Smooths out the edges of sun and dynamic light shadows to get rid of aliasing
|
||||
eaglercraft.shaders.gui.option.SHADOWS_SMOOTHED.desc.2=ON: smooth shadows (slower)
|
||||
eaglercraft.shaders.gui.option.SHADOWS_SMOOTHED.desc.3=OFF: aliased shadows (faster)
|
||||
|
||||
eaglercraft.shaders.gui.option.REFLECTIONS_PARABOLOID.label=Env. Mapping
|
||||
|
||||
eaglercraft.shaders.gui.option.REFLECTIONS_PARABOLOID.desc.0=Renders an environment map, allows transparent blocks and moving entities to reflect their surroundings
|
||||
eaglercraft.shaders.gui.option.REFLECTIONS_PARABOLOID.desc.2=Uses dual paraboloid mapping, only 2 render passes are required to render all reflections, instead of a full 6 render passes like a conventional cube map
|
||||
eaglercraft.shaders.gui.option.REFLECTIONS_PARABOLOID.desc.4=ON: render env. map (slower)
|
||||
eaglercraft.shaders.gui.option.REFLECTIONS_PARABOLOID.desc.5=OFF: disable env. map (faster)
|
||||
|
||||
eaglercraft.shaders.gui.option.REALISTIC_WATER.label=Realistic Water
|
||||
|
||||
eaglercraft.shaders.gui.option.REALISTIC_WATER.desc.0=Makes water realistic, adds reflection and refraction effects, uses raytracing
|
||||
eaglercraft.shaders.gui.option.REALISTIC_WATER.desc.2=ON: render realistic water (slower)
|
||||
eaglercraft.shaders.gui.option.REALISTIC_WATER.desc.3=OFF: render vanilla water (faster)
|
||||
|
||||
eaglercraft.shaders.gui.option.LIGHT_SHAFTS.label=God Rays
|
||||
|
||||
eaglercraft.shaders.gui.option.LIGHT_SHAFTS.desc.0=Render god rays (light shafts) for sunlight and moonlight shadows
|
||||
eaglercraft.shaders.gui.option.LIGHT_SHAFTS.desc.2=ON: render god rays (slower)
|
||||
eaglercraft.shaders.gui.option.LIGHT_SHAFTS.desc.3=OFF: disable god rays (faster)
|
||||
|
||||
eaglercraft.shaders.gui.option.SCREEN_SPACE_REFLECTIONS.label=Raytracing
|
||||
|
||||
eaglercraft.shaders.gui.option.SCREEN_SPACE_REFLECTIONS.desc.0=Renders raytraced reflections off of blocks
|
||||
eaglercraft.shaders.gui.option.SCREEN_SPACE_REFLECTIONS.desc.2=Thanks to some advanced optimizations, this feature only has a small impact on FPS and is compatible with old hardware
|
||||
eaglercraft.shaders.gui.option.SCREEN_SPACE_REFLECTIONS.desc.4=Both raymarching and raytracing are employed, raymarching is initially used to locate and track groups of pixels on the screen to reflect, then raytracing is used to reproject that data between multiple frames so the raymarching process only has to be repeated once or twice every few seconds
|
||||
eaglercraft.shaders.gui.option.SCREEN_SPACE_REFLECTIONS.desc.6=ON: enable raytracing (slower)
|
||||
eaglercraft.shaders.gui.option.SCREEN_SPACE_REFLECTIONS.desc.7=OFF: disable raytracing (faster)
|
||||
|
||||
eaglercraft.shaders.gui.option.LIGHT_SHAFTS.desc.0=Render god rays (light shafts) for sunlight and moonlight shadows
|
||||
eaglercraft.shaders.gui.option.LIGHT_SHAFTS.desc.2=ON: render god rays (slower)
|
||||
eaglercraft.shaders.gui.option.LIGHT_SHAFTS.desc.3=OFF: disable god rays (faster)
|
||||
|
||||
eaglercraft.shaders.gui.option.POST_LENS_DISTORION.label=Lens Distort
|
||||
|
||||
eaglercraft.shaders.gui.option.POST_LENS_DISTORION.desc.0=Renders chromatic abberation and lens distorion
|
||||
eaglercraft.shaders.gui.option.POST_LENS_DISTORION.desc.2=ON: render lens distortion (slower)
|
||||
eaglercraft.shaders.gui.option.POST_LENS_DISTORION.desc.3=OFF: disable lens distortion (faster)
|
||||
|
||||
eaglercraft.shaders.gui.option.POST_LENS_FLARES.label=Lens Flares
|
||||
|
||||
eaglercraft.shaders.gui.option.POST_LENS_FLARES.desc.0=Renders filmic lens flares for the sun
|
||||
eaglercraft.shaders.gui.option.POST_LENS_FLARES.desc.2=ON: render lens flares (slower)
|
||||
eaglercraft.shaders.gui.option.POST_LENS_FLARES.desc.3=OFF: disable lens flares (faster)
|
||||
|
||||
eaglercraft.shaders.gui.option.POST_BLOOM.label=Bloom
|
||||
|
||||
eaglercraft.shaders.gui.option.POST_BLOOM.desc.0=Renders bloom for emissive textures and sunlight
|
||||
eaglercraft.shaders.gui.option.POST_BLOOM.desc.2=ON: render bloom (slower)
|
||||
eaglercraft.shaders.gui.option.POST_BLOOM.desc.3=OFF: disable bloom (faster)
|
||||
|
||||
eaglercraft.shaders.gui.option.POST_FXAA.label=FXAA
|
||||
|
||||
eaglercraft.shaders.gui.option.POST_FXAA.desc.0=Applies FXAA antialiasing in post processing
|
||||
eaglercraft.shaders.gui.option.POST_FXAA.desc.2=This is the preferred antialiasing method for minecraft, as classical MSAA cannot antialias the pixels of upscaled textures
|
||||
eaglercraft.shaders.gui.option.POST_FXAA.desc.4=ON: enable fxaa (slower)
|
||||
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
|
||||
|
||||
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.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!
|
||||
|
||||
eaglercraft.singleplayer.busy.killTask=Cancel Task
|
||||
eaglercraft.singleplayer.busy.cancelWarning=Are you sure?
|
||||
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 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!
|
||||
|
||||
eaglercraft.singleplayer.busy.deleting=Deleting world
|
||||
eaglercraft.singleplayer.failed.deleting=Failed to delete world!
|
||||
|
||||
eaglercraft.singleplayer.busy.renaming=Renaming world
|
||||
eaglercraft.singleplayer.failed.renaming=Failed to rename world!
|
||||
|
||||
eaglercraft.singleplayer.busy.duplicating=Duplicating world
|
||||
eaglercraft.singleplayer.failed.duplicating=Failed to duplicate world!
|
||||
|
||||
eaglercraft.singleplayer.busy.importing.1=Importing world as EPK
|
||||
eaglercraft.singleplayer.failed.importing.1=Failed to import world as EPK!
|
||||
|
||||
eaglercraft.singleplayer.busy.importing.2=Importing world as vanilla
|
||||
eaglercraft.singleplayer.failed.importing.2=Failed to import world as vanilla!
|
||||
|
||||
eaglercraft.singleplayer.busy.exporting.1=Exporting world as EPK
|
||||
eaglercraft.singleplayer.failed.exporting.1=Failed to export world as EPK!
|
||||
|
||||
eaglercraft.singleplayer.busy.exporting.2=Exporting world as vanilla
|
||||
eaglercraft.singleplayer.failed.exporting.2=Failed to export world as vanilla!
|
||||
|
||||
eaglercraft.singleplayer.busy.clearplayers=Clearing players
|
||||
eaglercraft.singleplayer.failed.clearplayers=Failed to clear players!
|
||||
|
||||
eaglercraft.singleplayer.busy.startingIntegratedServer=Starting up integrated server
|
||||
eaglercraft.singleplayer.failed.startingIntegratedServer=Failed to start up integrated server!
|
||||
|
||||
eaglercraft.singleplayer.busy.stoppingIntegratedServer=Shutting down integrated server
|
||||
eaglercraft.singleplayer.failed.stoppingIntegratedServer=Failed to shut down integrated server!
|
||||
|
||||
eaglercraft.singleplayer.failed.serverCrash=Integrated server encountered an exception!
|
||||
|
||||
eaglercraft.singleplayer.failed.demo.title=Could not start demo
|
||||
eaglercraft.singleplayer.failed.demo.desc=Failed to start integrated server!
|
||||
|
||||
eaglercraft.singleplayer.notSupported.title=Shared worlds are not supported on this browser!
|
||||
eaglercraft.singleplayer.notSupported.desc=WebRTC is not supported
|
||||
|
||||
eaglercraft.singleplayer.import.title=Import World
|
||||
eaglercraft.singleplayer.import.enterName=Enter world name:
|
||||
eaglercraft.singleplayer.import.continue=Continue
|
||||
eaglercraft.singleplayer.import.reading=Reading: '%s'
|
||||
eaglercraft.singleplayer.import.loadSpawnChunks=Keep spawn chunks loaded: %s
|
||||
eaglercraft.singleplayer.import.enhancedGameRules=Add extra game features: %s
|
||||
|
||||
eaglercraft.singleplayer.create.title=What do you wanna do?
|
||||
eaglercraft.singleplayer.create.create=Create New World
|
||||
eaglercraft.singleplayer.create.create.tooltip=Make a new world for eaglercraft
|
||||
eaglercraft.singleplayer.create.import=Load EPK File
|
||||
eaglercraft.singleplayer.create.import.tooltip=Load an Eaglercraft .epk world file
|
||||
eaglercraft.singleplayer.create.vanilla=Import Vanilla World
|
||||
eaglercraft.singleplayer.create.vanilla.tooltip=Load a vanilla minecraft 1.8 world
|
||||
|
||||
eaglercraft.singleplayer.backup.title=World Backup Menu: '%s'
|
||||
eaglercraft.singleplayer.backup.recreate=Re-Create World
|
||||
eaglercraft.singleplayer.backup.recreate.tooltip=Create a new world with the same seed
|
||||
eaglercraft.singleplayer.backup.seed=Seed:
|
||||
eaglercraft.singleplayer.backup.duplicate=Duplicate World
|
||||
eaglercraft.singleplayer.backup.duplicate.tooltip=Copy this world into a new save
|
||||
eaglercraft.singleplayer.backup.export=Export EPK File
|
||||
eaglercraft.singleplayer.backup.export.tooltip=Download this world as a compressed .epk file
|
||||
eaglercraft.singleplayer.backup.vanilla=Convert to Vanilla
|
||||
eaglercraft.singleplayer.backup.vanilla.tooltip=Download this world as a vanilla 1.8 world
|
||||
eaglercraft.singleplayer.backup.clearPlayerData=Delete Player Data
|
||||
eaglercraft.singleplayer.backup.clearPlayerData.tooltip=Clears the inventories of all players except the owner
|
||||
|
||||
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
|
||||
eaglercraft.networkSettings.default=Set Primary
|
||||
eaglercraft.networkSettings.refresh=Refresh
|
||||
eaglercraft.networkSettings.loadDefaults=Load Defaults
|
||||
eaglercraft.networkSettings.relayTimeout=Connection Timeout:
|
||||
eaglercraft.networkSettings.relayTimeoutChange=change
|
||||
eaglercraft.networkSettings.relayTimeoutTitle=Change Connection Timeout
|
||||
eaglercraft.networkSettings.downloadRelay=Download JAR
|
||||
|
||||
eaglercraft.directConnect.prompt=What would you like to do?
|
||||
eaglercraft.directConnect.lanWorld=Join Shared World
|
||||
eaglercraft.directConnect.lanWorldCode=Enter Join Code:
|
||||
eaglercraft.directConnect.networkSettingsNote=Click 'Network Settings' to add a relay URL
|
||||
eaglercraft.directConnect.ipGrabNote=Note: The world's owner can get your IP address
|
||||
eaglercraft.directConnect.serverJoin=Connect to Server
|
||||
eaglercraft.directConnect.lanWorldJoin=Join World
|
||||
eaglercraft.directConnect.lanWorldRelay=Network Settings
|
||||
|
||||
eaglercraft.lanInfo.title=Shared World Info
|
||||
eaglercraft.lanInfo.desc.0=Eaglercraft shared worlds are NOT limited to your local network like vanilla LAN worlds. This means that anyone with an internet connection and connection to the invite relay can join your world provided they have the code.
|
||||
eaglercraft.lanInfo.desc.1=Join a shared world from the %s screen, or create one with the %s button while in a world.
|
||||
|
||||
eaglercraft.lanServer.legacyClient=Please use EaglercraftX 1.8!
|
||||
|
||||
eaglercraft.lanServer.pauseMenu0=Sharing World
|
||||
eaglercraft.lanServer.pauseMenu1=Relay URL:
|
||||
eaglercraft.lanServer.pauseMenu2=Join Code:
|
||||
|
||||
eaglercraft.lanServer.wouldYouLikeToKick=Would you like to kick all players?
|
||||
|
||||
eaglercraft.lanServer.worldName=World Name:
|
||||
eaglercraft.lanServer.hidden=Hidden:
|
||||
eaglercraft.lanServer.hideCode=hide details
|
||||
eaglercraft.lanServer.showCode=show details
|
||||
eaglercraft.lanServer.opened=Shared world opened on $relay$, join code is §a$code$
|
||||
eaglercraft.lanServer.closed=Shared world closed
|
||||
eaglercraft.lanServer.pleaseWait=Please Wait...
|
||||
eaglercraft.lanServer.relayDisconnected=Warning: connection to invite relay was lost, you must re-share the world to invite more people
|
||||
eaglercraft.lanServer.ipGrabNote=Note: Players joining your world can get your IP address
|
||||
|
||||
eaglercraft.addRelay.title=Add New Relay
|
||||
eaglercraft.addRelay.name=Relay Comment
|
||||
eaglercraft.addRelay.address=Relay Address
|
||||
eaglercraft.addRelay.add=Add Relay
|
||||
eaglercraft.addRelay.primary=Set Primary
|
||||
eaglercraft.addRelay.removeText1=Do you want to remove this relay?
|
||||
|
||||
eaglercraft.noRelay.title=No Relays are Configured!
|
||||
eaglercraft.noRelay.titleFail=No Working Relays Available!
|
||||
eaglercraft.noRelay.noRelay1=Shared Worlds Unavailable: No Relays Configured!
|
||||
eaglercraft.noRelay.noRelay2=Click '§nNetwork Settings§r' to fix
|
||||
eaglercraft.noRelay.worldNotFound1=Could not locate '§c$code$§r'!
|
||||
eaglercraft.noRelay.worldNotFound2=Make sure to add the '§f$code$§r' world's relay URL
|
||||
eaglercraft.noRelay.worldNotFound3=to the relay list 'Network Settings' to connect
|
||||
eaglercraft.noRelay.worldFail=Failed to connect to '$code$'!
|
||||
|
||||
eaglercraft.singleplayer.demo.create.title=What do you wanna do?
|
||||
eaglercraft.singleplayer.demo.create.create=Play Demo World
|
||||
eaglercraft.singleplayer.demo.create.create.tooltip=Play the Minecraft 1.8 demo and invite others
|
||||
eaglercraft.singleplayer.demo.create.join=Join Shared World
|
||||
eaglercraft.singleplayer.demo.create.join.tooltip=Join someone else's world and play multiplayer
|
||||
|
||||
eaglercraft.createWorld.seedNote=Note: Vanilla seeds now work!
|
||||
|
||||
eaglercraft.singleplayer.oldseedwarning.title=Old World Detected!
|
||||
eaglercraft.singleplayer.oldseedwarning.msg1=Please use EaglercraftX u32 or older to "Re-Create" this world
|
||||
eaglercraft.singleplayer.oldseedwarning.msg2=The world's seed will not be the same otherwise :(
|
||||
eaglercraft.singleplayer.oldseedwarning.ok=OK
|
||||
|
||||
eaglercraft.singleplayer.outdatedLANServerKick=This is a 1.5.2 LAN world!
|
||||
|
||||
eaglercraft.options.debugConsoleButton=Open Debug Console
|
||||
|
||||
eaglercraft.tile.bed.setspawn=Respawn point set
|
||||
|
||||
eaglercraft.update.button=Check for updates:
|
||||
eaglercraft.update.none=No updates available!
|
||||
eaglercraft.update.noneNew=No new updates found
|
||||
eaglercraft.update.found=Found new client update
|
||||
eaglercraft.update.update=Update:
|
||||
eaglercraft.update.author=Author:
|
||||
eaglercraft.update.timestamp=Timestamp:
|
||||
eaglercraft.update.size=Size (kB):
|
||||
eaglercraft.update.startDownload=Download
|
||||
eaglercraft.update.viewAll=View All (%d)
|
||||
eaglercraft.update.dismiss=Dismiss
|
||||
eaglercraft.update.downloading=Downloading Updates
|
||||
|
||||
eaglercraft.update.downloadOffline=Download Offline
|
||||
eaglercraft.update.digitallySigned=Digitally Signed (%s)
|
||||
eaglercraft.update.signatureInvalid=Signature Invalid!
|
||||
|
||||
eaglercraft.updateList.title=Versions Available
|
||||
eaglercraft.updateList.download=Download
|
||||
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
|
||||
eaglercraft.voice.titleVoiceBrowserError=(browser issue)
|
||||
eaglercraft.voice.ptt=Press '%s' to speak
|
||||
eaglercraft.voice.pttChangeDesc=(Press Any Key)
|
||||
eaglercraft.voice.changeKey=Change
|
||||
eaglercraft.voice.off=OFF
|
||||
eaglercraft.voice.radius=NEARBY
|
||||
eaglercraft.voice.global=GLOBAL
|
||||
eaglercraft.voice.volumeTitle=Change Volume
|
||||
eaglercraft.voice.volumeListen=Speakers Volume:
|
||||
eaglercraft.voice.volumeSpeak=Microphone Volume:
|
||||
eaglercraft.voice.radiusTitle=Change Listener Radius
|
||||
eaglercraft.voice.radiusLabel=Players Within:
|
||||
eaglercraft.voice.radiusChange=change
|
||||
eaglercraft.voice.notConnected=Not Connected
|
||||
eaglercraft.voice.connecting=Connecting...
|
||||
eaglercraft.voice.unavailable=Could not connect!
|
||||
eaglercraft.voice.connectedGlobal=Connected - Global
|
||||
eaglercraft.voice.connectedRadius=Connected - $f$Within $radius$m
|
||||
eaglercraft.voice.playersListening=Players Listening:
|
||||
eaglercraft.voice.muted=Players Muted:
|
||||
eaglercraft.voice.unmute=unmute
|
||||
eaglercraft.voice.mute=mute
|
||||
eaglercraft.voice.apply=Apply
|
||||
eaglercraft.voice.volumeSpeakerLabel=Speakers:
|
||||
eaglercraft.voice.volumeMicrophoneLabel=Microphone:
|
||||
|
||||
eaglercraft.voice.unsupportedWarning1=Voice Warning
|
||||
eaglercraft.voice.unsupportedWarning2=Your network configuration may not support
|
||||
eaglercraft.voice.unsupportedWarning3=eaglercraft's voice chat.
|
||||
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
|
||||
|
||||
eaglercraft.voice.ipGrabWarning1=IP Logger Warning
|
||||
eaglercraft.voice.ipGrabWarning2=Using Eaglercraft voice chat may allow your
|
||||
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. 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
|
||||
|
||||
eaglercraft.addServer.hideAddr=Hide Addr
|
||||
eaglercraft.addServer.enableCookies=Cookies
|
||||
eaglercraft.addServer.enableCookies.enabled=Enabled
|
||||
eaglercraft.addServer.enableCookies.disabled=Disabled
|
||||
|
||||
lanServer.title=Shared World
|
||||
lanServer.start=Start Shared World
|
||||
|
||||
options.skinCustomisation.enableFNAWSkins=Show FNAW Skins
|
||||
|
||||
resourcePack.openFolder=Open resource pack
|
||||
resourcePack.folderInfo=(Select resource pack files here)
|
@ -15,245 +15,6 @@ gui.no=No
|
||||
gui.none=None
|
||||
gui.all=All
|
||||
|
||||
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
|
||||
eaglercraft.resourcePack.prompt.add=Select this resource pack
|
||||
eaglercraft.resourcePack.load.refreshing=Refreshing Resources...
|
||||
eaglercraft.resourcePack.load.pleaseWait=Please Wait.
|
||||
eaglercraft.resourcePack.load.loading=Loading resource pack...
|
||||
eaglercraft.resourcePack.load.deleting=Deleting resource pack...
|
||||
|
||||
eaglercraft.gui.exitKey=Use '%s' to close this screen!
|
||||
eaglercraft.gui.exitKeyRetarded=Use Backtick (`) to close this screen!
|
||||
eaglercraft.gui.continue=Continue
|
||||
|
||||
eaglercraft.menu.forkOnGitlab=Fork on GitLab
|
||||
eaglercraft.menu.editProfile=Edit Profile
|
||||
eaglercraft.menu.openToLan=Invite
|
||||
eaglercraft.menu.closeLan=Stop Sharing
|
||||
|
||||
eaglercraft.editProfile.title=Edit Profile
|
||||
eaglercraft.editProfile.username=Username
|
||||
eaglercraft.editProfile.playerSkin=Player Skin
|
||||
eaglercraft.editProfile.addSkin=Add Skin
|
||||
eaglercraft.editProfile.clearSkin=Clear List
|
||||
eaglercraft.editProfile.capes=Capes
|
||||
eaglercraft.editProfile.disableFNAW=(Note: go to 'Options...' > 'Skin Customization' to disable FNAW skins)
|
||||
eaglercraft.editProfile.enableFNAW=(Note: go to 'Options...' > 'Skin Customization' to enable FNAW skins)
|
||||
|
||||
eaglercraft.editCape.title=Edit Cape
|
||||
eaglercraft.editCape.playerCape=Player Cape
|
||||
eaglercraft.editCape.addCape=Add Cape
|
||||
eaglercraft.editCape.clearCape=Clear List
|
||||
|
||||
eaglercraft.editProfile.importExport=Import/Export
|
||||
|
||||
eaglercraft.settingsBackup.importExport.title=What do you wanna do?
|
||||
eaglercraft.settingsBackup.importExport.import=Import Profile and Settings...
|
||||
eaglercraft.settingsBackup.importExport.export=Export Profile and Settings...
|
||||
|
||||
eaglercraft.settingsBackup.import.title=Import Profile and Settings
|
||||
eaglercraft.settingsBackup.import.option.profile=Import Profile:
|
||||
eaglercraft.settingsBackup.import.option.settings=Import Settings:
|
||||
eaglercraft.settingsBackup.import.option.servers=Import Servers:
|
||||
eaglercraft.settingsBackup.import.option.resourcePacks=Resource Packs:
|
||||
eaglercraft.settingsBackup.import.option.import=Import
|
||||
|
||||
eaglercraft.settingsBackup.export.title=Export Profile and Settings
|
||||
eaglercraft.settingsBackup.export.option.profile=Export Profile:
|
||||
eaglercraft.settingsBackup.export.option.settings=Export Settings:
|
||||
eaglercraft.settingsBackup.export.option.servers=Export Servers:
|
||||
eaglercraft.settingsBackup.export.option.resourcePacks=Resource Packs:
|
||||
eaglercraft.settingsBackup.export.option.export=Export
|
||||
|
||||
eaglercraft.settingsBackup.exporting.1=Exporting Profile...
|
||||
eaglercraft.settingsBackup.exporting.2=Please Wait.
|
||||
|
||||
eaglercraft.settingsBackup.exporting.failed.1=Export Failed!
|
||||
eaglercraft.settingsBackup.exporting.failed.2=Could not compile EPK
|
||||
|
||||
eaglercraft.settingsBackup.importing.1=Importing Profile...
|
||||
eaglercraft.settingsBackup.importing.2=Please Wait.
|
||||
|
||||
eaglercraft.settingsBackup.importing.failed.1=Import Failed!
|
||||
eaglercraft.settingsBackup.importing.failed.2=Could not load EPK
|
||||
|
||||
eaglercraft.resourcePack.importFailed.1=Import Failed!
|
||||
eaglercraft.resourcePack.importFailed.2=Could not import ZIP file
|
||||
|
||||
eaglercraft.singleplayer.integratedStartup=Starting integrated server
|
||||
|
||||
eaglercraft.addServer.SSLWarn1=you are on an https: page!
|
||||
eaglercraft.addServer.SSLWarn2=html5 will only allow wss://
|
||||
|
||||
eaglercraft.chat.exit=Exit Chat
|
||||
|
||||
eaglercraft.handshakeApprove.plaintext.title=Protocol Warning
|
||||
|
||||
eaglercraft.handshakeApprove.plaintext.body.0=§eThis server's 3rd party login system is
|
||||
eaglercraft.handshakeApprove.plaintext.body.1=§eusing insecure plain-text password login
|
||||
|
||||
eaglercraft.handshakeApprove.plaintext.body.3=This means your password can be stolen
|
||||
eaglercraft.handshakeApprove.plaintext.body.4=by who is running this server, and also
|
||||
eaglercraft.handshakeApprove.plaintext.body.5=any proxy you use to connect to it with
|
||||
|
||||
eaglercraft.handshakeApprove.plaintext.body.7=§7Would you like to continue?
|
||||
|
||||
eaglercraft.handshakeApprove.unsupportedAuth.title=Protocol Unsupported
|
||||
|
||||
eaglercraft.handshakeApprove.unsupportedAuth.body.0=§cThis server's login system is using a
|
||||
eaglercraft.handshakeApprove.unsupportedAuth.body.1=§cprotocol not supported by this client
|
||||
|
||||
eaglercraft.handshakeApprove.unsupportedAuth.body.3=Please make sure you are using the
|
||||
eaglercraft.handshakeApprove.unsupportedAuth.body.4=latest version of EaglercraftX or
|
||||
eaglercraft.handshakeApprove.unsupportedAuth.body.5=another fork made for this server
|
||||
|
||||
eaglercraft.options.hud.fps=Show FPS
|
||||
eaglercraft.options.hud.coords=Show XYZ
|
||||
eaglercraft.options.hud.stats=Show Stats HUD
|
||||
eaglercraft.options.hud.world=Show World HUD
|
||||
eaglercraft.options.hud.player=Show Player
|
||||
eaglercraft.options.hud.note=Check 'Video Settings' for the option to hide XYZ
|
||||
eaglercraft.options.hud.24h=24h Day
|
||||
eaglercraft.options.chunkFix=Chunk Lag Fix
|
||||
eaglercraft.options.fog=Fog
|
||||
eaglercraft.options.fxaa=FXAA Antialiasing
|
||||
eaglercraft.options.fxaa.auto=Auto
|
||||
eaglercraft.options.fastMath=Fast Math
|
||||
eaglercraft.options.fastMath.0=OFF
|
||||
eaglercraft.options.fastMath.1=Low
|
||||
eaglercraft.options.fastMath.2=High
|
||||
eaglercraft.options.dynamicLights=Dynamic Lights
|
||||
|
||||
eaglercraft.key.function=Function
|
||||
eaglercraft.key.zoomCamera=Zoom Camera
|
||||
eaglercraft.key.close=Close Screen
|
||||
|
||||
eaglercraft.disconnect.tooManyRequests=Too Many Requests!
|
||||
|
||||
eaglercraft.auth.required=Authentication Required
|
||||
eaglercraft.auth.continue=Join Server
|
||||
|
||||
eaglercraft.shaders.gui.optionsButton=Shaders...
|
||||
eaglercraft.shaders.gui.title=Shaders
|
||||
eaglercraft.shaders.gui.enable=Enable Shaders
|
||||
eaglercraft.shaders.gui.headerTier1=Simple Effects (fast)
|
||||
eaglercraft.shaders.gui.headerTier2=Intermediate Effects (not as fast)
|
||||
|
||||
|
||||
eaglercraft.shaders.gui.option.WAVING_BLOCKS.label=Waving Grass
|
||||
|
||||
eaglercraft.shaders.gui.option.WAVING_BLOCKS.desc.0=The classic vanilla shader that make grass and leaf blocks move with the wind
|
||||
eaglercraft.shaders.gui.option.WAVING_BLOCKS.desc.2=ON: slower, complex control flow
|
||||
eaglercraft.shaders.gui.option.WAVING_BLOCKS.desc.3=OFF: faster, simple control flow
|
||||
|
||||
eaglercraft.shaders.gui.option.DYNAMIC_LIGHTS.label=Dynamic Lights
|
||||
|
||||
eaglercraft.shaders.gui.option.DYNAMIC_LIGHTS.desc.0=Items like torches, glowstone, jack o'lanterns, etc. light up the area around them when they are held or dropped
|
||||
eaglercraft.shaders.gui.option.DYNAMIC_LIGHTS.desc.2=This feature usually does not affect FPS unless there is a large number of dynamic light sources close to the player
|
||||
eaglercraft.shaders.gui.option.DYNAMIC_LIGHTS.desc.4=ON: enable dynamic lights
|
||||
eaglercraft.shaders.gui.option.DYNAMIC_LIGHTS.desc.5=OFF: disable dynamic lights
|
||||
|
||||
eaglercraft.shaders.gui.option.GLOBAL_AMBIENT_OCCLUSION.label=Global SSAO
|
||||
|
||||
eaglercraft.shaders.gui.option.GLOBAL_AMBIENT_OCCLUSION.desc.0=Applies realistic screenspace ambient occlusion (SSAO) to areas of the screen that vanilla Minecraft's default "Smooth Lighting" feature cannot
|
||||
eaglercraft.shaders.gui.option.GLOBAL_AMBIENT_OCCLUSION.desc.2=This effect can greatly reduce lag spikes caused by chunk updates in exchange for a decreased maximum FPS when standing still
|
||||
eaglercraft.shaders.gui.option.GLOBAL_AMBIENT_OCCLUSION.desc.4=ON: use SSAO
|
||||
eaglercraft.shaders.gui.option.GLOBAL_AMBIENT_OCCLUSION.desc.5=OFF: use vanilla
|
||||
|
||||
eaglercraft.shaders.gui.option.SHADOWS_SUN.label=Sun Shadow Dist
|
||||
|
||||
eaglercraft.shaders.gui.option.SHADOWS_SUN.desc.0=Makes the sun and moon cast shadows on the world, you almost definitely want to enable this
|
||||
eaglercraft.shaders.gui.option.SHADOWS_SUN.desc.2=0: off
|
||||
eaglercraft.shaders.gui.option.SHADOWS_SUN.desc.3=1: 16 blocks
|
||||
eaglercraft.shaders.gui.option.SHADOWS_SUN.desc.4=2: 32 blocks
|
||||
eaglercraft.shaders.gui.option.SHADOWS_SUN.desc.5=3: 64 blocks
|
||||
eaglercraft.shaders.gui.option.SHADOWS_SUN.desc.6=4: 128 blocks
|
||||
|
||||
eaglercraft.shaders.gui.option.SHADOWS_COLORED.label=Color Shadow
|
||||
|
||||
eaglercraft.shaders.gui.option.SHADOWS_COLORED.desc.0=Makes blocks like stained glass cast colored shadows
|
||||
eaglercraft.shaders.gui.option.SHADOWS_COLORED.desc.2=ON: colored shadows (slower)
|
||||
eaglercraft.shaders.gui.option.SHADOWS_COLORED.desc.3=OFF: grayscale shadows (faster)
|
||||
|
||||
eaglercraft.shaders.gui.option.SHADOWS_SMOOTHED.label=Smooth Shadow
|
||||
|
||||
eaglercraft.shaders.gui.option.SHADOWS_SMOOTHED.desc.0=Smooths out the edges of sun and dynamic light shadows to get rid of aliasing
|
||||
eaglercraft.shaders.gui.option.SHADOWS_SMOOTHED.desc.2=ON: smooth shadows (slower)
|
||||
eaglercraft.shaders.gui.option.SHADOWS_SMOOTHED.desc.3=OFF: aliased shadows (faster)
|
||||
|
||||
eaglercraft.shaders.gui.option.REFLECTIONS_PARABOLOID.label=Env. Mapping
|
||||
|
||||
eaglercraft.shaders.gui.option.REFLECTIONS_PARABOLOID.desc.0=Renders an environment map, allows transparent blocks and moving entities to reflect their surroundings
|
||||
eaglercraft.shaders.gui.option.REFLECTIONS_PARABOLOID.desc.2=Uses dual paraboloid mapping, only 2 render passes are required to render all reflections, instead of a full 6 render passes like a conventional cube map
|
||||
eaglercraft.shaders.gui.option.REFLECTIONS_PARABOLOID.desc.4=ON: render env. map (slower)
|
||||
eaglercraft.shaders.gui.option.REFLECTIONS_PARABOLOID.desc.5=OFF: disable env. map (faster)
|
||||
|
||||
eaglercraft.shaders.gui.option.REALISTIC_WATER.label=Realistic Water
|
||||
|
||||
eaglercraft.shaders.gui.option.REALISTIC_WATER.desc.0=Makes water realistic, adds reflection and refraction effects, uses raytracing
|
||||
eaglercraft.shaders.gui.option.REALISTIC_WATER.desc.2=ON: render realistic water (slower)
|
||||
eaglercraft.shaders.gui.option.REALISTIC_WATER.desc.3=OFF: render vanilla water (faster)
|
||||
|
||||
eaglercraft.shaders.gui.option.LIGHT_SHAFTS.label=God Rays
|
||||
|
||||
eaglercraft.shaders.gui.option.LIGHT_SHAFTS.desc.0=Render god rays (light shafts) for sunlight and moonlight shadows
|
||||
eaglercraft.shaders.gui.option.LIGHT_SHAFTS.desc.2=ON: render god rays (slower)
|
||||
eaglercraft.shaders.gui.option.LIGHT_SHAFTS.desc.3=OFF: disable god rays (faster)
|
||||
|
||||
eaglercraft.shaders.gui.option.SCREEN_SPACE_REFLECTIONS.label=Raytracing
|
||||
|
||||
eaglercraft.shaders.gui.option.SCREEN_SPACE_REFLECTIONS.desc.0=Renders raytraced reflections off of blocks
|
||||
eaglercraft.shaders.gui.option.SCREEN_SPACE_REFLECTIONS.desc.2=Thanks to some advanced optimizations, this feature only has a small impact on FPS and is compatible with old hardware
|
||||
eaglercraft.shaders.gui.option.SCREEN_SPACE_REFLECTIONS.desc.4=Both raymarching and raytracing are employed, raymarching is initially used to locate and track groups of pixels on the screen to reflect, then raytracing is used to reproject that data between multiple frames so the raymarching process only has to be repeated once or twice every few seconds
|
||||
eaglercraft.shaders.gui.option.SCREEN_SPACE_REFLECTIONS.desc.6=ON: enable raytracing (slower)
|
||||
eaglercraft.shaders.gui.option.SCREEN_SPACE_REFLECTIONS.desc.7=OFF: disable raytracing (faster)
|
||||
|
||||
eaglercraft.shaders.gui.option.LIGHT_SHAFTS.desc.0=Render god rays (light shafts) for sunlight and moonlight shadows
|
||||
eaglercraft.shaders.gui.option.LIGHT_SHAFTS.desc.2=ON: render god rays (slower)
|
||||
eaglercraft.shaders.gui.option.LIGHT_SHAFTS.desc.3=OFF: disable god rays (faster)
|
||||
|
||||
eaglercraft.shaders.gui.option.POST_LENS_DISTORION.label=Lens Distort
|
||||
|
||||
eaglercraft.shaders.gui.option.POST_LENS_DISTORION.desc.0=Renders chromatic abberation and lens distorion
|
||||
eaglercraft.shaders.gui.option.POST_LENS_DISTORION.desc.2=ON: render lens distortion (slower)
|
||||
eaglercraft.shaders.gui.option.POST_LENS_DISTORION.desc.3=OFF: disable lens distortion (faster)
|
||||
|
||||
eaglercraft.shaders.gui.option.POST_LENS_FLARES.label=Lens Flares
|
||||
|
||||
eaglercraft.shaders.gui.option.POST_LENS_FLARES.desc.0=Renders filmic lens flares for the sun
|
||||
eaglercraft.shaders.gui.option.POST_LENS_FLARES.desc.2=ON: render lens flares (slower)
|
||||
eaglercraft.shaders.gui.option.POST_LENS_FLARES.desc.3=OFF: disable lens flares (faster)
|
||||
|
||||
eaglercraft.shaders.gui.option.POST_BLOOM.label=Bloom
|
||||
|
||||
eaglercraft.shaders.gui.option.POST_BLOOM.desc.0=Renders bloom for emissive textures and sunlight
|
||||
eaglercraft.shaders.gui.option.POST_BLOOM.desc.2=ON: render bloom (slower)
|
||||
eaglercraft.shaders.gui.option.POST_BLOOM.desc.3=OFF: disable bloom (faster)
|
||||
|
||||
eaglercraft.shaders.gui.option.POST_FXAA.label=FXAA
|
||||
|
||||
eaglercraft.shaders.gui.option.POST_FXAA.desc.0=Applies FXAA antialiasing in post processing
|
||||
eaglercraft.shaders.gui.option.POST_FXAA.desc.2=This is the preferred antialiasing method for minecraft, as classical MSAA cannot antialias the pixels of upscaled textures
|
||||
eaglercraft.shaders.gui.option.POST_FXAA.desc.4=ON: enable fxaa (slower)
|
||||
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
|
||||
|
||||
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.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!
|
||||
|
||||
menu.game=Game menu
|
||||
menu.singleplayer=Singleplayer
|
||||
menu.multiplayer=Multiplayer
|
||||
@ -417,388 +178,6 @@ generator.debug_all_block_states=Debug Mode
|
||||
|
||||
generator.amplified.info=Notice: Just for fun, requires beefy computer
|
||||
|
||||
eaglercraft.singleplayer.busy.killTask=Cancel Task
|
||||
eaglercraft.singleplayer.busy.cancelWarning=Are you sure?
|
||||
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 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!
|
||||
|
||||
eaglercraft.singleplayer.busy.deleting=Deleting world
|
||||
eaglercraft.singleplayer.failed.deleting=Failed to delete world!
|
||||
|
||||
eaglercraft.singleplayer.busy.renaming=Renaming world
|
||||
eaglercraft.singleplayer.failed.renaming=Failed to rename world!
|
||||
|
||||
eaglercraft.singleplayer.busy.duplicating=Duplicating world
|
||||
eaglercraft.singleplayer.failed.duplicating=Failed to duplicate world!
|
||||
|
||||
eaglercraft.singleplayer.busy.importing.1=Importing world as EPK
|
||||
eaglercraft.singleplayer.failed.importing.1=Failed to import world as EPK!
|
||||
|
||||
eaglercraft.singleplayer.busy.importing.2=Importing world as vanilla
|
||||
eaglercraft.singleplayer.failed.importing.2=Failed to import world as vanilla!
|
||||
|
||||
eaglercraft.singleplayer.busy.exporting.1=Exporting world as EPK
|
||||
eaglercraft.singleplayer.failed.exporting.1=Failed to export world as EPK!
|
||||
|
||||
eaglercraft.singleplayer.busy.exporting.2=Exporting world as vanilla
|
||||
eaglercraft.singleplayer.failed.exporting.2=Failed to export world as vanilla!
|
||||
|
||||
eaglercraft.singleplayer.busy.clearplayers=Clearing players
|
||||
eaglercraft.singleplayer.failed.clearplayers=Failed to clear players!
|
||||
|
||||
eaglercraft.singleplayer.busy.startingIntegratedServer=Starting up integrated server
|
||||
eaglercraft.singleplayer.failed.startingIntegratedServer=Failed to start up integrated server!
|
||||
|
||||
eaglercraft.singleplayer.busy.stoppingIntegratedServer=Shutting down integrated server
|
||||
eaglercraft.singleplayer.failed.stoppingIntegratedServer=Failed to shut down integrated server!
|
||||
|
||||
eaglercraft.singleplayer.failed.serverCrash=Integrated server encountered an exception!
|
||||
|
||||
eaglercraft.singleplayer.failed.demo.title=Could not start demo
|
||||
eaglercraft.singleplayer.failed.demo.desc=Failed to start integrated server!
|
||||
|
||||
eaglercraft.singleplayer.notSupported.title=Shared worlds are not supported on this browser!
|
||||
eaglercraft.singleplayer.notSupported.desc=WebRTC is not supported
|
||||
|
||||
eaglercraft.singleplayer.import.title=Import World
|
||||
eaglercraft.singleplayer.import.enterName=Enter world name:
|
||||
eaglercraft.singleplayer.import.continue=Continue
|
||||
eaglercraft.singleplayer.import.reading=Reading: '%s'
|
||||
eaglercraft.singleplayer.import.loadSpawnChunks=Keep spawn chunks loaded: %s
|
||||
eaglercraft.singleplayer.import.enhancedGameRules=Add extra game features: %s
|
||||
|
||||
eaglercraft.singleplayer.create.title=What do you wanna do?
|
||||
eaglercraft.singleplayer.create.create=Create New World
|
||||
eaglercraft.singleplayer.create.create.tooltip=Make a new world for eaglercraft
|
||||
eaglercraft.singleplayer.create.import=Load EPK File
|
||||
eaglercraft.singleplayer.create.import.tooltip=Load an Eaglercraft .epk world file
|
||||
eaglercraft.singleplayer.create.vanilla=Import Vanilla World
|
||||
eaglercraft.singleplayer.create.vanilla.tooltip=Load a vanilla minecraft 1.8 world
|
||||
|
||||
eaglercraft.singleplayer.backup.title=World Backup Menu: '%s'
|
||||
eaglercraft.singleplayer.backup.recreate=Re-Create World
|
||||
eaglercraft.singleplayer.backup.recreate.tooltip=Create a new world with the same seed
|
||||
eaglercraft.singleplayer.backup.seed=Seed:
|
||||
eaglercraft.singleplayer.backup.duplicate=Duplicate World
|
||||
eaglercraft.singleplayer.backup.duplicate.tooltip=Copy this world into a new save
|
||||
eaglercraft.singleplayer.backup.export=Export EPK File
|
||||
eaglercraft.singleplayer.backup.export.tooltip=Download this world as a compressed .epk file
|
||||
eaglercraft.singleplayer.backup.vanilla=Convert to Vanilla
|
||||
eaglercraft.singleplayer.backup.vanilla.tooltip=Download this world as a vanilla 1.8 world
|
||||
eaglercraft.singleplayer.backup.clearPlayerData=Delete Player Data
|
||||
eaglercraft.singleplayer.backup.clearPlayerData.tooltip=Clears the inventories of all players except the owner
|
||||
|
||||
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
|
||||
eaglercraft.networkSettings.default=Set Primary
|
||||
eaglercraft.networkSettings.refresh=Refresh
|
||||
eaglercraft.networkSettings.loadDefaults=Load Defaults
|
||||
eaglercraft.networkSettings.relayTimeout=Connection Timeout:
|
||||
eaglercraft.networkSettings.relayTimeoutChange=change
|
||||
eaglercraft.networkSettings.relayTimeoutTitle=Change Connection Timeout
|
||||
eaglercraft.networkSettings.downloadRelay=Download JAR
|
||||
|
||||
eaglercraft.directConnect.prompt=What would you like to do?
|
||||
eaglercraft.directConnect.lanWorld=Join Shared World
|
||||
eaglercraft.directConnect.lanWorldCode=Enter Join Code:
|
||||
eaglercraft.directConnect.networkSettingsNote=Click 'Network Settings' to add a relay URL
|
||||
eaglercraft.directConnect.ipGrabNote=Note: The world's owner can get your IP address
|
||||
eaglercraft.directConnect.serverJoin=Connect to Server
|
||||
eaglercraft.directConnect.lanWorldJoin=Join World
|
||||
eaglercraft.directConnect.lanWorldRelay=Network Settings
|
||||
|
||||
eaglercraft.lanInfo.title=Shared World Info
|
||||
eaglercraft.lanInfo.desc.0=Eaglercraft shared worlds are NOT limited to your local network like vanilla LAN worlds. This means that anyone with an internet connection and connection to the invite relay can join your world provided they have the code.
|
||||
eaglercraft.lanInfo.desc.1=Join a shared world from the %s screen, or create one with the %s button while in a world.
|
||||
|
||||
eaglercraft.lanServer.legacyClient=Please use EaglercraftX 1.8!
|
||||
|
||||
eaglercraft.lanServer.pauseMenu0=Sharing World
|
||||
eaglercraft.lanServer.pauseMenu1=Relay URL:
|
||||
eaglercraft.lanServer.pauseMenu2=Join Code:
|
||||
|
||||
eaglercraft.lanServer.wouldYouLikeToKick=Would you like to kick all players?
|
||||
|
||||
eaglercraft.lanServer.worldName=World Name:
|
||||
eaglercraft.lanServer.hidden=Hidden:
|
||||
eaglercraft.lanServer.hideCode=hide details
|
||||
eaglercraft.lanServer.showCode=show details
|
||||
eaglercraft.lanServer.opened=Shared world opened on $relay$, join code is §a$code$
|
||||
eaglercraft.lanServer.closed=Shared world closed
|
||||
eaglercraft.lanServer.pleaseWait=Please Wait...
|
||||
eaglercraft.lanServer.relayDisconnected=Warning: connection to invite relay was lost, you must re-share the world to invite more people
|
||||
eaglercraft.lanServer.ipGrabNote=Note: Players joining your world can get your IP address
|
||||
|
||||
eaglercraft.addRelay.title=Add New Relay
|
||||
eaglercraft.addRelay.name=Relay Comment
|
||||
eaglercraft.addRelay.address=Relay Address
|
||||
eaglercraft.addRelay.add=Add Relay
|
||||
eaglercraft.addRelay.primary=Set Primary
|
||||
eaglercraft.addRelay.removeText1=Do you want to remove this relay?
|
||||
|
||||
eaglercraft.noRelay.title=No Relays are Configured!
|
||||
eaglercraft.noRelay.titleFail=No Working Relays Available!
|
||||
eaglercraft.noRelay.noRelay1=Shared Worlds Unavailable: No Relays Configured!
|
||||
eaglercraft.noRelay.noRelay2=Click '§nNetwork Settings§r' to fix
|
||||
eaglercraft.noRelay.worldNotFound1=Could not locate '§c$code$§r'!
|
||||
eaglercraft.noRelay.worldNotFound2=Make sure to add the '§f$code$§r' world's relay URL
|
||||
eaglercraft.noRelay.worldNotFound3=to the relay list 'Network Settings' to connect
|
||||
eaglercraft.noRelay.worldFail=Failed to connect to '$code$'!
|
||||
|
||||
eaglercraft.singleplayer.demo.create.title=What do you wanna do?
|
||||
eaglercraft.singleplayer.demo.create.create=Play Demo World
|
||||
eaglercraft.singleplayer.demo.create.create.tooltip=Play the Minecraft 1.8 demo and invite others
|
||||
eaglercraft.singleplayer.demo.create.join=Join Shared World
|
||||
eaglercraft.singleplayer.demo.create.join.tooltip=Join someone else's world and play multiplayer
|
||||
|
||||
eaglercraft.createWorld.seedNote=Note: Vanilla seeds now work!
|
||||
|
||||
eaglercraft.singleplayer.oldseedwarning.title=Old World Detected!
|
||||
eaglercraft.singleplayer.oldseedwarning.msg1=Please use EaglercraftX u32 or older to "Re-Create" this world
|
||||
eaglercraft.singleplayer.oldseedwarning.msg2=The world's seed will not be the same otherwise :(
|
||||
eaglercraft.singleplayer.oldseedwarning.ok=OK
|
||||
|
||||
eaglercraft.singleplayer.outdatedLANServerKick=This is a 1.5.2 LAN world!
|
||||
|
||||
eaglercraft.options.debugConsoleButton=Open Debug Console
|
||||
|
||||
eaglercraft.tile.bed.setspawn=Respawn point set
|
||||
|
||||
eaglercraft.update.button=Check for updates:
|
||||
eaglercraft.update.none=No updates available!
|
||||
eaglercraft.update.noneNew=No new updates found
|
||||
eaglercraft.update.found=Found new client update
|
||||
eaglercraft.update.update=Update:
|
||||
eaglercraft.update.author=Author:
|
||||
eaglercraft.update.timestamp=Timestamp:
|
||||
eaglercraft.update.size=Size (kB):
|
||||
eaglercraft.update.startDownload=Download
|
||||
eaglercraft.update.viewAll=View All (%d)
|
||||
eaglercraft.update.dismiss=Dismiss
|
||||
eaglercraft.update.downloading=Downloading Updates
|
||||
|
||||
eaglercraft.update.downloadOffline=Download Offline
|
||||
eaglercraft.update.digitallySigned=Digitally Signed (%s)
|
||||
eaglercraft.update.signatureInvalid=Signature Invalid!
|
||||
|
||||
eaglercraft.updateList.title=Versions Available
|
||||
eaglercraft.updateList.download=Download
|
||||
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
|
||||
eaglercraft.voice.titleVoiceBrowserError=(browser issue)
|
||||
eaglercraft.voice.ptt=Press '%s' to speak
|
||||
eaglercraft.voice.pttChangeDesc=(Press Any Key)
|
||||
eaglercraft.voice.changeKey=Change
|
||||
eaglercraft.voice.off=OFF
|
||||
eaglercraft.voice.radius=NEARBY
|
||||
eaglercraft.voice.global=GLOBAL
|
||||
eaglercraft.voice.volumeTitle=Change Volume
|
||||
eaglercraft.voice.volumeListen=Speakers Volume:
|
||||
eaglercraft.voice.volumeSpeak=Microphone Volume:
|
||||
eaglercraft.voice.radiusTitle=Change Listener Radius
|
||||
eaglercraft.voice.radiusLabel=Players Within:
|
||||
eaglercraft.voice.radiusChange=change
|
||||
eaglercraft.voice.notConnected=Not Connected
|
||||
eaglercraft.voice.connecting=Connecting...
|
||||
eaglercraft.voice.unavailable=Could not connect!
|
||||
eaglercraft.voice.connectedGlobal=Connected - Global
|
||||
eaglercraft.voice.connectedRadius=Connected - $f$Within $radius$m
|
||||
eaglercraft.voice.playersListening=Players Listening:
|
||||
eaglercraft.voice.muted=Players Muted:
|
||||
eaglercraft.voice.unmute=unmute
|
||||
eaglercraft.voice.mute=mute
|
||||
eaglercraft.voice.apply=Apply
|
||||
eaglercraft.voice.volumeSpeakerLabel=Speakers:
|
||||
eaglercraft.voice.volumeMicrophoneLabel=Microphone:
|
||||
|
||||
eaglercraft.voice.unsupportedWarning1=Voice Warning
|
||||
eaglercraft.voice.unsupportedWarning2=Your network configuration may not support
|
||||
eaglercraft.voice.unsupportedWarning3=eaglercraft's voice chat.
|
||||
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
|
||||
|
||||
eaglercraft.voice.ipGrabWarning1=IP Logger Warning
|
||||
eaglercraft.voice.ipGrabWarning2=Using Eaglercraft voice chat may allow your
|
||||
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. 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
|
||||
selectServer.select=Join Server
|
||||
@ -817,17 +196,13 @@ 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.title=LAN World
|
||||
lanServer.scanning=Scanning for games on your local network
|
||||
lanServer.start=Start Shared World
|
||||
lanServer.start=Start LAN World
|
||||
lanServer.otherPlayers=Settings for Other Players
|
||||
mcoServer.title=Minecraft Online World
|
||||
|
||||
@ -1003,7 +378,6 @@ options.chat.height.focused=Focused Height
|
||||
options.chat.height.unfocused=Unfocused Height
|
||||
options.skinCustomisation=Skin Customization...
|
||||
options.skinCustomisation.title=Skin Customization
|
||||
options.skinCustomisation.enableFNAWSkins=Show FNAW Skins
|
||||
options.modelPart.cape=Cape
|
||||
options.modelPart.hat=Hat
|
||||
options.modelPart.jacket=Jacket
|
||||
@ -1109,11 +483,11 @@ key.categories.ui=Game Interface
|
||||
key.categories.inventory=Inventory
|
||||
key.categories.stream=Streaming
|
||||
|
||||
resourcePack.openFolder=Open resource pack
|
||||
resourcePack.openFolder=Open resource pack folder
|
||||
resourcePack.title=Select Resource Packs
|
||||
resourcePack.available.title=Available Resource Packs
|
||||
resourcePack.selected.title=Selected Resource Packs
|
||||
resourcePack.folderInfo=(Select resource pack files here)
|
||||
resourcePack.folderInfo=(Place resource pack files here)
|
||||
resourcePack.incompatible=Incompatible
|
||||
resourcePack.incompatible.old=(Made for an older version of Minecraft)
|
||||
resourcePack.incompatible.new=(Made for a newer version of Minecraft)
|
||||
@ -3294,12 +2668,3 @@ item.banner.straight_cross.lightBlue=Light Blue Cross
|
||||
item.banner.straight_cross.magenta=Magenta Cross
|
||||
item.banner.straight_cross.orange=Orange Cross
|
||||
item.banner.straight_cross.white=White Cross
|
||||
|
||||
tile.iron_grate.name=Iron Grate
|
||||
tile.platinum_ore.name=Platinum Ore
|
||||
tile.platinum_block.name=Platinum Block
|
||||
tile.platinum_ingot.name=Platinum Ingot
|
||||
item.platinum_sword.name=Platinum Sword
|
||||
item.platinum_pickaxe.name=Platinum Pickaxe
|
||||
tile.uranium_ore.name=Uranium Ore
|
||||
item.normal_drill.name=Drill
|
||||
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 424 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 444 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 371 B |
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 351 B |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 704 B |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 372 B |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 7.0 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 375 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 530 B |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 774 B |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 672 B After Width: | Height: | Size: 282 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 472 B |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 607 B |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 905 B |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 111 B After Width: | Height: | Size: 164 B |
Before Width: | Height: | Size: 112 B After Width: | Height: | Size: 182 B |
Before Width: | Height: | Size: 110 B After Width: | Height: | Size: 180 B |
Before Width: | Height: | Size: 102 B After Width: | Height: | Size: 158 B |
@ -0,0 +1,5 @@
|
||||
{
|
||||
"variants": {
|
||||
"normal": { "model": "starlike:cobbled_deepstone" }
|
||||
}
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
{
|
||||
"variants": {
|
||||
"normal": { "model": "starlike:deepstone" }
|
||||
}
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
{
|
||||
"variants": {
|
||||
"normal": { "model": "starlike:fabricator" }
|
||||
}
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
{
|
||||
"variants": {
|
||||
"normal": { "model": "starlike:iron_grate" }
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
{
|
||||
"variants": {
|
||||
"variant=oak": { "model": "starlike:oak_mosaic" },
|
||||
"variant=spruce": { "model": "starlike:spruce_mosaic" },
|
||||
"variant=birch": { "model": "starlike:birch_mosaic" },
|
||||
"variant=jungle": { "model": "starlike:jungle_mosaic" },
|
||||
"variant=acacia": { "model": "starlike:acacia_mosaic" },
|
||||
"variant=dark_oak": { "model": "starlike:dark_oak_mosaic" }
|
||||
}
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
{
|
||||
"variants": {
|
||||
"normal": { "model": "starlike:steel_block" }
|
||||
}
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
{
|
||||
"variants": {
|
||||
"normal": { "model": "starlike:steel_grate" }
|
||||
}
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
{
|
||||
"variants": {
|
||||
"normal": { "model": "starlike:titanium_block" }
|
||||
}
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
{
|
||||
"variants": {
|
||||
"normal": { "model": "starlike:titanium_ore" }
|
||||
}
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
{
|
||||
"variants": {
|
||||
"normal": { "model": "starlike:uranium_block" }
|
||||
}
|
||||
}
|
45
desktopRuntime/resources/assets/starlike/lang/en_US.lang
Normal file
@ -0,0 +1,45 @@
|
||||
itemGroup.starlike=Starlike
|
||||
|
||||
commands.gm.success.self=Set own game mode to %s
|
||||
commands.gm.success.other=Set %s's game mode to %s
|
||||
commands.gm.usage=/gm%s [player]
|
||||
|
||||
tile.deepstone.name=Deepstone
|
||||
tile.cobbled_deepstone.name=Cobbled Deepstone
|
||||
|
||||
item.steel.name=Steel
|
||||
tile.steel_block.name=Steel Block
|
||||
tile.steel_grate.name=Steel Grate
|
||||
|
||||
tile.platinum_ore.name=Platinum Ore
|
||||
tile.platinum_block.name=Platinum Block
|
||||
item.platinum_ingot.name=Platinum Ingot
|
||||
item.platinum_sword.name=Platinum Sword
|
||||
item.platinum_pickaxe.name=Platinum Pickaxe
|
||||
item.platinum_shovel.name=Platinum Shovel
|
||||
item.platinum_axe.name=Platinum Axe
|
||||
item.platinum_hoe.name=Platinum Hoe
|
||||
item.platinum_helmet.name=Platinum Helmet
|
||||
item.platinum_chestplate.name=Platinum Chestplate
|
||||
item.platinum_leggings.name=Platinum Leggings
|
||||
item.platinum_boots.name=Platinum Boots
|
||||
|
||||
tile.titanium_ore.name=Titanium Ore
|
||||
tile.titanium_block.name=Titanium Block
|
||||
item.titanium_ingot.name=Titanium Ingot
|
||||
|
||||
tile.uranium_ore.name=Uranium Ore
|
||||
tile.uranium_block.name=Uranium Block
|
||||
item.uranium_crystal.name=Uranium Crystal
|
||||
item.uranium_rod.name=Uranium Rod
|
||||
|
||||
item.platinum_drill.name=Platinum Drill
|
||||
item.titanium_drill.name=Titanium Drill
|
||||
|
||||
tile.mosaic.name=Mosaic
|
||||
tile.mosaic.oak.name=Oak Mosaic
|
||||
tile.mosaic.spruce.name=Spruce Mosaic
|
||||
tile.mosaic.birch.name=Birch Mosaic
|
||||
tile.mosaic.jungle.name=Jungle Mosaic
|
||||
tile.mosaic.acacia.name=Acacia Mosaic
|
||||
tile.mosaic.dark_oak.name=Dark Oak Mosaic
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "starlike:blocks/acacia_mosaic"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "starlike:blocks/birch_mosaic"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "starlike:blocks/cobbled_deepstone"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "starlike:blocks/dark_oak_mosaic"
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "starlike:blocks/iron_grate"
|
||||
"all": "starlike:blocks/deepstone"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "starlike:blocks/fabricator"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "starlike:blocks/jungle_mosaic"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "starlike:blocks/oak_mosaic"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "starlike:blocks/spruce_mosaic"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "starlike:blocks/steel_block"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "starlike:blocks/steel_grate"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "starlike:blocks/titanium_block"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "starlike:blocks/titanium_ore"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "starlike:blocks/uranium_block"
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
{
|
||||
"parent": "starlike:block/acacia_mosaic",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
{
|
||||
"parent": "starlike:block/birch_mosaic",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
{
|
||||
"parent": "starlike:block/cobbled_deepstone",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
{
|
||||
"parent": "starlike:block/dark_oak_mosaic",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"parent": "starlike:block/iron_grate",
|
||||
"parent": "starlike:block/deepstone",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
@ -0,0 +1,10 @@
|
||||
{
|
||||
"parent": "starlike:block/fabricator",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
{
|
||||
"parent": "starlike:block/jungle_mosaic",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
{
|
||||
"parent": "starlike:block/oak_mosaic",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"parent": "builtin/generated",
|
||||
"textures": {
|
||||
"layer0": "starlike:items/normal_drill"
|
||||
"layer0": "starlike:items/platinum_axe"
|
||||
},
|
||||
"display": {
|
||||
"thirdperson": {
|
@ -0,0 +1,18 @@
|
||||
{
|
||||
"parent": "builtin/generated",
|
||||
"textures": {
|
||||
"layer0": "starlike:items/platinum_boots"
|
||||
},
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ -90, 0, 0 ],
|
||||
"translation": [ 0, 1, -2.5 ],
|
||||
"scale": [ 0.55, 0.55, 0.55 ]
|
||||
},
|
||||
"firstperson": {
|
||||
"rotation": [ 0, -135, 25 ],
|
||||
"translation": [ 0, 4, 2 ],
|
||||
"scale": [ 1.7, 1.7, 1.7 ]
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
{
|
||||
"parent": "builtin/generated",
|
||||
"textures": {
|
||||
"layer0": "starlike:items/platinum_chestplate"
|
||||
},
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ -90, 0, 0 ],
|
||||
"translation": [ 0, 1, -3 ],
|
||||
"scale": [ 0.55, 0.55, 0.55 ]
|
||||
},
|
||||
"firstperson": {
|
||||
"rotation": [ 0, -135, 25 ],
|
||||
"translation": [ 0, 4, 2 ],
|
||||
"scale": [ 1.7, 1.7, 1.7 ]
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
{
|
||||
"parent": "builtin/generated",
|
||||
"textures": {
|
||||
"layer0": "starlike:items/platinum_drill"
|
||||
},
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 0, 90, -35 ],
|
||||
"translation": [ 0, 1.25, -3.5 ],
|
||||
"scale": [ 0.85, 0.85, 0.85 ]
|
||||
},
|
||||
"firstperson": {
|
||||
"rotation": [ 0, -135, 25 ],
|
||||
"translation": [ 0, 4, 2 ],
|
||||
"scale": [ 1.7, 1.7, 1.7 ]
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
{
|
||||
"parent": "builtin/generated",
|
||||
"textures": {
|
||||
"layer0": "starlike:items/platinum_helmet"
|
||||
},
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ -90, 0, 0 ],
|
||||
"translation": [ 0, 1, -2.25 ],
|
||||
"scale": [ 0.55, 0.55, 0.55 ]
|
||||
},
|
||||
"firstperson": {
|
||||
"rotation": [ 0, -135, 25 ],
|
||||
"translation": [ 0, 4, 2 ],
|
||||
"scale": [ 1.7, 1.7, 1.7 ]
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
{
|
||||
"parent": "builtin/generated",
|
||||
"textures": {
|
||||
"layer0": "starlike:items/platinum_hoe"
|
||||
},
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 0, 90, -35 ],
|
||||
"translation": [ 0, 1.25, -3.5 ],
|
||||
"scale": [ 0.85, 0.85, 0.85 ]
|
||||
},
|
||||
"firstperson": {
|
||||
"rotation": [ 0, -135, 25 ],
|
||||
"translation": [ 0, 4, 2 ],
|
||||
"scale": [ 1.7, 1.7, 1.7 ]
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
{
|
||||
"parent": "builtin/generated",
|
||||
"textures": {
|
||||
"layer0": "starlike:items/platinum_leggings"
|
||||
},
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ -90, 0, 0 ],
|
||||
"translation": [ 0, 1, -3 ],
|
||||
"scale": [ 0.55, 0.55, 0.55 ]
|
||||
},
|
||||
"firstperson": {
|
||||
"rotation": [ 0, -135, 25 ],
|
||||
"translation": [ 0, 4, 2 ],
|
||||
"scale": [ 1.7, 1.7, 1.7 ]
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
{
|
||||
"parent": "builtin/generated",
|
||||
"textures": {
|
||||
"layer0": "starlike:items/platinum_shovel"
|
||||
},
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 0, 90, -35 ],
|
||||
"translation": [ 0, 1.25, -3.5 ],
|
||||
"scale": [ 0.85, 0.85, 0.85 ]
|
||||
},
|
||||
"firstperson": {
|
||||
"rotation": [ 0, -135, 25 ],
|
||||
"translation": [ 0, 4, 2 ],
|
||||
"scale": [ 1.7, 1.7, 1.7 ]
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
{
|
||||
"parent": "starlike:block/spruce_mosaic",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
{
|
||||
"parent": "builtin/generated",
|
||||
"textures": {
|
||||
"layer0": "starlike:items/steel"
|
||||
},
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ -90, 0, 0 ],
|
||||
"translation": [ 0, 1, -3 ],
|
||||
"scale": [ 0.55, 0.55, 0.55 ]
|
||||
},
|
||||
"firstperson": {
|
||||
"rotation": [ 0, -135, 25 ],
|
||||
"translation": [ 0, 4, 2 ],
|
||||
"scale": [ 1.7, 1.7, 1.7 ]
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
{
|
||||
"parent": "starlike:block/steel_block",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
{
|
||||
"parent": "starlike:block/steel_grate",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
{
|
||||
"parent": "starlike:block/titanium_block",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
{
|
||||
"parent": "builtin/generated",
|
||||
"textures": {
|
||||
"layer0": "starlike:items/titanium_drill"
|
||||
},
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 0, 90, -35 ],
|
||||
"translation": [ 0, 1.25, -3.5 ],
|
||||
"scale": [ 0.85, 0.85, 0.85 ]
|
||||
},
|
||||
"firstperson": {
|
||||
"rotation": [ 0, -135, 25 ],
|
||||
"translation": [ 0, 4, 2 ],
|
||||
"scale": [ 1.7, 1.7, 1.7 ]
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
{
|
||||
"parent": "builtin/generated",
|
||||
"textures": {
|
||||
"layer0": "starlike:items/titanium_ingot"
|
||||
},
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ -90, 0, 0 ],
|
||||
"translation": [ 0, 1, -3 ],
|
||||
"scale": [ 0.55, 0.55, 0.55 ]
|
||||
},
|
||||
"firstperson": {
|
||||
"rotation": [ 0, -135, 25 ],
|
||||
"translation": [ 0, 4, 2 ],
|
||||
"scale": [ 1.7, 1.7, 1.7 ]
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
{
|
||||
"parent": "starlike:block/titanium_ore",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
{
|
||||
"parent": "starlike:block/uranium_block",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|